@orthacms/users-admin 0.0.0-reserve.0

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 (328) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/index.d.ts +6 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +3 -0
  6. package/dist/lib/api/useAddWorkspaceMember/index.d.ts +16 -0
  7. package/dist/lib/api/useAddWorkspaceMember/index.d.ts.map +1 -0
  8. package/dist/lib/api/useInviteMember/index.d.ts +17 -0
  9. package/dist/lib/api/useInviteMember/index.d.ts.map +1 -0
  10. package/dist/lib/api/useMembers/index.d.ts +15 -0
  11. package/dist/lib/api/useMembers/index.d.ts.map +1 -0
  12. package/dist/lib/api/useMembersMutation/index.d.ts +13 -0
  13. package/dist/lib/api/useMembersMutation/index.d.ts.map +1 -0
  14. package/dist/lib/api/useRemoveWorkspaceMember/index.d.ts +15 -0
  15. package/dist/lib/api/useRemoveWorkspaceMember/index.d.ts.map +1 -0
  16. package/dist/lib/api/useResendInvite/index.d.ts +8 -0
  17. package/dist/lib/api/useResendInvite/index.d.ts.map +1 -0
  18. package/dist/lib/api/useRevokeInvite/index.d.ts +7 -0
  19. package/dist/lib/api/useRevokeInvite/index.d.ts.map +1 -0
  20. package/dist/lib/api/useRevokeSession/index.d.ts +15 -0
  21. package/dist/lib/api/useRevokeSession/index.d.ts.map +1 -0
  22. package/dist/lib/api/useSetMemberStatus/index.d.ts +15 -0
  23. package/dist/lib/api/useSetMemberStatus/index.d.ts.map +1 -0
  24. package/dist/lib/api/useUpdateMember/index.d.ts +15 -0
  25. package/dist/lib/api/useUpdateMember/index.d.ts.map +1 -0
  26. package/dist/lib/api/useUserDetail/index.d.ts +9 -0
  27. package/dist/lib/api/useUserDetail/index.d.ts.map +1 -0
  28. package/dist/lib/api/useUserSessions/index.d.ts +25 -0
  29. package/dist/lib/api/useUserSessions/index.d.ts.map +1 -0
  30. package/dist/lib/api/useWorkspaceOptions/index.d.ts +18 -0
  31. package/dist/lib/api/useWorkspaceOptions/index.d.ts.map +1 -0
  32. package/dist/lib/application/useAddWorkspaceMember/index.d.ts +11 -0
  33. package/dist/lib/application/useAddWorkspaceMember/index.d.ts.map +1 -0
  34. package/dist/lib/application/useAddWorkspaceMember/index.js +21 -0
  35. package/dist/lib/application/useInviteMember/index.d.ts +12 -0
  36. package/dist/lib/application/useInviteMember/index.d.ts.map +1 -0
  37. package/dist/lib/application/useInviteMember/index.js +12 -0
  38. package/dist/lib/application/useInviteMemberFlow/index.d.ts +59 -0
  39. package/dist/lib/application/useInviteMemberFlow/index.d.ts.map +1 -0
  40. package/dist/lib/application/useInviteMemberFlow/index.js +47 -0
  41. package/dist/lib/application/useIssuePasswordReset/index.d.ts +12 -0
  42. package/dist/lib/application/useIssuePasswordReset/index.d.ts.map +1 -0
  43. package/dist/lib/application/useIssuePasswordReset/index.js +14 -0
  44. package/dist/lib/application/useMembers/index.d.ts +15 -0
  45. package/dist/lib/application/useMembers/index.d.ts.map +1 -0
  46. package/dist/lib/application/useMembers/index.js +23 -0
  47. package/dist/lib/application/useMembersMutation/index.d.ts +14 -0
  48. package/dist/lib/application/useMembersMutation/index.d.ts.map +1 -0
  49. package/dist/lib/application/useMembersMutation/index.js +25 -0
  50. package/dist/lib/application/usePreferences/index.d.ts +15 -0
  51. package/dist/lib/application/usePreferences/index.d.ts.map +1 -0
  52. package/dist/lib/application/usePreferences/index.js +28 -0
  53. package/dist/lib/application/useRemoveWorkspaceMember/index.d.ts +10 -0
  54. package/dist/lib/application/useRemoveWorkspaceMember/index.d.ts.map +1 -0
  55. package/dist/lib/application/useRemoveWorkspaceMember/index.js +20 -0
  56. package/dist/lib/application/useResendInvite/index.d.ts +10 -0
  57. package/dist/lib/application/useResendInvite/index.d.ts.map +1 -0
  58. package/dist/lib/application/useResendInvite/index.js +12 -0
  59. package/dist/lib/application/useRevokeInvite/index.d.ts +7 -0
  60. package/dist/lib/application/useRevokeInvite/index.d.ts.map +1 -0
  61. package/dist/lib/application/useRevokeInvite/index.js +10 -0
  62. package/dist/lib/application/useRevokeSession/index.d.ts +10 -0
  63. package/dist/lib/application/useRevokeSession/index.d.ts.map +1 -0
  64. package/dist/lib/application/useRevokeSession/index.js +19 -0
  65. package/dist/lib/application/useSetMemberStatus/index.d.ts +11 -0
  66. package/dist/lib/application/useSetMemberStatus/index.d.ts.map +1 -0
  67. package/dist/lib/application/useSetMemberStatus/index.js +11 -0
  68. package/dist/lib/application/useUpdateMember/index.d.ts +11 -0
  69. package/dist/lib/application/useUpdateMember/index.d.ts.map +1 -0
  70. package/dist/lib/application/useUpdateMember/index.js +11 -0
  71. package/dist/lib/application/useUpdateTheme/index.d.ts +14 -0
  72. package/dist/lib/application/useUpdateTheme/index.d.ts.map +1 -0
  73. package/dist/lib/application/useUpdateTheme/index.js +25 -0
  74. package/dist/lib/application/useUserDetail/index.d.ts +9 -0
  75. package/dist/lib/application/useUserDetail/index.d.ts.map +1 -0
  76. package/dist/lib/application/useUserDetail/index.js +17 -0
  77. package/dist/lib/application/useUserSessions/index.d.ts +9 -0
  78. package/dist/lib/application/useUserSessions/index.d.ts.map +1 -0
  79. package/dist/lib/application/useUserSessions/index.js +17 -0
  80. package/dist/lib/application/useWorkspaceOptions/index.d.ts +10 -0
  81. package/dist/lib/application/useWorkspaceOptions/index.d.ts.map +1 -0
  82. package/dist/lib/application/useWorkspaceOptions/index.js +17 -0
  83. package/dist/lib/components/AccountMenu/index.d.ts +9 -0
  84. package/dist/lib/components/AccountMenu/index.d.ts.map +1 -0
  85. package/dist/lib/components/AddToWorkspacesDialog/index.d.ts +19 -0
  86. package/dist/lib/components/AddToWorkspacesDialog/index.d.ts.map +1 -0
  87. package/dist/lib/components/BackLink/index.d.ts +14 -0
  88. package/dist/lib/components/BackLink/index.d.ts.map +1 -0
  89. package/dist/lib/components/ConfirmDialog/index.d.ts +30 -0
  90. package/dist/lib/components/ConfirmDialog/index.d.ts.map +1 -0
  91. package/dist/lib/components/EditMemberDialog/index.d.ts +21 -0
  92. package/dist/lib/components/EditMemberDialog/index.d.ts.map +1 -0
  93. package/dist/lib/components/MemberAvatar/index.d.ts +24 -0
  94. package/dist/lib/components/MemberAvatar/index.d.ts.map +1 -0
  95. package/dist/lib/components/MembersEmpty/index.d.ts +16 -0
  96. package/dist/lib/components/MembersEmpty/index.d.ts.map +1 -0
  97. package/dist/lib/components/MembersNoAccess/index.d.ts +7 -0
  98. package/dist/lib/components/MembersNoAccess/index.d.ts.map +1 -0
  99. package/dist/lib/components/MembersPagination/index.d.ts +17 -0
  100. package/dist/lib/components/MembersPagination/index.d.ts.map +1 -0
  101. package/dist/lib/components/MembersSkeleton/index.d.ts +32 -0
  102. package/dist/lib/components/MembersSkeleton/index.d.ts.map +1 -0
  103. package/dist/lib/components/MembersTable/MemberRoleChip/index.d.ts +10 -0
  104. package/dist/lib/components/MembersTable/MemberRoleChip/index.d.ts.map +1 -0
  105. package/dist/lib/components/MembersTable/MemberRowActions/index.d.ts +16 -0
  106. package/dist/lib/components/MembersTable/MemberRowActions/index.d.ts.map +1 -0
  107. package/dist/lib/components/MembersTable/MemberStatusBadge/index.d.ts +10 -0
  108. package/dist/lib/components/MembersTable/MemberStatusBadge/index.d.ts.map +1 -0
  109. package/dist/lib/components/MembersTable/MemberWorkspaces/index.d.ts +10 -0
  110. package/dist/lib/components/MembersTable/MemberWorkspaces/index.d.ts.map +1 -0
  111. package/dist/lib/components/MembersTable/index.d.ts +12 -0
  112. package/dist/lib/components/MembersTable/index.d.ts.map +1 -0
  113. package/dist/lib/components/MembersToolbar/index.d.ts +13 -0
  114. package/dist/lib/components/MembersToolbar/index.d.ts.map +1 -0
  115. package/dist/lib/components/RolePicker/index.d.ts +18 -0
  116. package/dist/lib/components/RolePicker/index.d.ts.map +1 -0
  117. package/dist/lib/components/SessionCard/index.d.ts +15 -0
  118. package/dist/lib/components/SessionCard/index.d.ts.map +1 -0
  119. package/dist/lib/components/UserDetailLayout/UserDetailTabs/index.d.ts +13 -0
  120. package/dist/lib/components/UserDetailLayout/UserDetailTabs/index.d.ts.map +1 -0
  121. package/dist/lib/components/UserDetailLayout/UserHero/index.d.ts +10 -0
  122. package/dist/lib/components/UserDetailLayout/UserHero/index.d.ts.map +1 -0
  123. package/dist/lib/components/UserDetailLayout/UserSideRail/index.d.ts +12 -0
  124. package/dist/lib/components/UserDetailLayout/UserSideRail/index.d.ts.map +1 -0
  125. package/dist/lib/components/UserDetailLayout/UserStatsStrip/index.d.ts +10 -0
  126. package/dist/lib/components/UserDetailLayout/UserStatsStrip/index.d.ts.map +1 -0
  127. package/dist/lib/components/UserDetailLayout/index.d.ts +13 -0
  128. package/dist/lib/components/UserDetailLayout/index.d.ts.map +1 -0
  129. package/dist/lib/components/UserDetailRouter/index.d.ts +13 -0
  130. package/dist/lib/components/UserDetailRouter/index.d.ts.map +1 -0
  131. package/dist/lib/components/WorkspaceMembershipCard/index.d.ts +15 -0
  132. package/dist/lib/components/WorkspaceMembershipCard/index.d.ts.map +1 -0
  133. package/dist/lib/domain/member/index.d.ts +61 -0
  134. package/dist/lib/domain/member/index.d.ts.map +1 -0
  135. package/dist/lib/domain/member/index.js +61 -0
  136. package/dist/lib/domain/types/member/index.d.ts +90 -0
  137. package/dist/lib/domain/types/member/index.d.ts.map +1 -0
  138. package/dist/lib/domain/types/member/index.js +1 -0
  139. package/dist/lib/domain/types/session/index.d.ts +18 -0
  140. package/dist/lib/domain/types/session/index.d.ts.map +1 -0
  141. package/dist/lib/domain/types/session/index.js +1 -0
  142. package/dist/lib/domain/types/workspaceOption/index.d.ts +15 -0
  143. package/dist/lib/domain/types/workspaceOption/index.d.ts.map +1 -0
  144. package/dist/lib/domain/types/workspaceOption/index.js +1 -0
  145. package/dist/lib/domain/value-objects/email/index.d.ts +24 -0
  146. package/dist/lib/domain/value-objects/email/index.d.ts.map +1 -0
  147. package/dist/lib/domain/value-objects/email/index.js +45 -0
  148. package/dist/lib/infrastructure/httpMemberGateway/index.d.ts +12 -0
  149. package/dist/lib/infrastructure/httpMemberGateway/index.d.ts.map +1 -0
  150. package/dist/lib/infrastructure/httpMemberGateway/index.js +158 -0
  151. package/dist/lib/infrastructure/inviteLink/index.d.ts +13 -0
  152. package/dist/lib/infrastructure/inviteLink/index.d.ts.map +1 -0
  153. package/dist/lib/infrastructure/inviteLink/index.js +23 -0
  154. package/dist/lib/infrastructure/memberGateway/index.d.ts +103 -0
  155. package/dist/lib/infrastructure/memberGateway/index.d.ts.map +1 -0
  156. package/dist/lib/infrastructure/memberGateway/index.js +1 -0
  157. package/dist/lib/infrastructure/memberMapper/index.d.ts +59 -0
  158. package/dist/lib/infrastructure/memberMapper/index.d.ts.map +1 -0
  159. package/dist/lib/infrastructure/memberMapper/index.js +52 -0
  160. package/dist/lib/infrastructure/membersKeys/index.d.ts +37 -0
  161. package/dist/lib/infrastructure/membersKeys/index.d.ts.map +1 -0
  162. package/dist/lib/infrastructure/membersKeys/index.js +25 -0
  163. package/dist/lib/infrastructure/passwordResetLink/index.d.ts +13 -0
  164. package/dist/lib/infrastructure/passwordResetLink/index.d.ts.map +1 -0
  165. package/dist/lib/infrastructure/passwordResetLink/index.js +24 -0
  166. package/dist/lib/infrastructure/preferencesGateway/index.d.ts +37 -0
  167. package/dist/lib/infrastructure/preferencesGateway/index.d.ts.map +1 -0
  168. package/dist/lib/infrastructure/preferencesGateway/index.js +43 -0
  169. package/dist/lib/pages/InviteMemberPage/index.d.ts +7 -0
  170. package/dist/lib/pages/InviteMemberPage/index.d.ts.map +1 -0
  171. package/dist/lib/pages/MembersPage/index.d.ts +13 -0
  172. package/dist/lib/pages/MembersPage/index.d.ts.map +1 -0
  173. package/dist/lib/pages/UserAccessPage/index.d.ts +9 -0
  174. package/dist/lib/pages/UserAccessPage/index.d.ts.map +1 -0
  175. package/dist/lib/pages/UserActivityPage/index.d.ts +8 -0
  176. package/dist/lib/pages/UserActivityPage/index.d.ts.map +1 -0
  177. package/dist/lib/pages/UserGeneralPage/index.d.ts +7 -0
  178. package/dist/lib/pages/UserGeneralPage/index.d.ts.map +1 -0
  179. package/dist/lib/pages/UserRolesPage/index.d.ts +8 -0
  180. package/dist/lib/pages/UserRolesPage/index.d.ts.map +1 -0
  181. package/dist/lib/pages/UserSessionsPage/index.d.ts +7 -0
  182. package/dist/lib/pages/UserSessionsPage/index.d.ts.map +1 -0
  183. package/dist/lib/pages/UserWorkspacesPage/index.d.ts +8 -0
  184. package/dist/lib/pages/UserWorkspacesPage/index.d.ts.map +1 -0
  185. package/dist/lib/presentation/components/AccountMenu/index.d.ts +9 -0
  186. package/dist/lib/presentation/components/AccountMenu/index.d.ts.map +1 -0
  187. package/dist/lib/presentation/components/AccountMenu/index.js +42 -0
  188. package/dist/lib/presentation/components/AddToWorkspacesDialog/index.d.ts +19 -0
  189. package/dist/lib/presentation/components/AddToWorkspacesDialog/index.d.ts.map +1 -0
  190. package/dist/lib/presentation/components/AddToWorkspacesDialog/index.js +89 -0
  191. package/dist/lib/presentation/components/BackLink/index.d.ts +14 -0
  192. package/dist/lib/presentation/components/BackLink/index.d.ts.map +1 -0
  193. package/dist/lib/presentation/components/BackLink/index.js +12 -0
  194. package/dist/lib/presentation/components/InviteLinkDialog/index.d.ts +25 -0
  195. package/dist/lib/presentation/components/InviteLinkDialog/index.d.ts.map +1 -0
  196. package/dist/lib/presentation/components/InviteLinkDialog/index.js +77 -0
  197. package/dist/lib/presentation/components/InviteLinkPanel/index.d.ts +26 -0
  198. package/dist/lib/presentation/components/InviteLinkPanel/index.d.ts.map +1 -0
  199. package/dist/lib/presentation/components/InviteLinkPanel/index.js +59 -0
  200. package/dist/lib/presentation/components/InviteSent/index.d.ts +20 -0
  201. package/dist/lib/presentation/components/InviteSent/index.d.ts.map +1 -0
  202. package/dist/lib/presentation/components/InviteSent/index.js +60 -0
  203. package/dist/lib/presentation/components/MemberAvatar/index.d.ts +24 -0
  204. package/dist/lib/presentation/components/MemberAvatar/index.d.ts.map +1 -0
  205. package/dist/lib/presentation/components/MemberAvatar/index.js +14 -0
  206. package/dist/lib/presentation/components/MembersEmpty/index.d.ts +16 -0
  207. package/dist/lib/presentation/components/MembersEmpty/index.d.ts.map +1 -0
  208. package/dist/lib/presentation/components/MembersEmpty/index.js +42 -0
  209. package/dist/lib/presentation/components/MembersNoAccess/index.d.ts +7 -0
  210. package/dist/lib/presentation/components/MembersNoAccess/index.d.ts.map +1 -0
  211. package/dist/lib/presentation/components/MembersNoAccess/index.js +24 -0
  212. package/dist/lib/presentation/components/MembersPagination/index.d.ts +17 -0
  213. package/dist/lib/presentation/components/MembersPagination/index.d.ts.map +1 -0
  214. package/dist/lib/presentation/components/MembersPagination/index.js +45 -0
  215. package/dist/lib/presentation/components/MembersSkeleton/index.d.ts +32 -0
  216. package/dist/lib/presentation/components/MembersSkeleton/index.d.ts.map +1 -0
  217. package/dist/lib/presentation/components/MembersSkeleton/index.js +61 -0
  218. package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.d.ts +17 -0
  219. package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.d.ts.map +1 -0
  220. package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.js +36 -0
  221. package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.d.ts +16 -0
  222. package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.d.ts.map +1 -0
  223. package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.js +284 -0
  224. package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.d.ts +10 -0
  225. package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.d.ts.map +1 -0
  226. package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.js +49 -0
  227. package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.d.ts +10 -0
  228. package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.d.ts.map +1 -0
  229. package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.js +37 -0
  230. package/dist/lib/presentation/components/MembersTable/index.d.ts +12 -0
  231. package/dist/lib/presentation/components/MembersTable/index.d.ts.map +1 -0
  232. package/dist/lib/presentation/components/MembersTable/index.js +54 -0
  233. package/dist/lib/presentation/components/MembersTable/membersTableAnchor/index.d.ts +14 -0
  234. package/dist/lib/presentation/components/MembersTable/membersTableAnchor/index.d.ts.map +1 -0
  235. package/dist/lib/presentation/components/MembersToolbar/index.d.ts +15 -0
  236. package/dist/lib/presentation/components/MembersToolbar/index.d.ts.map +1 -0
  237. package/dist/lib/presentation/components/MembersToolbar/index.js +23 -0
  238. package/dist/lib/presentation/components/PasswordResetCard/index.d.ts +19 -0
  239. package/dist/lib/presentation/components/PasswordResetCard/index.d.ts.map +1 -0
  240. package/dist/lib/presentation/components/PasswordResetCard/index.js +109 -0
  241. package/dist/lib/presentation/components/PasswordResetLinkDialog/index.d.ts +27 -0
  242. package/dist/lib/presentation/components/PasswordResetLinkDialog/index.d.ts.map +1 -0
  243. package/dist/lib/presentation/components/PasswordResetLinkDialog/index.js +79 -0
  244. package/dist/lib/presentation/components/PasswordResetLinkPanel/index.d.ts +31 -0
  245. package/dist/lib/presentation/components/PasswordResetLinkPanel/index.d.ts.map +1 -0
  246. package/dist/lib/presentation/components/PasswordResetLinkPanel/index.js +64 -0
  247. package/dist/lib/presentation/components/RolePicker/index.d.ts +21 -0
  248. package/dist/lib/presentation/components/RolePicker/index.d.ts.map +1 -0
  249. package/dist/lib/presentation/components/RolePicker/index.js +51 -0
  250. package/dist/lib/presentation/components/SessionCard/index.d.ts +15 -0
  251. package/dist/lib/presentation/components/SessionCard/index.d.ts.map +1 -0
  252. package/dist/lib/presentation/components/SessionCard/index.js +43 -0
  253. package/dist/lib/presentation/components/ThemeSync/index.d.ts +21 -0
  254. package/dist/lib/presentation/components/ThemeSync/index.d.ts.map +1 -0
  255. package/dist/lib/presentation/components/ThemeSync/index.js +32 -0
  256. package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.d.ts +15 -0
  257. package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.d.ts.map +1 -0
  258. package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.js +52 -0
  259. package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.d.ts +10 -0
  260. package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.d.ts.map +1 -0
  261. package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.js +26 -0
  262. package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.d.ts +10 -0
  263. package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.d.ts.map +1 -0
  264. package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.js +39 -0
  265. package/dist/lib/presentation/components/UserDetailLayout/index.d.ts +13 -0
  266. package/dist/lib/presentation/components/UserDetailLayout/index.d.ts.map +1 -0
  267. package/dist/lib/presentation/components/UserDetailLayout/index.js +101 -0
  268. package/dist/lib/presentation/components/UserDetailRouter/index.d.ts +16 -0
  269. package/dist/lib/presentation/components/UserDetailRouter/index.d.ts.map +1 -0
  270. package/dist/lib/presentation/components/UserDetailRouter/index.js +33 -0
  271. package/dist/lib/presentation/components/WorkspaceMembershipCard/index.d.ts +15 -0
  272. package/dist/lib/presentation/components/WorkspaceMembershipCard/index.d.ts.map +1 -0
  273. package/dist/lib/presentation/components/WorkspaceMembershipCard/index.js +27 -0
  274. package/dist/lib/presentation/membersFilterFields/index.d.ts +10 -0
  275. package/dist/lib/presentation/membersFilterFields/index.d.ts.map +1 -0
  276. package/dist/lib/presentation/membersFilterFields/index.js +67 -0
  277. package/dist/lib/presentation/membersResultsAnchor/index.d.ts +17 -0
  278. package/dist/lib/presentation/membersResultsAnchor/index.d.ts.map +1 -0
  279. package/dist/lib/presentation/membersResultsAnchor/index.js +16 -0
  280. package/dist/lib/presentation/pages/InviteMemberPage/index.d.ts +7 -0
  281. package/dist/lib/presentation/pages/InviteMemberPage/index.d.ts.map +1 -0
  282. package/dist/lib/presentation/pages/InviteMemberPage/index.js +346 -0
  283. package/dist/lib/presentation/pages/MembersPage/index.d.ts +13 -0
  284. package/dist/lib/presentation/pages/MembersPage/index.d.ts.map +1 -0
  285. package/dist/lib/presentation/pages/MembersPage/index.js +140 -0
  286. package/dist/lib/presentation/pages/UserAccessPage/index.d.ts +18 -0
  287. package/dist/lib/presentation/pages/UserAccessPage/index.d.ts.map +1 -0
  288. package/dist/lib/presentation/pages/UserAccessPage/index.js +153 -0
  289. package/dist/lib/presentation/pages/UserActivityPage/index.d.ts +8 -0
  290. package/dist/lib/presentation/pages/UserActivityPage/index.d.ts.map +1 -0
  291. package/dist/lib/presentation/pages/UserActivityPage/index.js +228 -0
  292. package/dist/lib/presentation/pages/UserGeneralPage/index.d.ts +7 -0
  293. package/dist/lib/presentation/pages/UserGeneralPage/index.d.ts.map +1 -0
  294. package/dist/lib/presentation/pages/UserGeneralPage/index.js +72 -0
  295. package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.d.ts +11 -0
  296. package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.d.ts.map +1 -0
  297. package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.js +24 -0
  298. package/dist/lib/presentation/pages/UserPreferencesPage/index.d.ts +10 -0
  299. package/dist/lib/presentation/pages/UserPreferencesPage/index.d.ts.map +1 -0
  300. package/dist/lib/presentation/pages/UserPreferencesPage/index.js +148 -0
  301. package/dist/lib/presentation/pages/UserRolesPage/index.d.ts +8 -0
  302. package/dist/lib/presentation/pages/UserRolesPage/index.d.ts.map +1 -0
  303. package/dist/lib/presentation/pages/UserRolesPage/index.js +110 -0
  304. package/dist/lib/presentation/pages/UserSessionsPage/index.d.ts +7 -0
  305. package/dist/lib/presentation/pages/UserSessionsPage/index.d.ts.map +1 -0
  306. package/dist/lib/presentation/pages/UserSessionsPage/index.js +121 -0
  307. package/dist/lib/presentation/pages/UserWorkspacesPage/index.d.ts +8 -0
  308. package/dist/lib/presentation/pages/UserWorkspacesPage/index.d.ts.map +1 -0
  309. package/dist/lib/presentation/pages/UserWorkspacesPage/index.js +111 -0
  310. package/dist/lib/presentation/userDetailContext/index.d.ts +13 -0
  311. package/dist/lib/presentation/userDetailContext/index.d.ts.map +1 -0
  312. package/dist/lib/presentation/userDetailContext/index.js +5 -0
  313. package/dist/lib/presentation/usersPlugin/index.d.ts +27 -0
  314. package/dist/lib/presentation/usersPlugin/index.d.ts.map +1 -0
  315. package/dist/lib/presentation/usersPlugin/index.js +109 -0
  316. package/dist/lib/types/member/index.d.ts +63 -0
  317. package/dist/lib/types/member/index.d.ts.map +1 -0
  318. package/dist/lib/utils/membersFilterFields/index.d.ts +10 -0
  319. package/dist/lib/utils/membersFilterFields/index.d.ts.map +1 -0
  320. package/dist/lib/utils/membersKeys/index.d.ts +27 -0
  321. package/dist/lib/utils/membersKeys/index.d.ts.map +1 -0
  322. package/dist/lib/utils/toMember/index.d.ts +33 -0
  323. package/dist/lib/utils/toMember/index.d.ts.map +1 -0
  324. package/dist/lib/utils/userDetailContext/index.d.ts +13 -0
  325. package/dist/lib/utils/userDetailContext/index.d.ts.map +1 -0
  326. package/dist/lib/utils/usersPlugin/index.d.ts +27 -0
  327. package/dist/lib/utils/usersPlugin/index.d.ts.map +1 -0
  328. package/package.json +50 -0
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { defineMessages, useIntl } from 'react-intl';
3
+ import { Card, CardContent } from '@orthacms/design-system';
4
+ import { MemberAvatar } from '../../MemberAvatar';
5
+ import { MemberRoleChip } from '../../MembersTable/MemberRoleChip';
6
+ import { MemberStatusBadge } from '../../MembersTable/MemberStatusBadge';
7
+ /** Intl descriptors for {@link UserHero}, co-located with the component. */
8
+ const messages = defineMessages({
9
+ memberSince: {
10
+ id: 'users.detail.hero.memberSince',
11
+ defaultMessage: 'Member since {date}'
12
+ }
13
+ });
14
+ /**
15
+ * The detail page's identity card: a large initials avatar, the member's name
16
+ * and email, their status and role badges, and the join date. Read-only — every
17
+ * edit lives in a tab below.
18
+ */
19
+ export function UserHero({ member }) {
20
+ const intl = useIntl();
21
+ return (_jsx(Card, { children: _jsxs(CardContent, { className: "flex items-center gap-4 pt-6", children: [_jsx(MemberAvatar, { initials: member.initials, color: member.color, className: "size-16 shrink-0 text-lg" }), _jsxs("div", { className: "min-w-0 space-y-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("h1", { className: "truncate text-xl font-semibold", children: member.name }), _jsx(MemberStatusBadge, { status: member.status }), _jsx(MemberRoleChip, { role: member.role, roleName: member.roleName })] }), _jsx("p", { className: "truncate text-sm text-muted-foreground", children: member.email }), _jsx("p", { className: "text-xs text-muted-foreground", children: intl.formatMessage(messages.memberSince, {
22
+ date: intl.formatDate(member.joinedAt, {
23
+ dateStyle: 'long'
24
+ })
25
+ }) })] })] }) }));
26
+ }
@@ -0,0 +1,10 @@
1
+ import type { Member } from '../../../../domain/types/member';
2
+ /**
3
+ * A three-tile summary above the detail tabs: when the member joined, how many
4
+ * workspaces they belong to, and their global role. Sourced entirely from the
5
+ * shared detail record — no extra requests.
6
+ */
7
+ export declare function UserStatsStrip({ member }: {
8
+ member: Member;
9
+ }): import("react").JSX.Element;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAgD9D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,+BA2B5D"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { defineMessages, useIntl } from 'react-intl';
3
+ import { Building2, CalendarDays, ShieldCheck } from 'lucide-react';
4
+ import { Card, CardContent } from '@orthacms/design-system';
5
+ import { MemberRoleChip } from '../../MembersTable/MemberRoleChip';
6
+ /** Intl descriptors for {@link UserStatsStrip}, co-located with the component. */
7
+ const messages = defineMessages({
8
+ memberSince: {
9
+ id: 'users.detail.stats.memberSince',
10
+ defaultMessage: 'Member since'
11
+ },
12
+ workspaces: {
13
+ id: 'users.detail.stats.workspaces',
14
+ defaultMessage: 'Workspaces'
15
+ },
16
+ workspaceCount: {
17
+ id: 'users.detail.stats.workspaceCount',
18
+ defaultMessage: '{count, plural, one {# workspace} other {# workspaces}}'
19
+ },
20
+ role: {
21
+ id: 'users.detail.stats.role',
22
+ defaultMessage: 'Role'
23
+ }
24
+ });
25
+ /** One stat tile: an icon, a label, and its value. */
26
+ function StatTile({ icon: Icon, label, children }) {
27
+ return (_jsx(Card, { children: _jsxs(CardContent, { className: "flex items-center gap-3 pt-6", children: [_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground", children: _jsx(Icon, { "aria-hidden": true, className: "size-4" }) }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: label }), _jsx("div", { className: "text-sm font-medium", children: children })] })] }) }));
28
+ }
29
+ /**
30
+ * A three-tile summary above the detail tabs: when the member joined, how many
31
+ * workspaces they belong to, and their global role. Sourced entirely from the
32
+ * shared detail record — no extra requests.
33
+ */
34
+ export function UserStatsStrip({ member }) {
35
+ const intl = useIntl();
36
+ return (_jsxs("div", { className: "grid gap-4 sm:grid-cols-3", children: [_jsx(StatTile, { icon: CalendarDays, label: intl.formatMessage(messages.memberSince), children: intl.formatDate(member.joinedAt, { dateStyle: 'medium' }) }), _jsx(StatTile, { icon: Building2, label: intl.formatMessage(messages.workspaces), children: intl.formatMessage(messages.workspaceCount, {
37
+ count: member.workspaces.length
38
+ }) }), _jsx(StatTile, { icon: ShieldCheck, label: intl.formatMessage(messages.role), children: _jsx(MemberRoleChip, { role: member.role, roleName: member.roleName }) })] }));
39
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The user detail page shell, mounted at `/users/:id/*`. Fetches the member
3
+ * once and shares it with every tab through the Outlet context, so a tab read
4
+ * is free. Renders the back link, identity hero, stats strip, and the underline
5
+ * tab bar above the active tab. Loading shows skeletons; a 404 shows a
6
+ * dedicated "no longer exists" state; any other error is retryable by the
7
+ * tabs' own queries falling back here.
8
+ *
9
+ * Gated on `users:read` (the same permission the roster needs): without it the
10
+ * page shows the shared no-access state and fetches nothing.
11
+ */
12
+ export declare function UserDetailLayout(): import("react").JSX.Element;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/UserDetailLayout/index.tsx"],"names":[],"mappings":"AA4CA;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,gCA4I/B"}
@@ -0,0 +1,101 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Outlet, useParams } from 'react-router-dom';
3
+ import { defineMessages, useIntl } from 'react-intl';
4
+ import { Alert, AlertDescription, Container, Skeleton } from '@orthacms/design-system';
5
+ import { ApiError, HTTP_STATUS, useDocumentTitle } from '@orthacms/utils-admin';
6
+ import { useHasPermission } from '@orthacms/identity-admin';
7
+ import { PageTopBar } from '@orthacms/shell-admin';
8
+ import { Users } from 'lucide-react';
9
+ import { useUserDetail } from '../../../application/useUserDetail';
10
+ import { BackLink } from '../BackLink';
11
+ import { MembersNoAccess } from '../MembersNoAccess';
12
+ import { UserHero } from './UserHero';
13
+ import { UserDetailTabs } from './UserDetailTabs';
14
+ import { UserStatsStrip } from './UserStatsStrip';
15
+ /** Intl descriptors for {@link UserDetailLayout}, co-located with the component. */
16
+ const messages = defineMessages({
17
+ documentTitle: {
18
+ id: 'users.detail.documentTitle',
19
+ defaultMessage: 'Member'
20
+ },
21
+ back: {
22
+ id: 'users.detail.back',
23
+ defaultMessage: 'Back to members'
24
+ },
25
+ crumbMembers: {
26
+ id: 'users.detail.crumbMembers',
27
+ defaultMessage: 'Members'
28
+ },
29
+ notFound: {
30
+ id: 'users.detail.notFound',
31
+ defaultMessage: 'This member no longer exists.'
32
+ },
33
+ error: {
34
+ id: 'users.detail.error',
35
+ defaultMessage: 'Couldn’t load this member. Please try again.'
36
+ }
37
+ });
38
+ /**
39
+ * The user detail page shell, mounted at `/users/:id/*`. Fetches the member
40
+ * once and shares it with every tab through the Outlet context, so a tab read
41
+ * is free. Renders the back link, identity hero, stats strip, and the underline
42
+ * tab bar above the active tab. Loading shows skeletons; a 404 shows a
43
+ * dedicated "no longer exists" state; any other error is retryable by the
44
+ * tabs' own queries falling back here.
45
+ *
46
+ * Gated on `users:read` (the same permission the roster needs): without it the
47
+ * page shows the shared no-access state and fetches nothing.
48
+ */
49
+ export function UserDetailLayout() {
50
+ const intl = useIntl();
51
+ const { id = '' } = useParams();
52
+ const canRead = useHasPermission('users:read');
53
+ const { data: member, isPending, isError, error } = useUserDetail(id, canRead);
54
+ // Titled here rather than in each of the seven tabs: the page is *this
55
+ // member*, and their name is the thing that tells one open tab from another
56
+ // (WCAG 2.4.2, `ORT-140`). Falls back to a generic label until the read
57
+ // lands, so the title never claims a name the page is not showing.
58
+ useDocumentTitle(member?.name ?? intl.formatMessage(messages.documentTitle));
59
+ if (!canRead) {
60
+ return (_jsxs(_Fragment, { children: [_jsx(PageTopBar, { icon: Users, iconClassName: "bg-success-soft text-success-soft-foreground", crumbs: [
61
+ {
62
+ key: 'members',
63
+ label: intl.formatMessage(messages.crumbMembers),
64
+ to: '/users'
65
+ }
66
+ ] }), _jsx(Container, { children: _jsx(MembersNoAccess, {}) })] }));
67
+ }
68
+ const back = (_jsx(BackLink, { to: "/users", label: intl.formatMessage(messages.back) }));
69
+ if (isPending) {
70
+ return (_jsxs(_Fragment, { children: [_jsx(PageTopBar, { icon: Users, iconClassName: "bg-success-soft text-success-soft-foreground", crumbs: [
71
+ {
72
+ key: 'members',
73
+ label: intl.formatMessage(messages.crumbMembers),
74
+ to: '/users'
75
+ }
76
+ ] }), _jsxs(Container, { className: "space-y-6", children: [back, _jsx(Skeleton, { className: "h-24 w-full rounded-xl" }), _jsx(Skeleton, { className: "h-20 w-full rounded-xl" }), _jsx(Skeleton, { className: "h-64 w-full rounded-xl" })] })] }));
77
+ }
78
+ if (isError) {
79
+ const status = error instanceof ApiError ? error.status : null;
80
+ const message = status === HTTP_STATUS.NOT_FOUND
81
+ ? messages.notFound
82
+ : messages.error;
83
+ return (_jsxs(_Fragment, { children: [_jsx(PageTopBar, { icon: Users, iconClassName: "bg-success-soft text-success-soft-foreground", crumbs: [
84
+ {
85
+ key: 'members',
86
+ label: intl.formatMessage(messages.crumbMembers),
87
+ to: '/users'
88
+ }
89
+ ] }), _jsxs(Container, { className: "space-y-6", children: [back, _jsx(Alert, { variant: "destructive", role: "alert", children: _jsx(AlertDescription, { children: intl.formatMessage(message) }) })] })] }));
90
+ }
91
+ const context = { member };
92
+ const crumbs = [
93
+ {
94
+ key: 'members',
95
+ label: intl.formatMessage(messages.crumbMembers),
96
+ to: '/users'
97
+ },
98
+ { key: member.id, label: member.name }
99
+ ];
100
+ return (_jsxs(_Fragment, { children: [_jsx(PageTopBar, { icon: Users, iconClassName: "bg-success-soft text-success-soft-foreground", crumbs: crumbs }), _jsxs(Container, { className: "space-y-6", children: [back, _jsx(UserHero, { member: member }), _jsx(UserStatsStrip, { member: member }), _jsxs("div", { className: "flex flex-col gap-6", children: [_jsx(UserDetailTabs, { member: member }), _jsx("div", { className: "min-w-0", children: _jsx(Outlet, { context: context }) }, member.id)] })] })] }));
101
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The nested router for one member, mounted by the plugin at `/users/:id/*`.
3
+ * Mirrors `IdentityRouter`: a single element owning its own `<Routes>`, with
4
+ * the shared layout wrapping the tab pages and providing the member via Outlet
5
+ * context.
6
+ *
7
+ * The Audit (Sessions, Activity) and Access tabs are permission-gated at the
8
+ * route level — without the permission the route redirects to General, so a
9
+ * deep link or stale bookmark can't reach a tab the side rail hides. The
10
+ * Preferences tab is **self-only** — it is the current user's own app
11
+ * preferences (theme), so it is gated on the viewed profile being the caller's
12
+ * own, and redirects to General on anyone else's profile. The index redirects
13
+ * to General as the default tab.
14
+ */
15
+ export declare function UserDetailRouter(): import("react").JSX.Element;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/UserDetailRouter/index.tsx"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,gCA2D/B"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Navigate, Route, Routes, useParams } from 'react-router-dom';
3
+ import { AuthStatus, useAuth, useHasPermission } from '@orthacms/identity-admin';
4
+ import { UserDetailLayout } from '../UserDetailLayout';
5
+ import { UserGeneralPage } from '../../pages/UserGeneralPage';
6
+ import { UserRolesPage } from '../../pages/UserRolesPage';
7
+ import { UserWorkspacesPage } from '../../pages/UserWorkspacesPage';
8
+ import { UserSessionsPage } from '../../pages/UserSessionsPage';
9
+ import { UserActivityPage } from '../../pages/UserActivityPage';
10
+ import { UserAccessPage } from '../../pages/UserAccessPage';
11
+ import { UserPreferencesPage } from '../../pages/UserPreferencesPage';
12
+ /**
13
+ * The nested router for one member, mounted by the plugin at `/users/:id/*`.
14
+ * Mirrors `IdentityRouter`: a single element owning its own `<Routes>`, with
15
+ * the shared layout wrapping the tab pages and providing the member via Outlet
16
+ * context.
17
+ *
18
+ * The Audit (Sessions, Activity) and Access tabs are permission-gated at the
19
+ * route level — without the permission the route redirects to General, so a
20
+ * deep link or stale bookmark can't reach a tab the side rail hides. The
21
+ * Preferences tab is **self-only** — it is the current user's own app
22
+ * preferences (theme), so it is gated on the viewed profile being the caller's
23
+ * own, and redirects to General on anyone else's profile. The index redirects
24
+ * to General as the default tab.
25
+ */
26
+ export function UserDetailRouter() {
27
+ const canManage = useHasPermission('users:update');
28
+ const canReadActivity = useHasPermission('activity:read');
29
+ const { id } = useParams();
30
+ const auth = useAuth();
31
+ const isSelf = auth.status === AuthStatus.Authenticated && auth.user.id === id;
32
+ return (_jsx(Routes, { children: _jsxs(Route, { element: _jsx(UserDetailLayout, {}), children: [_jsx(Route, { index: true, element: _jsx(Navigate, { to: "general", replace: true }) }), _jsx(Route, { path: "general", element: _jsx(UserGeneralPage, {}) }), _jsx(Route, { path: "roles", element: _jsx(UserRolesPage, {}) }), _jsx(Route, { path: "workspaces", element: _jsx(UserWorkspacesPage, {}) }), _jsx(Route, { path: "sessions", element: canManage ? (_jsx(UserSessionsPage, {})) : (_jsx(Navigate, { to: "../general", replace: true })) }), _jsx(Route, { path: "activity", element: canReadActivity ? (_jsx(UserActivityPage, {})) : (_jsx(Navigate, { to: "../general", replace: true })) }), _jsx(Route, { path: "access", element: canManage ? (_jsx(UserAccessPage, {})) : (_jsx(Navigate, { to: "../general", replace: true })) }), _jsx(Route, { path: "preferences", element: isSelf ? (_jsx(UserPreferencesPage, {})) : (_jsx(Navigate, { to: "../general", replace: true })) }), _jsx(Route, { path: "*", element: _jsx(Navigate, { to: "general", replace: true }) })] }) }));
33
+ }
@@ -0,0 +1,15 @@
1
+ import type { MemberWorkspace } from '../../../domain/types/member';
2
+ /**
3
+ * One workspace the member belongs to: its tinted mark, name, and (when the
4
+ * viewer can manage members) a Remove action. Removal is confirmed by the
5
+ * parent page, so this card just signals intent.
6
+ */
7
+ export declare function WorkspaceMembershipCard({ workspace, onRemove, removing }: {
8
+ /** The workspace membership to render. */
9
+ workspace: MemberWorkspace;
10
+ /** Remove handler; omit to hide the action (read-only). */
11
+ onRemove?: (workspace: MemberWorkspace) => void;
12
+ /** Whether a removal for this workspace is in flight. */
13
+ removing?: boolean;
14
+ }): import("react").JSX.Element;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/WorkspaceMembershipCard/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAcpE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,QAAgB,EACnB,EAAE;IACC,0CAA0C;IAC1C,SAAS,EAAE,eAAe,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,+BA2CA"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { defineMessages, useIntl } from 'react-intl';
3
+ import { Trash2 } from 'lucide-react';
4
+ import { Button, Card, CardContent, Spinner } from '@orthacms/design-system';
5
+ import { MemberAvatar } from '../MemberAvatar';
6
+ /** Intl descriptors for {@link WorkspaceMembershipCard}. */
7
+ const messages = defineMessages({
8
+ remove: {
9
+ id: 'users.workspaces.remove',
10
+ defaultMessage: 'Remove'
11
+ },
12
+ removeLabel: {
13
+ id: 'users.workspaces.removeLabel',
14
+ defaultMessage: 'Remove from {name}'
15
+ }
16
+ });
17
+ /**
18
+ * One workspace the member belongs to: its tinted mark, name, and (when the
19
+ * viewer can manage members) a Remove action. Removal is confirmed by the
20
+ * parent page, so this card just signals intent.
21
+ */
22
+ export function WorkspaceMembershipCard({ workspace, onRemove, removing = false }) {
23
+ const intl = useIntl();
24
+ return (_jsx(Card, { children: _jsxs(CardContent, { className: "flex items-center gap-3 pt-6", children: [_jsx(MemberAvatar, { initials: workspace.initials, color: workspace.color, className: "size-9 shrink-0 text-xs" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: workspace.name }), workspace.description ? (_jsx("p", { className: "line-clamp-3 text-xs text-muted-foreground", children: workspace.description })) : null] }), onRemove ? (_jsxs(Button, { variant: "ghost", size: "sm", className: "text-muted-foreground", disabled: removing, "aria-label": intl.formatMessage(messages.removeLabel, {
25
+ name: workspace.name
26
+ }), onClick: () => onRemove(workspace), children: [removing ? (_jsx(Spinner, {})) : (_jsx(Trash2, { "aria-hidden": true, className: "size-4" })), intl.formatMessage(messages.remove)] })) : null] }) }));
27
+ }
@@ -0,0 +1,10 @@
1
+ import { type FilterField } from '@orthacms/query-builder-admin';
2
+ /**
3
+ * The members filter surface the query builder offers. A static mirror of the
4
+ * server's `USERS_FILTER_SCHEMA` — each `id` matches a whitelisted field (the
5
+ * `role.key` dotted path resolves to the BE's `role` relation), so a rule built
6
+ * here always validates server-side. `status` / `role` render as dropdowns; the
7
+ * BE still accepts any role key string, the UI just offers the system roles.
8
+ */
9
+ export declare const MEMBERS_FILTER_FIELDS: readonly FilterField[];
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/presentation/membersFilterFields/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAoC7E;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,WAAW,EAwBvD,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { defineMessages } from 'react-intl';
2
+ import { FIELD_TYPE } from '@orthacms/query-builder-admin';
3
+ /**
4
+ * Field + enum-option labels for the members query builder, co-located per the
5
+ * admin i18n convention. Display only — the `id`s and enum `value`s travel on
6
+ * the wire.
7
+ */
8
+ const messages = defineMessages({
9
+ email: { id: 'users.filter.email', defaultMessage: 'Email' },
10
+ name: { id: 'users.filter.name', defaultMessage: 'Name' },
11
+ status: { id: 'users.filter.status', defaultMessage: 'Status' },
12
+ role: { id: 'users.filter.role', defaultMessage: 'Role' },
13
+ createdAt: { id: 'users.filter.createdAt', defaultMessage: 'Joined' },
14
+ statusPending: {
15
+ id: 'users.filter.status.pending',
16
+ defaultMessage: 'Pending'
17
+ },
18
+ statusActive: {
19
+ id: 'users.filter.status.active',
20
+ defaultMessage: 'Active'
21
+ },
22
+ statusDisabled: {
23
+ id: 'users.filter.status.disabled',
24
+ defaultMessage: 'Disabled'
25
+ },
26
+ roleAdmin: {
27
+ id: 'users.filter.role.admin',
28
+ defaultMessage: 'Administrator'
29
+ },
30
+ roleContributor: {
31
+ id: 'users.filter.role.contributor',
32
+ defaultMessage: 'Contributor'
33
+ },
34
+ roleViewer: { id: 'users.filter.role.viewer', defaultMessage: 'Viewer' }
35
+ });
36
+ /**
37
+ * The members filter surface the query builder offers. A static mirror of the
38
+ * server's `USERS_FILTER_SCHEMA` — each `id` matches a whitelisted field (the
39
+ * `role.key` dotted path resolves to the BE's `role` relation), so a rule built
40
+ * here always validates server-side. `status` / `role` render as dropdowns; the
41
+ * BE still accepts any role key string, the UI just offers the system roles.
42
+ */
43
+ export const MEMBERS_FILTER_FIELDS = [
44
+ { id: 'email', label: messages.email, type: FIELD_TYPE.String },
45
+ { id: 'name', label: messages.name, type: FIELD_TYPE.String },
46
+ {
47
+ id: 'status',
48
+ label: messages.status,
49
+ type: FIELD_TYPE.Enum,
50
+ enumValues: [
51
+ { value: 'pending', label: messages.statusPending },
52
+ { value: 'active', label: messages.statusActive },
53
+ { value: 'disabled', label: messages.statusDisabled }
54
+ ]
55
+ },
56
+ {
57
+ id: 'role.key',
58
+ label: messages.role,
59
+ type: FIELD_TYPE.Enum,
60
+ enumValues: [
61
+ { value: 'admin', label: messages.roleAdmin },
62
+ { value: 'contributor', label: messages.roleContributor },
63
+ { value: 'viewer', label: messages.roleViewer }
64
+ ]
65
+ },
66
+ { id: 'createdAt', label: messages.createdAt, type: FIELD_TYPE.Date }
67
+ ];
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The id of the roster's focus anchor — the wrapper around the results region,
3
+ * which carries `tabIndex={-1}` so it can receive focus programmatically without
4
+ * becoming a tab stop.
5
+ *
6
+ * It exists because a row-removing mutation unmounts the control that opened the
7
+ * overlay (the row's kebab), so Radix's focus restoration has nowhere to return
8
+ * to and focus falls to `<body>` — restarting a keyboard user at the top of the
9
+ * document after every action (WCAG 2.4.3 Focus Order).
10
+ *
11
+ * It wraps **all four** result states (skeleton / error / empty / table), not the
12
+ * table alone. Revoking the last row on screen swaps the table for the empty
13
+ * state, so an anchor that lived on the table would unmount at exactly the moment
14
+ * it was needed — which is the one case where focus was still being dropped.
15
+ */
16
+ export declare const MEMBERS_RESULTS_ANCHOR_ID = "members-results";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/presentation/membersResultsAnchor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,yBAAyB,oBAAoB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The id of the roster's focus anchor — the wrapper around the results region,
3
+ * which carries `tabIndex={-1}` so it can receive focus programmatically without
4
+ * becoming a tab stop.
5
+ *
6
+ * It exists because a row-removing mutation unmounts the control that opened the
7
+ * overlay (the row's kebab), so Radix's focus restoration has nowhere to return
8
+ * to and focus falls to `<body>` — restarting a keyboard user at the top of the
9
+ * document after every action (WCAG 2.4.3 Focus Order).
10
+ *
11
+ * It wraps **all four** result states (skeleton / error / empty / table), not the
12
+ * table alone. Revoking the last row on screen swaps the table for the empty
13
+ * state, so an anchor that lived on the table would unmount at exactly the moment
14
+ * it was needed — which is the one case where focus was still being dropped.
15
+ */
16
+ export const MEMBERS_RESULTS_ANCHOR_ID = 'members-results';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Full-page, three-step invite wizard (Details → Role → Workspaces) at
3
+ * `/users/invite`, on the design-system wizard chrome. Gated on `users:create`
4
+ * — the server enforces the same — so a user without it is redirected.
5
+ */
6
+ export declare function InviteMemberPage(): import("react").JSX.Element;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/pages/InviteMemberPage/index.tsx"],"names":[],"mappings":"AAkQA;;;;GAIG;AACH,wBAAgB,gBAAgB,gCA6iB/B"}