@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,153 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { defineMessages, useIntl } from 'react-intl';
4
+ import { Ban, MailCheck, ShieldCheck } from 'lucide-react';
5
+ import { Alert, AlertDescription, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, toast } from '@orthacms/design-system';
6
+ import { useAuth } from '@orthacms/identity-admin';
7
+ import { useSetMemberStatus } from '../../../application/useSetMemberStatus';
8
+ import { useUserDetailContext } from '../../userDetailContext';
9
+ import { MemberEntity } from '../../../domain/member';
10
+ import { ConfirmDialog } from '@orthacms/design-system';
11
+ import { PasswordResetCard } from '../../components/PasswordResetCard';
12
+ /** Intl descriptors for {@link UserAccessPage}, co-located with the component. */
13
+ const messages = defineMessages({
14
+ title: { id: 'users.access.title', defaultMessage: 'Sign-in access' },
15
+ activeTitle: {
16
+ id: 'users.access.activeTitle',
17
+ defaultMessage: 'This member can sign in'
18
+ },
19
+ activeBody: {
20
+ id: 'users.access.activeBody',
21
+ defaultMessage: 'Suspending blocks sign-in and revokes active sessions. Their workspace memberships and authored content are kept, so reactivating restores access immediately.'
22
+ },
23
+ disabledTitle: {
24
+ id: 'users.access.disabledTitle',
25
+ defaultMessage: 'This member is suspended'
26
+ },
27
+ disabledBody: {
28
+ id: 'users.access.disabledBody',
29
+ defaultMessage: 'They can’t sign in. Reactivate to restore access — memberships and content were preserved.'
30
+ },
31
+ pendingTitle: {
32
+ id: 'users.access.pendingTitle',
33
+ defaultMessage: 'Invite not accepted yet'
34
+ },
35
+ pendingBody: {
36
+ id: 'users.access.pendingBody',
37
+ defaultMessage: 'This member hasn’t accepted their invite, so there’s no sign-in access to suspend yet.'
38
+ },
39
+ suspend: { id: 'users.access.suspend', defaultMessage: 'Suspend member' },
40
+ reactivate: {
41
+ id: 'users.access.reactivate',
42
+ defaultMessage: 'Reactivate member'
43
+ },
44
+ confirmSuspendTitle: {
45
+ id: 'users.access.confirmSuspendTitle',
46
+ defaultMessage: 'Suspend {name}?'
47
+ },
48
+ confirmSuspendBody: {
49
+ id: 'users.access.confirmSuspendBody',
50
+ defaultMessage: 'They’ll be signed out everywhere and blocked from signing in until reactivated.'
51
+ },
52
+ confirmReactivateTitle: {
53
+ id: 'users.access.confirmReactivateTitle',
54
+ defaultMessage: 'Reactivate {name}?'
55
+ },
56
+ confirmReactivateBody: {
57
+ id: 'users.access.confirmReactivateBody',
58
+ defaultMessage: 'They’ll be able to sign in again right away.'
59
+ },
60
+ lastAdmin: {
61
+ id: 'users.access.lastAdmin',
62
+ defaultMessage: 'This member is the last remaining admin and can’t be suspended. Promote another member to admin first.'
63
+ },
64
+ self: {
65
+ id: 'users.access.self',
66
+ defaultMessage: 'You can’t suspend your own account.'
67
+ },
68
+ suspended: {
69
+ id: 'users.access.suspended',
70
+ defaultMessage: 'Suspended {name}.'
71
+ },
72
+ reactivated: {
73
+ id: 'users.access.reactivated',
74
+ defaultMessage: 'Reactivated {name}.'
75
+ },
76
+ failed: {
77
+ id: 'users.access.failed',
78
+ defaultMessage: 'Couldn’t update sign-in access. Please try again.'
79
+ }
80
+ });
81
+ /**
82
+ * The Access tab: everything that governs whether — and how — this member gets
83
+ * into the product. Two cards:
84
+ *
85
+ * - **sign-in access** — suspend or reactivate. Mirrors the server's lifecycle:
86
+ * only `active` can be suspended, only `disabled` reactivated, and `pending`
87
+ * (un-accepted invite) is read-only. The last active admin and your own
88
+ * account can't be suspended; the button explains why instead of failing on
89
+ * submit.
90
+ * - **password** — generate a single-use reset link for the member
91
+ * ({@link PasswordResetCard}).
92
+ *
93
+ * The two belong on one tab because they answer the same question from either
94
+ * side: this is where an admin goes when someone can't get in, whether the
95
+ * reason is that they were locked out or that they forgot their password.
96
+ */
97
+ export function UserAccessPage() {
98
+ const intl = useIntl();
99
+ const { member } = useUserDetailContext();
100
+ const auth = useAuth();
101
+ const setStatus = useSetMemberStatus();
102
+ const [confirming, setConfirming] = useState(false);
103
+ const isDisabled = member.status === 'disabled';
104
+ const isPending = member.status === 'pending';
105
+ // Mirror the server's guardrails: you can't suspend yourself or the sole
106
+ // admin. `lastAdmin` only blocks the suspend direction — reactivating a
107
+ // disabled member is always allowed.
108
+ const removal = MemberEntity.of(member).canBeRemoved(auth.user?.id);
109
+ const blockedReason = !removal.ok && removal.reason === 'self'
110
+ ? messages.self
111
+ : !removal.ok && removal.reason === 'lastAdmin' && !isDisabled
112
+ ? messages.lastAdmin
113
+ : null;
114
+ const card = isPending
115
+ ? {
116
+ icon: MailCheck,
117
+ title: messages.pendingTitle,
118
+ body: messages.pendingBody
119
+ }
120
+ : isDisabled
121
+ ? {
122
+ icon: Ban,
123
+ title: messages.disabledTitle,
124
+ body: messages.disabledBody
125
+ }
126
+ : {
127
+ icon: ShieldCheck,
128
+ title: messages.activeTitle,
129
+ body: messages.activeBody
130
+ };
131
+ const Icon = card.icon;
132
+ const run = () => {
133
+ setStatus.mutate({ id: member.id, disabled: !isDisabled }, {
134
+ onSuccess: (updated) => {
135
+ setConfirming(false);
136
+ toast.success(intl.formatMessage(isDisabled
137
+ ? messages.reactivated
138
+ : messages.suspended, { name: updated.name }));
139
+ },
140
+ onError: () => {
141
+ setConfirming(false);
142
+ toast.error(intl.formatMessage(messages.failed));
143
+ }
144
+ });
145
+ };
146
+ return (_jsxs("div", { className: "flex flex-col gap-6", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Icon, { "aria-hidden": true, className: "size-5 text-muted-foreground" }), intl.formatMessage(card.title)] }), _jsx(CardDescription, { children: intl.formatMessage(card.body) })] }), !isPending ? (_jsxs(CardContent, { className: "space-y-3", children: [blockedReason ? (_jsx(Alert, { children: _jsx(AlertDescription, { children: intl.formatMessage(blockedReason) }) })) : null, _jsx(Button, { variant: isDisabled ? 'default' : 'outline', onClick: () => setConfirming(true), disabled: blockedReason !== null || setStatus.isPending, children: intl.formatMessage(isDisabled
147
+ ? messages.reactivate
148
+ : messages.suspend) })] })) : null, _jsx(ConfirmDialog, { open: confirming, onOpenChange: setConfirming, busy: setStatus.isPending, title: intl.formatMessage(isDisabled
149
+ ? messages.confirmReactivateTitle
150
+ : messages.confirmSuspendTitle, { name: member.name }), description: intl.formatMessage(isDisabled
151
+ ? messages.confirmReactivateBody
152
+ : messages.confirmSuspendBody), confirmLabel: intl.formatMessage(isDisabled ? messages.reactivate : messages.suspend), confirmVariant: isDisabled ? 'default' : 'destructive', onConfirm: run })] }), _jsx(PasswordResetCard, { member: member })] }));
153
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The Activity tab: a timeline of audit events whose subject is this member,
3
+ * reusing the activity plugin's `useActivityLog` with a pinned `subjectId`
4
+ * filter. Gated on `activity:read` (the rail hides it otherwise). Paginated
5
+ * with the shared members pagination control.
6
+ */
7
+ export declare function UserActivityPage(): import("react").JSX.Element;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/pages/UserActivityPage/index.tsx"],"names":[],"mappings":"AAgQA;;;;;GAKG;AACH,wBAAgB,gBAAgB,gCA6F/B"}
@@ -0,0 +1,228 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useMemo, useState } from 'react';
3
+ import { defineMessages, useIntl } from 'react-intl';
4
+ import { Activity, Archive, ArchiveRestore, Ban, Building2, CircleCheck, FileText, FolderPlus, Image, KeyRound, LogIn, LogOut, MailX, Pencil, Send, ShieldCheck, Trash2, UserMinus, UserPlus } from 'lucide-react';
5
+ import { Alert, AlertDescription, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, cn } from '@orthacms/design-system';
6
+ import { useHasPermission } from '@orthacms/identity-admin';
7
+ import { formatActivityAction, useActivityLog } from '@orthacms/activity-admin';
8
+ import { MembersPagination } from '../../components/MembersPagination';
9
+ import { useUserDetailContext } from '../../userDetailContext';
10
+ /** Default page size for the per-user activity timeline (a pagination option). */
11
+ const DEFAULT_PAGE_SIZE = 25;
12
+ /** Intl descriptors for {@link UserActivityPage}. */
13
+ const messages = defineMessages({
14
+ title: { id: 'users.activity.title', defaultMessage: 'Activity' },
15
+ description: {
16
+ id: 'users.activity.description',
17
+ defaultMessage: 'A timeline of changes to this member’s account.'
18
+ },
19
+ empty: {
20
+ id: 'users.activity.empty',
21
+ defaultMessage: 'No recorded activity yet.'
22
+ },
23
+ error: {
24
+ id: 'users.activity.error',
25
+ defaultMessage: 'Couldn’t load activity. Please try again.'
26
+ },
27
+ retry: { id: 'users.activity.retry', defaultMessage: 'Retry' },
28
+ system: { id: 'users.activity.system', defaultMessage: 'System' },
29
+ by: { id: 'users.activity.by', defaultMessage: 'by {actor}' }
30
+ });
31
+ /**
32
+ * Per-kind **presentation** — an icon and a tinted chip class, so an invite
33
+ * reads differently from a suspension at a glance. The *label* is not here on
34
+ * purpose: it comes from `activity-admin`'s `formatActivityAction`, the one
35
+ * kind→label catalogue in the admin.
36
+ *
37
+ * This map used to own labels too, and it knew twelve kinds. The tab's query is
38
+ * "everything about *or by* this member", so it surfaces every kind the actor
39
+ * touched — and each of the other nineteen rendered as a raw dotted wire token
40
+ * (`media.asset.uploaded`, `token.created`, `workspace.content_granted`) in a
41
+ * member's timeline. A second catalogue is a second thing to forget; a missing
42
+ * icon here only costs a neutral chip.
43
+ */
44
+ const KIND_STYLE = {
45
+ 'user.invited': {
46
+ icon: UserPlus,
47
+ className: 'bg-blue-500/10 text-blue-600'
48
+ },
49
+ 'user.invite_resent': {
50
+ icon: Send,
51
+ className: 'bg-blue-500/10 text-blue-600'
52
+ },
53
+ 'user.invite_revoked': {
54
+ icon: MailX,
55
+ className: 'bg-rose-500/10 text-rose-600'
56
+ },
57
+ 'user.activated': {
58
+ icon: CircleCheck,
59
+ className: 'bg-emerald-500/10 text-emerald-600'
60
+ },
61
+ 'user.profile_updated': {
62
+ icon: Pencil,
63
+ className: 'bg-indigo-500/10 text-indigo-600'
64
+ },
65
+ 'user.role_changed': {
66
+ icon: ShieldCheck,
67
+ className: 'bg-violet-500/10 text-violet-600'
68
+ },
69
+ 'user.suspended': {
70
+ icon: Ban,
71
+ className: 'bg-amber-500/10 text-amber-600'
72
+ },
73
+ 'user.reactivated': {
74
+ icon: CircleCheck,
75
+ className: 'bg-emerald-500/10 text-emerald-600'
76
+ },
77
+ 'user.password_changed': {
78
+ icon: KeyRound,
79
+ className: 'bg-violet-500/10 text-violet-600'
80
+ },
81
+ 'user.password_reset_issued': {
82
+ icon: KeyRound,
83
+ className: 'bg-amber-500/10 text-amber-600'
84
+ },
85
+ 'user.signed_in': {
86
+ icon: LogIn,
87
+ className: 'bg-slate-500/10 text-slate-600'
88
+ },
89
+ 'user.signed_out': {
90
+ icon: LogOut,
91
+ className: 'bg-slate-500/10 text-slate-600'
92
+ },
93
+ 'workspace.created': {
94
+ icon: Building2,
95
+ className: 'bg-teal-500/10 text-teal-600'
96
+ },
97
+ 'workspace.updated': {
98
+ icon: Pencil,
99
+ className: 'bg-teal-500/10 text-teal-600'
100
+ },
101
+ 'workspace.archived': {
102
+ icon: Archive,
103
+ className: 'bg-amber-500/10 text-amber-600'
104
+ },
105
+ 'workspace.unarchived': {
106
+ icon: ArchiveRestore,
107
+ className: 'bg-emerald-500/10 text-emerald-600'
108
+ },
109
+ 'workspace.deleted': {
110
+ icon: Trash2,
111
+ className: 'bg-rose-500/10 text-rose-600'
112
+ },
113
+ 'workspace.member_added': {
114
+ icon: UserPlus,
115
+ className: 'bg-teal-500/10 text-teal-600'
116
+ },
117
+ 'workspace.member_removed': {
118
+ icon: UserMinus,
119
+ className: 'bg-rose-500/10 text-rose-600'
120
+ },
121
+ 'workspace.content_granted': {
122
+ icon: ShieldCheck,
123
+ className: 'bg-teal-500/10 text-teal-600'
124
+ },
125
+ 'workspace.content_revoked': {
126
+ icon: ShieldCheck,
127
+ className: 'bg-rose-500/10 text-rose-600'
128
+ },
129
+ 'entry.published': {
130
+ icon: FileText,
131
+ className: 'bg-emerald-500/10 text-emerald-600'
132
+ },
133
+ 'entry.unpublished': {
134
+ icon: FileText,
135
+ className: 'bg-amber-500/10 text-amber-600'
136
+ },
137
+ 'token.created': {
138
+ icon: KeyRound,
139
+ className: 'bg-violet-500/10 text-violet-600'
140
+ },
141
+ 'token.revoked': {
142
+ icon: KeyRound,
143
+ className: 'bg-rose-500/10 text-rose-600'
144
+ },
145
+ 'media.asset.uploaded': {
146
+ icon: Image,
147
+ className: 'bg-blue-500/10 text-blue-600'
148
+ },
149
+ 'media.asset.updated': {
150
+ icon: Pencil,
151
+ className: 'bg-indigo-500/10 text-indigo-600'
152
+ },
153
+ 'media.asset.moved': {
154
+ icon: FolderPlus,
155
+ className: 'bg-indigo-500/10 text-indigo-600'
156
+ },
157
+ 'media.asset.deleted': {
158
+ icon: Trash2,
159
+ className: 'bg-rose-500/10 text-rose-600'
160
+ },
161
+ 'media.folder.created': {
162
+ icon: FolderPlus,
163
+ className: 'bg-blue-500/10 text-blue-600'
164
+ },
165
+ 'media.folder.renamed': {
166
+ icon: Pencil,
167
+ className: 'bg-indigo-500/10 text-indigo-600'
168
+ },
169
+ 'media.folder.deleted': {
170
+ icon: Trash2,
171
+ className: 'bg-rose-500/10 text-rose-600'
172
+ }
173
+ };
174
+ const FALLBACK_STYLE = {
175
+ icon: Activity,
176
+ className: 'bg-muted text-muted-foreground'
177
+ };
178
+ /** One timeline entry. */
179
+ function ActivityRow({ event }) {
180
+ const intl = useIntl();
181
+ const style = KIND_STYLE[event.kind];
182
+ const title = formatActivityAction(intl, event.kind);
183
+ const Icon = style?.icon ?? FALLBACK_STYLE.icon;
184
+ const chipClassName = style?.className ?? FALLBACK_STYLE.className;
185
+ const actor = event.actor?.email ?? intl.formatMessage(messages.system);
186
+ return (_jsxs("li", { className: "flex items-center gap-3 border-b py-3 last:border-b-0", children: [_jsx("span", { "aria-hidden": true, className: cn('flex size-8 shrink-0 items-center justify-center rounded-full', chipClassName), children: _jsx(Icon, { "aria-hidden": true, className: "size-4" }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "text-sm font-medium", children: title }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [intl.formatDate(event.at, {
187
+ dateStyle: 'medium',
188
+ timeStyle: 'short'
189
+ }), ' ', intl.formatMessage(messages.by, { actor })] })] })] }));
190
+ }
191
+ /**
192
+ * The Activity tab: a timeline of audit events whose subject is this member,
193
+ * reusing the activity plugin's `useActivityLog` with a pinned `subjectId`
194
+ * filter. Gated on `activity:read` (the rail hides it otherwise). Paginated
195
+ * with the shared members pagination control.
196
+ */
197
+ export function UserActivityPage() {
198
+ const intl = useIntl();
199
+ const { member } = useUserDetailContext();
200
+ const canRead = useHasPermission('activity:read');
201
+ const [page, setPage] = useState(1);
202
+ const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE);
203
+ // The member's personal log: events *about* them (`subjectType=user` and
204
+ // `subjectId=:id` — e.g. they were added/removed from a workspace, their
205
+ // role changed) OR events they *performed* (`actorId=:id` — e.g. they
206
+ // created a workspace, signed in). Serialised to the wire filter grammar the
207
+ // activity endpoint already parses.
208
+ const filter = useMemo(() => JSON.stringify({
209
+ or: [
210
+ {
211
+ and: [
212
+ { field: 'subjectType', op: 'eq', value: 'user' },
213
+ { field: 'subjectId', op: 'eq', value: member.id }
214
+ ]
215
+ },
216
+ { field: 'actorId', op: 'eq', value: member.id }
217
+ ]
218
+ }), [member.id]);
219
+ const { data, isPending, isError, refetch } = useActivityLog({ filter, page, pageSize }, canRead);
220
+ const total = data?.total ?? 0;
221
+ const effectivePageSize = data?.pageSize ?? pageSize;
222
+ const pageCount = Math.max(1, Math.ceil(total / effectivePageSize));
223
+ const events = data?.items ?? [];
224
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: intl.formatMessage(messages.title) }), _jsx(CardDescription, { children: intl.formatMessage(messages.description) })] }), _jsx(CardContent, { className: "space-y-3", children: isPending ? (_jsxs(_Fragment, { children: [_jsx(Skeleton, { className: "h-12 w-full rounded-lg" }), _jsx(Skeleton, { className: "h-12 w-full rounded-lg" }), _jsx(Skeleton, { className: "h-12 w-full rounded-lg" })] })) : isError ? (_jsx(Alert, { variant: "destructive", role: "alert", children: _jsxs(AlertDescription, { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsx("span", { children: intl.formatMessage(messages.error) }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => refetch(), children: intl.formatMessage(messages.retry) })] }) })) : events.length === 0 ? (_jsx("p", { className: "py-6 text-center text-sm text-muted-foreground", children: intl.formatMessage(messages.empty) })) : (_jsxs(_Fragment, { children: [_jsx("ul", { children: events.map((event) => (_jsx(ActivityRow, { event: event }, event.id))) }), _jsx(MembersPagination, { page: page, pageCount: pageCount, pageSize: effectivePageSize, total: total, onPageChange: setPage, onPageSizeChange: (next) => {
225
+ setPageSize(next);
226
+ setPage(1);
227
+ } })] })) })] }));
228
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The General tab: edit the member's display name; the email is read-only. The
3
+ * Save/Discard pair only enables on a real change. Edit controls require
4
+ * `users:update`; without it the fields render disabled.
5
+ */
6
+ export declare function UserGeneralPage(): 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/UserGeneralPage/index.tsx"],"names":[],"mappings":"AAmDA;;;;GAIG;AACH,wBAAgB,eAAe,gCAqF9B"}
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { defineMessages, useIntl } from 'react-intl';
4
+ import { Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, InputField, Spinner, toast } from '@orthacms/design-system';
5
+ import { useHasPermission } from '@orthacms/identity-admin';
6
+ import { useUpdateMember } from '../../../application/useUpdateMember';
7
+ import { useUserDetailContext } from '../../userDetailContext';
8
+ /** Server-side cap on the display name (mirrors the users plugin). */
9
+ const NAME_MAX_LENGTH = 80;
10
+ /** Intl descriptors for {@link UserGeneralPage}, co-located with the component. */
11
+ const messages = defineMessages({
12
+ title: { id: 'users.general.title', defaultMessage: 'General' },
13
+ description: {
14
+ id: 'users.general.description',
15
+ defaultMessage: 'The member’s display name and contact email.'
16
+ },
17
+ nameLabel: { id: 'users.general.nameLabel', defaultMessage: 'Full name' },
18
+ nameTooLong: {
19
+ id: 'users.general.nameTooLong',
20
+ defaultMessage: 'Keep the name under {max} characters.'
21
+ },
22
+ emailLabel: { id: 'users.general.emailLabel', defaultMessage: 'Email' },
23
+ emailHint: {
24
+ id: 'users.general.emailHint',
25
+ defaultMessage: 'Email is the sign-in identifier and can’t be changed here.'
26
+ },
27
+ save: { id: 'users.general.save', defaultMessage: 'Save changes' },
28
+ discard: { id: 'users.general.discard', defaultMessage: 'Discard' },
29
+ saved: {
30
+ id: 'users.general.saved',
31
+ defaultMessage: 'Saved changes to {name}.'
32
+ },
33
+ failed: {
34
+ id: 'users.general.failed',
35
+ defaultMessage: 'Couldn’t save the changes. Please try again.'
36
+ }
37
+ });
38
+ /**
39
+ * The General tab: edit the member's display name; the email is read-only. The
40
+ * Save/Discard pair only enables on a real change. Edit controls require
41
+ * `users:update`; without it the fields render disabled.
42
+ */
43
+ export function UserGeneralPage() {
44
+ const intl = useIntl();
45
+ const { member } = useUserDetailContext();
46
+ const canManage = useHasPermission('users:update');
47
+ const update = useUpdateMember();
48
+ const [name, setName] = useState(member.name);
49
+ const trimmed = name.trim();
50
+ const tooLong = trimmed.length > NAME_MAX_LENGTH;
51
+ const dirty = trimmed !== member.name.trim();
52
+ const canSave = canManage && dirty && trimmed.length > 0 && !tooLong;
53
+ const save = () => {
54
+ if (!canSave) {
55
+ return;
56
+ }
57
+ update.mutate({ id: member.id, name: trimmed }, {
58
+ onSuccess: (saved) => {
59
+ setName(saved.name);
60
+ toast.success(intl.formatMessage(messages.saved, { name: saved.name }));
61
+ },
62
+ onError: () => {
63
+ toast.error(intl.formatMessage(messages.failed));
64
+ }
65
+ });
66
+ };
67
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: intl.formatMessage(messages.title) }), _jsx(CardDescription, { children: intl.formatMessage(messages.description) })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsx(InputField, { id: "user-general-name", label: intl.formatMessage(messages.nameLabel), value: name, maxLength: NAME_MAX_LENGTH + 1, disabled: !canManage || update.isPending, onChange: (event) => setName(event.target.value), error: tooLong
68
+ ? intl.formatMessage(messages.nameTooLong, {
69
+ max: NAME_MAX_LENGTH
70
+ })
71
+ : undefined }), _jsx(InputField, { id: "user-general-email", label: intl.formatMessage(messages.emailLabel), value: member.email, description: intl.formatMessage(messages.emailHint), readOnly: true, disabled: true })] }), canManage ? (_jsxs(CardFooter, { className: "justify-end gap-2", children: [_jsx(Button, { variant: "ghost", onClick: () => setName(member.name), disabled: !dirty || update.isPending, children: intl.formatMessage(messages.discard) }), _jsxs(Button, { onClick: save, disabled: !canSave || update.isPending, children: [update.isPending ? _jsx(Spinner, {}) : null, intl.formatMessage(messages.save)] })] })) : null] }));
72
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * A tiny, non-interactive mock of the admin chrome — a dark sidebar rail beside
3
+ * a content canvas with a couple of placeholder rows — rendered in a **fixed**
4
+ * light or dark palette (never the app tokens), so each theme card previews the
5
+ * look it applies regardless of the theme currently in effect. `system` shows
6
+ * the two halves side by side.
7
+ */
8
+ export declare function ThemePreview({ variant }: {
9
+ variant: 'light' | 'dark' | 'system';
10
+ }): import("react").JSX.Element;
11
+ //# sourceMappingURL=ThemePreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemePreview.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/pages/UserPreferencesPage/ThemePreview.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EACzB,OAAO,EACV,EAAE;IACC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;CACxC,+BAkBA"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '@orthacms/design-system';
3
+ /**
4
+ * A tiny, non-interactive mock of the admin chrome — a dark sidebar rail beside
5
+ * a content canvas with a couple of placeholder rows — rendered in a **fixed**
6
+ * light or dark palette (never the app tokens), so each theme card previews the
7
+ * look it applies regardless of the theme currently in effect. `system` shows
8
+ * the two halves side by side.
9
+ */
10
+ export function ThemePreview({ variant }) {
11
+ if (variant === 'system') {
12
+ return (_jsxs("div", { className: "flex h-16 w-full overflow-hidden rounded-md border border-border", children: [_jsx("div", { className: "w-1/2 overflow-hidden border-r border-border", children: _jsx(Panel, { tone: "light", edge: false }) }), _jsx("div", { className: "w-1/2 overflow-hidden", children: _jsx(Panel, { tone: "dark", edge: false }) })] }));
13
+ }
14
+ return (_jsx("div", { className: "h-16 w-full overflow-hidden rounded-md border border-border", children: _jsx(Panel, { tone: variant, edge: true }) }));
15
+ }
16
+ /** One themed panel: a rail + canvas with placeholder bars, in a fixed tone. */
17
+ function Panel({ tone, edge }) {
18
+ const dark = tone === 'dark';
19
+ return (_jsxs("div", { className: cn('flex h-full w-full', edge && 'rounded-[3px]', dark ? 'bg-neutral-900' : 'bg-white'), children: [_jsxs("div", { className: "flex w-1/3 flex-col gap-1 bg-neutral-800 p-1.5", children: [_jsx("span", { className: "h-1 w-3/4 rounded-full bg-orange-400/90" }), _jsx("span", { className: "h-1 w-full rounded-full bg-white/25" }), _jsx("span", { className: "h-1 w-2/3 rounded-full bg-white/25" })] }), _jsxs("div", { className: "flex flex-1 flex-col gap-1.5 p-2", children: [_jsx("span", { className: cn('h-1.5 w-1/2 rounded-full', dark ? 'bg-neutral-500' : 'bg-neutral-300') }), _jsx("span", { className: cn('h-4 w-full rounded-sm border', dark
20
+ ? 'border-neutral-700 bg-neutral-800'
21
+ : 'border-neutral-200 bg-neutral-50') }), _jsx("span", { className: cn('h-4 w-full rounded-sm border', dark
22
+ ? 'border-neutral-700 bg-neutral-800'
23
+ : 'border-neutral-200 bg-neutral-50') })] })] }));
24
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The Preferences tab (shown only on your **own** profile): pick the colour
3
+ * theme (Light / Dark / System). Selection is optimistic — the app re-themes
4
+ * the instant you choose, via the shared {@link useAppearance} provider — then
5
+ * persisted to the server; a failed save rolls the choice back and surfaces a
6
+ * toast. The radio group is the accessible backbone; each option is a full card
7
+ * with a live preview.
8
+ */
9
+ export declare function UserPreferencesPage(): 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/pages/UserPreferencesPage/index.tsx"],"names":[],"mappings":"AAiHA;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,gCAyIlC"}