@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ortha CMS contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # @orthacms/users-admin
2
+
3
+ Part of [Ortha CMS](https://github.com/ortha-source/ortha-cms).
4
+
5
+ ```sh
6
+ npm install @orthacms/users-admin
7
+ ```
@@ -0,0 +1,6 @@
1
+ export { UsersPlugin } from './lib/presentation/usersPlugin';
2
+ export type { UsersAdminPlugin } from './lib/presentation/usersPlugin';
3
+ export { useMembers } from './lib/application/useMembers';
4
+ export { membersKeys } from './lib/infrastructure/membersKeys';
5
+ export type { Member, MemberList, MemberRole, MemberStatus, MemberWorkspace } from './lib/domain/types/member';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,YAAY,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,YAAY,EACZ,eAAe,EAClB,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { UsersPlugin } from './lib/presentation/usersPlugin';
2
+ export { useMembers } from './lib/application/useMembers';
3
+ export { membersKeys } from './lib/infrastructure/membersKeys';
@@ -0,0 +1,16 @@
1
+ import { type ApiError } from '@ortha-cms/utils-admin';
2
+ /** Identifies the membership to create: which member, which workspace. */
3
+ export type AddWorkspaceMemberInput = {
4
+ /** The member being added. */
5
+ userId: string;
6
+ /** The workspace to add them to. */
7
+ workspaceId: string;
8
+ };
9
+ /**
10
+ * Adds a member to a workspace from the Workspaces tab. The endpoint is
11
+ * idempotent (re-adding is a no-op). Invalidates the member's detail (its
12
+ * `workspaces` list) and the members list (its Workspaces column) on success.
13
+ * Errors normalize to {@link ApiError}.
14
+ */
15
+ export declare function useAddWorkspaceMember(): import("@tanstack/react-query").UseMutationResult<void, ApiError, AddWorkspaceMemberInput, unknown>;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useAddWorkspaceMember/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAG9E,0EAA0E;AAC1E,MAAM,MAAM,uBAAuB,GAAG;IAClC,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF;;;;;GAKG;AACH,wBAAgB,qBAAqB,wGAcpC"}
@@ -0,0 +1,17 @@
1
+ import type { Member, MemberRole } from '../../types/member';
2
+ /** The shape the invite form submits. */
3
+ export type InviteMemberInput = {
4
+ email: string;
5
+ role: MemberRole;
6
+ name?: string;
7
+ /** Workspaces to grant the new member access to (optional). */
8
+ workspaceIds?: string[];
9
+ };
10
+ /**
11
+ * Invites a person by email. Errors are normalized to `ApiError` so the dialog
12
+ * can branch on `HTTP_STATUS.CONFLICT` (email already taken); every page of the
13
+ * members cache is refreshed on success — the new "Invited" row may land on any
14
+ * page.
15
+ */
16
+ export declare function useInviteMember(): import("@tanstack/react-query").UseMutationResult<Member, import("@ortha-cms/utils-admin").ApiError, InviteMemberInput, unknown>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useInviteMember/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAI7D,yCAAyC;AACzC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,eAAe,qIAE9B"}
@@ -0,0 +1,15 @@
1
+ import type { MemberList } from '../../types/member';
2
+ import { type MembersListParams } from '../../utils/membersKeys';
3
+ /**
4
+ * Page size the server applies when none is requested. Mirrors the server's
5
+ * `DEFAULT_PAGE_SIZE`; used only as a fallback for the page-count math before
6
+ * the first response lands.
7
+ */
8
+ export declare const DEFAULT_PAGE_SIZE = 10;
9
+ /**
10
+ * Fetches one page of members. `keepPreviousData` holds the current rows on
11
+ * screen while a new page or search resolves, so the table doesn't flash
12
+ * empty between pages. Disabled until the caller confirms `users:read`.
13
+ */
14
+ export declare function useMembers(params: MembersListParams, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<MemberList>, Error>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useMembers/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG9E;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAuBpC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,UAAO,8EAOnE"}
@@ -0,0 +1,13 @@
1
+ import { type ApiError } from '@ortha-cms/utils-admin';
2
+ /**
3
+ * Shared shell for the member mutations. Every member mutation normalizes its
4
+ * transport error to {@link ApiError} (so dialogs can branch on
5
+ * `HTTP_STATUS.CONFLICT`) and, by default, invalidates the whole members cache
6
+ * on success (an added/changed/removed row may land on any page). The one
7
+ * exception is "resend invite", which changes no list-visible field — it opts
8
+ * out with `invalidate: false`. Each hook is then just its request function.
9
+ */
10
+ export declare function useMembersMutation<TInput, TResult>(mutationFn: (input: TInput) => Promise<TResult>, { invalidate }?: {
11
+ invalidate?: boolean;
12
+ }): import("@tanstack/react-query").UseMutationResult<TResult, ApiError, TInput, unknown>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useMembersMutation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGnE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAC9C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC/C,EAAE,UAAiB,EAAE,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,yFAevD"}
@@ -0,0 +1,15 @@
1
+ import { type ApiError } from '@ortha-cms/utils-admin';
2
+ /** Identifies the membership to remove: which member, which workspace. */
3
+ export type RemoveWorkspaceMemberInput = {
4
+ /** The member being removed. */
5
+ userId: string;
6
+ /** The workspace to remove them from. */
7
+ workspaceId: string;
8
+ };
9
+ /**
10
+ * Removes a member from a workspace from the Workspaces tab. Invalidates the
11
+ * member's detail (its `workspaces` list) and the members list (its Workspaces
12
+ * column) on success. Errors normalize to {@link ApiError}.
13
+ */
14
+ export declare function useRemoveWorkspaceMember(): import("@tanstack/react-query").UseMutationResult<void, ApiError, RemoveWorkspaceMemberInput, unknown>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useRemoveWorkspaceMember/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAG9E,0EAA0E;AAC1E,MAAM,MAAM,0BAA0B,GAAG;IACrC,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF;;;;GAIG;AACH,wBAAgB,wBAAwB,2GAcvC"}
@@ -0,0 +1,8 @@
1
+ import type { Member } from '../../types/member';
2
+ /**
3
+ * Re-sends a pending member's invite (the server rotates the token,
4
+ * invalidating the previous link). No cache invalidation — the row itself is
5
+ * unchanged. Errors normalize to `ApiError`.
6
+ */
7
+ export declare function useResendInvite(): import("@tanstack/react-query").UseMutationResult<Member, import("@ortha-cms/utils-admin").ApiError, string, unknown>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useResendInvite/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAYjD;;;;GAIG;AACH,wBAAgB,eAAe,0HAI9B"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Revokes a pending invite — the row disappears from the list (the server
3
+ * deletes the placeholder account). Invalidates the members cache on
4
+ * success. Errors normalize to `ApiError`.
5
+ */
6
+ export declare function useRevokeInvite(): import("@tanstack/react-query").UseMutationResult<void, import("@ortha-cms/utils-admin").ApiError, string, unknown>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useRevokeInvite/index.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,eAAe,wHAE9B"}
@@ -0,0 +1,15 @@
1
+ import { type ApiError } from '@ortha-cms/utils-admin';
2
+ /** Identifies the session to revoke: whose, and which. */
3
+ export type RevokeSessionInput = {
4
+ /** The member who owns the session. */
5
+ userId: string;
6
+ /** The session row id to revoke. */
7
+ sessionId: string;
8
+ };
9
+ /**
10
+ * Revokes a member's session from the Sessions tab. Invalidates that member's
11
+ * sessions query on success so the revoked row drops off. Errors normalize to
12
+ * {@link ApiError}.
13
+ */
14
+ export declare function useRevokeSession(): import("@tanstack/react-query").UseMutationResult<void, ApiError, RevokeSessionInput, unknown>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useRevokeSession/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAG9E,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAAG;IAC7B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAUF;;;;GAIG;AACH,wBAAgB,gBAAgB,mGAa/B"}
@@ -0,0 +1,15 @@
1
+ import type { Member } from '../../types/member';
2
+ /** Input for {@link useSetMemberStatus}: who, and which way to flip. */
3
+ export type SetMemberStatusInput = {
4
+ /** The member to update. */
5
+ id: string;
6
+ /** `true` disables the account, `false` re-enables it. */
7
+ disabled: boolean;
8
+ };
9
+ /**
10
+ * Disables or re-enables a member's account from the row menu. One hook for
11
+ * the pair — the menu renders exactly one of the two actions per row, and
12
+ * both invalidate the same cache. Errors normalize to `ApiError`.
13
+ */
14
+ export declare function useSetMemberStatus(): import("@tanstack/react-query").UseMutationResult<Member, import("@ortha-cms/utils-admin").ApiError, SetMemberStatusInput, unknown>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useSetMemberStatus/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD,wEAAwE;AACxE,MAAM,MAAM,oBAAoB,GAAG;IAC/B,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC;AAkBF;;;;GAIG;AACH,wBAAgB,kBAAkB,wIAIjC"}
@@ -0,0 +1,15 @@
1
+ import type { Member, MemberRole } from '../../types/member';
2
+ /** A partial member edit; omitted fields are left unchanged. */
3
+ export type UpdateMemberInput = {
4
+ id: string;
5
+ name?: string;
6
+ role?: MemberRole;
7
+ };
8
+ /**
9
+ * Edits a member's name and/or role (the inline role select and the Edit
10
+ * dialog both submit through here). Errors normalize to `ApiError` —
11
+ * `HTTP_STATUS.CONFLICT` means the last-admin guardrail (or the self-role
12
+ * guard) rejected the change. Invalidates the members cache on success.
13
+ */
14
+ export declare function useUpdateMember(): import("@tanstack/react-query").UseMutationResult<Member, import("@ortha-cms/utils-admin").ApiError, UpdateMemberInput, unknown>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useUpdateMember/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAI7D,gEAAgE;AAChE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAYF;;;;;GAKG;AACH,wBAAgB,eAAe,qIAE9B"}
@@ -0,0 +1,9 @@
1
+ import type { Member } from '../../types/member';
2
+ /**
3
+ * Fetches a single member for the user detail page. The result is shared with
4
+ * every tab via the route's Outlet context, so the tabs never re-fetch. A 404
5
+ * (unknown/deleted member) surfaces as the query's error so the layout can show
6
+ * a not-found state. Disabled until the caller confirms `users:read`.
7
+ */
8
+ export declare function useUserDetail(id: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<Member>, Error>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useUserDetail/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAkBjD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAO,0EAMvD"}
@@ -0,0 +1,25 @@
1
+ /** A live session as the detail page's Sessions tab renders it. */
2
+ export type UserSession = {
3
+ /** Revocation handle (the session row id). */
4
+ id: string;
5
+ /** Originating `User-Agent`, or `null` if it was never captured. */
6
+ userAgent: string | null;
7
+ /** Originating IP, or `null` if it was never captured. */
8
+ ipAddress: string | null;
9
+ /** When the session was opened. */
10
+ createdAt: Date;
11
+ /** Last authenticated request seen on this session. */
12
+ lastSeenAt: Date;
13
+ /** Absolute expiry. */
14
+ expiresAt: Date;
15
+ /** Whether this is the viewer's own session (never revocable from here). */
16
+ current: boolean;
17
+ };
18
+ /**
19
+ * Fetches the live sessions for a member (the Sessions tab). `staleTime: 0` so
20
+ * a session that has since expired or been revoked elsewhere drops off on the
21
+ * next mount/refocus rather than lingering. Gated on `users:update` (the tab
22
+ * is only shown to admins who can act on what they see).
23
+ */
24
+ export declare function useUserSessions(id: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<UserSession[]>, Error>;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useUserSessions/index.ts"],"names":[],"mappings":"AAIA,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG;IACtB,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mCAAmC;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,uDAAuD;IACvD,UAAU,EAAE,IAAI,CAAC;IACjB,uBAAuB;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAkCF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAO,iFAOzD"}
@@ -0,0 +1,18 @@
1
+ import type { AvatarColor } from '@ortha-cms/design-system';
2
+ /** A workspace as the invite wizard's assignment step renders it. */
3
+ export type WorkspaceOption = {
4
+ id: string;
5
+ name: string;
6
+ description: string | null;
7
+ initials: string;
8
+ color: AvatarColor;
9
+ };
10
+ /** Query key for the workspace options list. */
11
+ export declare const workspaceOptionsKey: readonly ["workspaces", "options"];
12
+ /**
13
+ * Lists every workspace (via the shared `GET /api/workspaces`) for the invite
14
+ * wizard's "assign workspaces" step. `enabled` defers the fetch until the step
15
+ * is reached.
16
+ */
17
+ export declare function useWorkspaceOptions(enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<WorkspaceOption[]>, Error>;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useWorkspaceOptions/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,qEAAqE;AACrE,MAAM,MAAM,eAAe,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;CACtB,CAAC;AAUF,gDAAgD;AAChD,eAAO,MAAM,mBAAmB,oCAAqC,CAAC;AAkBtE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,UAAO,qFAOjD"}
@@ -0,0 +1,11 @@
1
+ import type { ApiError } from '@orthacms/utils-admin';
2
+ import type { AddWorkspaceMemberInput } from '../../infrastructure/memberGateway';
3
+ export type { AddWorkspaceMemberInput } from '../../infrastructure/memberGateway';
4
+ /**
5
+ * Adds a member to a workspace from the Workspaces tab via the gateway. The
6
+ * endpoint is idempotent (re-adding is a no-op). Invalidates the member's detail
7
+ * (its `workspaces` list) and the members list (its Workspaces column) on
8
+ * success. Errors normalize to {@link ApiError}.
9
+ */
10
+ export declare function useAddWorkspaceMember(): import("@tanstack/react-query").UseMutationResult<void, ApiError, AddWorkspaceMemberInput, unknown>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useAddWorkspaceMember/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAGlF,YAAY,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF;;;;;GAKG;AACH,wBAAgB,qBAAqB,wGAWpC"}
@@ -0,0 +1,21 @@
1
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { httpMemberGateway } from '../../infrastructure/httpMemberGateway';
3
+ import { membersKeys } from '../../infrastructure/membersKeys';
4
+ /**
5
+ * Adds a member to a workspace from the Workspaces tab via the gateway. The
6
+ * endpoint is idempotent (re-adding is a no-op). Invalidates the member's detail
7
+ * (its `workspaces` list) and the members list (its Workspaces column) on
8
+ * success. Errors normalize to {@link ApiError}.
9
+ */
10
+ export function useAddWorkspaceMember() {
11
+ const queryClient = useQueryClient();
12
+ return useMutation({
13
+ mutationFn: (input) => httpMemberGateway.addWorkspace(input),
14
+ onSuccess: (_data, { userId }) => {
15
+ queryClient.invalidateQueries({
16
+ queryKey: membersKeys.detail(userId)
17
+ });
18
+ queryClient.invalidateQueries({ queryKey: membersKeys.all });
19
+ }
20
+ });
21
+ }
@@ -0,0 +1,12 @@
1
+ import type { InvitedMember } from '../../domain/types/member';
2
+ import type { InviteMemberInput } from '../../infrastructure/memberGateway';
3
+ export type { InviteMemberInput } from '../../infrastructure/memberGateway';
4
+ /**
5
+ * Invites a person by email via the gateway, resolving with the new member and
6
+ * their one-time invite token (the admin's only chance to capture the link).
7
+ * Errors are normalized to `ApiError` so the invite flow can branch on
8
+ * `HTTP_STATUS.CONFLICT` (email already taken); every page of the members cache
9
+ * is refreshed on success — the new "Invited" row may land on any page.
10
+ */
11
+ export declare function useInviteMember(): import("@tanstack/react-query").UseMutationResult<InvitedMember, import("@orthacms/utils-admin").ApiError, InviteMemberInput, unknown>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useInviteMember/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAG5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E;;;;;;GAMG;AACH,wBAAgB,eAAe,2IAI9B"}
@@ -0,0 +1,12 @@
1
+ import { httpMemberGateway } from '../../infrastructure/httpMemberGateway';
2
+ import { useMembersMutation } from '../useMembersMutation';
3
+ /**
4
+ * Invites a person by email via the gateway, resolving with the new member and
5
+ * their one-time invite token (the admin's only chance to capture the link).
6
+ * Errors are normalized to `ApiError` so the invite flow can branch on
7
+ * `HTTP_STATUS.CONFLICT` (email already taken); every page of the members cache
8
+ * is refreshed on success — the new "Invited" row may land on any page.
9
+ */
10
+ export function useInviteMember() {
11
+ return useMembersMutation((input) => httpMemberGateway.invite(input));
12
+ }
@@ -0,0 +1,59 @@
1
+ import type { MemberRole } from '../../domain/types/member';
2
+ /** The fields the invite wizard collects, before the final guard + submit. */
3
+ export type InviteMemberDraft = {
4
+ /** The invitee's email (trimmed by the flow). */
5
+ email: string;
6
+ /** The global role granted on acceptance. */
7
+ role: MemberRole;
8
+ /** Optional display name (blank becomes omitted). */
9
+ name?: string;
10
+ /** Workspaces to grant access to; `all` is expanded to ids by the caller. */
11
+ workspaceIds: string[];
12
+ };
13
+ /**
14
+ * Why the last submission failed, as a machine key the page maps to its inline
15
+ * alert copy: `taken` (email already exists — `409`) or `failed` (anything
16
+ * else).
17
+ */
18
+ export type InviteErrorReason = 'taken' | 'failed';
19
+ /** A completed invite, and the link the admin now has to deliver. */
20
+ export type SentInvite = {
21
+ /** The invitee's email, as accepted by the server. */
22
+ email: string;
23
+ /** The full invite link, built from the one-time token. */
24
+ link: string;
25
+ };
26
+ /** What {@link useInviteMemberFlow} returns. */
27
+ export type InviteMemberFlow = {
28
+ /**
29
+ * Runs the invite use case: guards the email through the {@link Email} value
30
+ * object, POSTs via the invite mutation (cache invalidation), then records
31
+ * the resulting link in {@link sent}. Rejections are swallowed — the caller
32
+ * reads {@link errorReason} to render the inline alert and let the user
33
+ * retry.
34
+ */
35
+ submit: (draft: InviteMemberDraft) => Promise<void>;
36
+ /** Whether an invite is currently in flight. */
37
+ submitting: boolean;
38
+ /** Why the last submission failed, or `null` when it hasn't. */
39
+ errorReason: InviteErrorReason | null;
40
+ /**
41
+ * The invite that was just sent, or `null` while the wizard is still
42
+ * collecting. Set once, and never re-fetchable — the server returns the raw
43
+ * token exactly once, so this state is the only copy.
44
+ */
45
+ sent: SentInvite | null;
46
+ };
47
+ /**
48
+ * The invite-member use-case hook. Orchestrates the wizard's submission — Email
49
+ * VO validation → invite → the shareable link — so the invite page stays layout
50
+ * + fields and owns none of the flow. The step's continue gate already blocks a
51
+ * malformed email; the {@link Email} guard here is the last check before the
52
+ * request.
53
+ *
54
+ * It deliberately does **not** navigate away on success: nothing emails the
55
+ * invite yet, so leaving the page would throw away the only copy of the link.
56
+ * The page shows it instead, and the admin leaves when they are done with it.
57
+ */
58
+ export declare function useInviteMemberFlow(): InviteMemberFlow;
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useInviteMemberFlow/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG;IAC5B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,UAAU,CAAC;IACjB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAAG;IACrB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,gBAAgB,GAAG;IAC3B;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC;;;;OAIG;IACH,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAoCtD"}
@@ -0,0 +1,47 @@
1
+ import { useCallback, useState } from 'react';
2
+ import { HTTP_STATUS } from '@orthacms/utils-admin';
3
+ import { Email } from '../../domain/value-objects/email';
4
+ import { inviteLinkFor } from '../../infrastructure/inviteLink';
5
+ import { useInviteMember } from '../useInviteMember';
6
+ /**
7
+ * The invite-member use-case hook. Orchestrates the wizard's submission — Email
8
+ * VO validation → invite → the shareable link — so the invite page stays layout
9
+ * + fields and owns none of the flow. The step's continue gate already blocks a
10
+ * malformed email; the {@link Email} guard here is the last check before the
11
+ * request.
12
+ *
13
+ * It deliberately does **not** navigate away on success: nothing emails the
14
+ * invite yet, so leaving the page would throw away the only copy of the link.
15
+ * The page shows it instead, and the admin leaves when they are done with it.
16
+ */
17
+ export function useInviteMemberFlow() {
18
+ const invite = useInviteMember();
19
+ const [sent, setSent] = useState(null);
20
+ const submit = useCallback(async (draft) => {
21
+ const email = draft.email.trim();
22
+ try {
23
+ // Guard the shape through the domain VO before hitting the API.
24
+ Email.create(email);
25
+ const created = await invite.mutateAsync({
26
+ email,
27
+ role: draft.role,
28
+ name: draft.name?.trim() || undefined,
29
+ workspaceIds: draft.workspaceIds
30
+ });
31
+ setSent({
32
+ email: created.email,
33
+ link: inviteLinkFor(created.inviteToken)
34
+ });
35
+ }
36
+ catch {
37
+ // The page's inline alert (via `errorReason`) explains; the user
38
+ // can go back, fix the email, and retry.
39
+ }
40
+ }, [invite]);
41
+ const errorReason = invite.isError
42
+ ? invite.error.status === HTTP_STATUS.CONFLICT
43
+ ? 'taken'
44
+ : 'failed'
45
+ : null;
46
+ return { submit, submitting: invite.isPending, errorReason, sent };
47
+ }
@@ -0,0 +1,12 @@
1
+ import type { MemberWithResetToken } from '../../domain/types/member';
2
+ /**
3
+ * Mints a one-time password-reset link for a member via the gateway (the server
4
+ * rotates the token, invalidating any previous link). Resolves with the member
5
+ * **and** the raw token, so the caller can show the link — minting without
6
+ * handing the link over would leave the member with nothing and the admin with
7
+ * a dead one. No cache invalidation: no list-visible field changes, exactly
8
+ * like "resend invite". Errors normalize to `ApiError`, so a caller can branch
9
+ * on `HTTP_STATUS.CONFLICT` for "not active" / "just issued".
10
+ */
11
+ export declare function useIssuePasswordReset(): import("@tanstack/react-query").UseMutationResult<MemberWithResetToken, import("@orthacms/utils-admin").ApiError, string, unknown>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useIssuePasswordReset/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAItE;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,uIAKpC"}
@@ -0,0 +1,14 @@
1
+ import { httpMemberGateway } from '../../infrastructure/httpMemberGateway';
2
+ import { useMembersMutation } from '../useMembersMutation';
3
+ /**
4
+ * Mints a one-time password-reset link for a member via the gateway (the server
5
+ * rotates the token, invalidating any previous link). Resolves with the member
6
+ * **and** the raw token, so the caller can show the link — minting without
7
+ * handing the link over would leave the member with nothing and the admin with
8
+ * a dead one. No cache invalidation: no list-visible field changes, exactly
9
+ * like "resend invite". Errors normalize to `ApiError`, so a caller can branch
10
+ * on `HTTP_STATUS.CONFLICT` for "not active" / "just issued".
11
+ */
12
+ export function useIssuePasswordReset() {
13
+ return useMembersMutation((id) => httpMemberGateway.issuePasswordReset(id), { invalidate: false });
14
+ }
@@ -0,0 +1,15 @@
1
+ import { type MembersListParams } from '../../infrastructure/membersKeys';
2
+ /**
3
+ * Page size the server applies when none is requested. Mirrors the server's
4
+ * `DEFAULT_PAGE_SIZE`; used only as a fallback for the page-count math before
5
+ * the first response lands.
6
+ */
7
+ export declare const DEFAULT_PAGE_SIZE = 10;
8
+ /**
9
+ * Fetches one page of members via the member gateway. `keepPreviousData` holds
10
+ * the current rows on screen while a new page or search resolves, so the table
11
+ * doesn't flash empty between pages. Disabled until the caller confirms
12
+ * `users:read`.
13
+ */
14
+ export declare function useMembers(params: MembersListParams, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../../..").MemberList>, Error>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useMembers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,kCAAkC,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,UAAO,iGAOnE"}
@@ -0,0 +1,23 @@
1
+ import { keepPreviousData, useQuery } from '@tanstack/react-query';
2
+ import { httpMemberGateway } from '../../infrastructure/httpMemberGateway';
3
+ import { membersKeys } from '../../infrastructure/membersKeys';
4
+ /**
5
+ * Page size the server applies when none is requested. Mirrors the server's
6
+ * `DEFAULT_PAGE_SIZE`; used only as a fallback for the page-count math before
7
+ * the first response lands.
8
+ */
9
+ export const DEFAULT_PAGE_SIZE = 10;
10
+ /**
11
+ * Fetches one page of members via the member gateway. `keepPreviousData` holds
12
+ * the current rows on screen while a new page or search resolves, so the table
13
+ * doesn't flash empty between pages. Disabled until the caller confirms
14
+ * `users:read`.
15
+ */
16
+ export function useMembers(params, enabled = true) {
17
+ return useQuery({
18
+ queryKey: membersKeys.list(params),
19
+ queryFn: () => httpMemberGateway.list(params),
20
+ placeholderData: keepPreviousData,
21
+ enabled
22
+ });
23
+ }
@@ -0,0 +1,14 @@
1
+ import { type ApiError } from '@orthacms/utils-admin';
2
+ /**
3
+ * Shared shell for the member mutations. The gateway already normalizes its
4
+ * transport error to {@link ApiError} (so dialogs can branch on
5
+ * `HTTP_STATUS.CONFLICT`); this re-normalizes defensively and, by default,
6
+ * invalidates the whole members cache on success (an added/changed/removed row
7
+ * may land on any page). The one exception is "resend invite", which changes no
8
+ * list-visible field — it opts out with `invalidate: false`. Each hook is then
9
+ * just its gateway call.
10
+ */
11
+ export declare function useMembersMutation<TInput, TResult>(mutationFn: (input: TInput) => Promise<TResult>, { invalidate }?: {
12
+ invalidate?: boolean;
13
+ }): import("@tanstack/react-query").UseMutationResult<TResult, ApiError, TInput, unknown>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useMembersMutation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGlE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAC9C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC/C,EAAE,UAAiB,EAAE,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,yFAevD"}
@@ -0,0 +1,25 @@
1
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { toApiError } from '@orthacms/utils-admin';
3
+ import { membersKeys } from '../../infrastructure/membersKeys';
4
+ /**
5
+ * Shared shell for the member mutations. The gateway already normalizes its
6
+ * transport error to {@link ApiError} (so dialogs can branch on
7
+ * `HTTP_STATUS.CONFLICT`); this re-normalizes defensively and, by default,
8
+ * invalidates the whole members cache on success (an added/changed/removed row
9
+ * may land on any page). The one exception is "resend invite", which changes no
10
+ * list-visible field — it opts out with `invalidate: false`. Each hook is then
11
+ * just its gateway call.
12
+ */
13
+ export function useMembersMutation(mutationFn, { invalidate = true } = {}) {
14
+ const queryClient = useQueryClient();
15
+ return useMutation({
16
+ mutationFn: (input) => mutationFn(input).catch((error) => {
17
+ throw toApiError(error);
18
+ }),
19
+ onSuccess: invalidate
20
+ ? () => {
21
+ queryClient.invalidateQueries({ queryKey: membersKeys.all });
22
+ }
23
+ : undefined
24
+ });
25
+ }