@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.
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/lib/api/useAddWorkspaceMember/index.d.ts +16 -0
- package/dist/lib/api/useAddWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/api/useInviteMember/index.d.ts +17 -0
- package/dist/lib/api/useInviteMember/index.d.ts.map +1 -0
- package/dist/lib/api/useMembers/index.d.ts +15 -0
- package/dist/lib/api/useMembers/index.d.ts.map +1 -0
- package/dist/lib/api/useMembersMutation/index.d.ts +13 -0
- package/dist/lib/api/useMembersMutation/index.d.ts.map +1 -0
- package/dist/lib/api/useRemoveWorkspaceMember/index.d.ts +15 -0
- package/dist/lib/api/useRemoveWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/api/useResendInvite/index.d.ts +8 -0
- package/dist/lib/api/useResendInvite/index.d.ts.map +1 -0
- package/dist/lib/api/useRevokeInvite/index.d.ts +7 -0
- package/dist/lib/api/useRevokeInvite/index.d.ts.map +1 -0
- package/dist/lib/api/useRevokeSession/index.d.ts +15 -0
- package/dist/lib/api/useRevokeSession/index.d.ts.map +1 -0
- package/dist/lib/api/useSetMemberStatus/index.d.ts +15 -0
- package/dist/lib/api/useSetMemberStatus/index.d.ts.map +1 -0
- package/dist/lib/api/useUpdateMember/index.d.ts +15 -0
- package/dist/lib/api/useUpdateMember/index.d.ts.map +1 -0
- package/dist/lib/api/useUserDetail/index.d.ts +9 -0
- package/dist/lib/api/useUserDetail/index.d.ts.map +1 -0
- package/dist/lib/api/useUserSessions/index.d.ts +25 -0
- package/dist/lib/api/useUserSessions/index.d.ts.map +1 -0
- package/dist/lib/api/useWorkspaceOptions/index.d.ts +18 -0
- package/dist/lib/api/useWorkspaceOptions/index.d.ts.map +1 -0
- package/dist/lib/application/useAddWorkspaceMember/index.d.ts +11 -0
- package/dist/lib/application/useAddWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/application/useAddWorkspaceMember/index.js +21 -0
- package/dist/lib/application/useInviteMember/index.d.ts +12 -0
- package/dist/lib/application/useInviteMember/index.d.ts.map +1 -0
- package/dist/lib/application/useInviteMember/index.js +12 -0
- package/dist/lib/application/useInviteMemberFlow/index.d.ts +59 -0
- package/dist/lib/application/useInviteMemberFlow/index.d.ts.map +1 -0
- package/dist/lib/application/useInviteMemberFlow/index.js +47 -0
- package/dist/lib/application/useIssuePasswordReset/index.d.ts +12 -0
- package/dist/lib/application/useIssuePasswordReset/index.d.ts.map +1 -0
- package/dist/lib/application/useIssuePasswordReset/index.js +14 -0
- package/dist/lib/application/useMembers/index.d.ts +15 -0
- package/dist/lib/application/useMembers/index.d.ts.map +1 -0
- package/dist/lib/application/useMembers/index.js +23 -0
- package/dist/lib/application/useMembersMutation/index.d.ts +14 -0
- package/dist/lib/application/useMembersMutation/index.d.ts.map +1 -0
- package/dist/lib/application/useMembersMutation/index.js +25 -0
- package/dist/lib/application/usePreferences/index.d.ts +15 -0
- package/dist/lib/application/usePreferences/index.d.ts.map +1 -0
- package/dist/lib/application/usePreferences/index.js +28 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.d.ts +10 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.js +20 -0
- package/dist/lib/application/useResendInvite/index.d.ts +10 -0
- package/dist/lib/application/useResendInvite/index.d.ts.map +1 -0
- package/dist/lib/application/useResendInvite/index.js +12 -0
- package/dist/lib/application/useRevokeInvite/index.d.ts +7 -0
- package/dist/lib/application/useRevokeInvite/index.d.ts.map +1 -0
- package/dist/lib/application/useRevokeInvite/index.js +10 -0
- package/dist/lib/application/useRevokeSession/index.d.ts +10 -0
- package/dist/lib/application/useRevokeSession/index.d.ts.map +1 -0
- package/dist/lib/application/useRevokeSession/index.js +19 -0
- package/dist/lib/application/useSetMemberStatus/index.d.ts +11 -0
- package/dist/lib/application/useSetMemberStatus/index.d.ts.map +1 -0
- package/dist/lib/application/useSetMemberStatus/index.js +11 -0
- package/dist/lib/application/useUpdateMember/index.d.ts +11 -0
- package/dist/lib/application/useUpdateMember/index.d.ts.map +1 -0
- package/dist/lib/application/useUpdateMember/index.js +11 -0
- package/dist/lib/application/useUpdateTheme/index.d.ts +14 -0
- package/dist/lib/application/useUpdateTheme/index.d.ts.map +1 -0
- package/dist/lib/application/useUpdateTheme/index.js +25 -0
- package/dist/lib/application/useUserDetail/index.d.ts +9 -0
- package/dist/lib/application/useUserDetail/index.d.ts.map +1 -0
- package/dist/lib/application/useUserDetail/index.js +17 -0
- package/dist/lib/application/useUserSessions/index.d.ts +9 -0
- package/dist/lib/application/useUserSessions/index.d.ts.map +1 -0
- package/dist/lib/application/useUserSessions/index.js +17 -0
- package/dist/lib/application/useWorkspaceOptions/index.d.ts +10 -0
- package/dist/lib/application/useWorkspaceOptions/index.d.ts.map +1 -0
- package/dist/lib/application/useWorkspaceOptions/index.js +17 -0
- package/dist/lib/components/AccountMenu/index.d.ts +9 -0
- package/dist/lib/components/AccountMenu/index.d.ts.map +1 -0
- package/dist/lib/components/AddToWorkspacesDialog/index.d.ts +19 -0
- package/dist/lib/components/AddToWorkspacesDialog/index.d.ts.map +1 -0
- package/dist/lib/components/BackLink/index.d.ts +14 -0
- package/dist/lib/components/BackLink/index.d.ts.map +1 -0
- package/dist/lib/components/ConfirmDialog/index.d.ts +30 -0
- package/dist/lib/components/ConfirmDialog/index.d.ts.map +1 -0
- package/dist/lib/components/EditMemberDialog/index.d.ts +21 -0
- package/dist/lib/components/EditMemberDialog/index.d.ts.map +1 -0
- package/dist/lib/components/MemberAvatar/index.d.ts +24 -0
- package/dist/lib/components/MemberAvatar/index.d.ts.map +1 -0
- package/dist/lib/components/MembersEmpty/index.d.ts +16 -0
- package/dist/lib/components/MembersEmpty/index.d.ts.map +1 -0
- package/dist/lib/components/MembersNoAccess/index.d.ts +7 -0
- package/dist/lib/components/MembersNoAccess/index.d.ts.map +1 -0
- package/dist/lib/components/MembersPagination/index.d.ts +17 -0
- package/dist/lib/components/MembersPagination/index.d.ts.map +1 -0
- package/dist/lib/components/MembersSkeleton/index.d.ts +32 -0
- package/dist/lib/components/MembersSkeleton/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/MemberRoleChip/index.d.ts +10 -0
- package/dist/lib/components/MembersTable/MemberRoleChip/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/MemberRowActions/index.d.ts +16 -0
- package/dist/lib/components/MembersTable/MemberRowActions/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/MemberStatusBadge/index.d.ts +10 -0
- package/dist/lib/components/MembersTable/MemberStatusBadge/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/MemberWorkspaces/index.d.ts +10 -0
- package/dist/lib/components/MembersTable/MemberWorkspaces/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/index.d.ts +12 -0
- package/dist/lib/components/MembersTable/index.d.ts.map +1 -0
- package/dist/lib/components/MembersToolbar/index.d.ts +13 -0
- package/dist/lib/components/MembersToolbar/index.d.ts.map +1 -0
- package/dist/lib/components/RolePicker/index.d.ts +18 -0
- package/dist/lib/components/RolePicker/index.d.ts.map +1 -0
- package/dist/lib/components/SessionCard/index.d.ts +15 -0
- package/dist/lib/components/SessionCard/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/UserDetailTabs/index.d.ts +13 -0
- package/dist/lib/components/UserDetailLayout/UserDetailTabs/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/UserHero/index.d.ts +10 -0
- package/dist/lib/components/UserDetailLayout/UserHero/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/UserSideRail/index.d.ts +12 -0
- package/dist/lib/components/UserDetailLayout/UserSideRail/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/UserStatsStrip/index.d.ts +10 -0
- package/dist/lib/components/UserDetailLayout/UserStatsStrip/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/index.d.ts +13 -0
- package/dist/lib/components/UserDetailLayout/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailRouter/index.d.ts +13 -0
- package/dist/lib/components/UserDetailRouter/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceMembershipCard/index.d.ts +15 -0
- package/dist/lib/components/WorkspaceMembershipCard/index.d.ts.map +1 -0
- package/dist/lib/domain/member/index.d.ts +61 -0
- package/dist/lib/domain/member/index.d.ts.map +1 -0
- package/dist/lib/domain/member/index.js +61 -0
- package/dist/lib/domain/types/member/index.d.ts +90 -0
- package/dist/lib/domain/types/member/index.d.ts.map +1 -0
- package/dist/lib/domain/types/member/index.js +1 -0
- package/dist/lib/domain/types/session/index.d.ts +18 -0
- package/dist/lib/domain/types/session/index.d.ts.map +1 -0
- package/dist/lib/domain/types/session/index.js +1 -0
- package/dist/lib/domain/types/workspaceOption/index.d.ts +15 -0
- package/dist/lib/domain/types/workspaceOption/index.d.ts.map +1 -0
- package/dist/lib/domain/types/workspaceOption/index.js +1 -0
- package/dist/lib/domain/value-objects/email/index.d.ts +24 -0
- package/dist/lib/domain/value-objects/email/index.d.ts.map +1 -0
- package/dist/lib/domain/value-objects/email/index.js +45 -0
- package/dist/lib/infrastructure/httpMemberGateway/index.d.ts +12 -0
- package/dist/lib/infrastructure/httpMemberGateway/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/httpMemberGateway/index.js +158 -0
- package/dist/lib/infrastructure/inviteLink/index.d.ts +13 -0
- package/dist/lib/infrastructure/inviteLink/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/inviteLink/index.js +23 -0
- package/dist/lib/infrastructure/memberGateway/index.d.ts +103 -0
- package/dist/lib/infrastructure/memberGateway/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/memberGateway/index.js +1 -0
- package/dist/lib/infrastructure/memberMapper/index.d.ts +59 -0
- package/dist/lib/infrastructure/memberMapper/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/memberMapper/index.js +52 -0
- package/dist/lib/infrastructure/membersKeys/index.d.ts +37 -0
- package/dist/lib/infrastructure/membersKeys/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/membersKeys/index.js +25 -0
- package/dist/lib/infrastructure/passwordResetLink/index.d.ts +13 -0
- package/dist/lib/infrastructure/passwordResetLink/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/passwordResetLink/index.js +24 -0
- package/dist/lib/infrastructure/preferencesGateway/index.d.ts +37 -0
- package/dist/lib/infrastructure/preferencesGateway/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/preferencesGateway/index.js +43 -0
- package/dist/lib/pages/InviteMemberPage/index.d.ts +7 -0
- package/dist/lib/pages/InviteMemberPage/index.d.ts.map +1 -0
- package/dist/lib/pages/MembersPage/index.d.ts +13 -0
- package/dist/lib/pages/MembersPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserAccessPage/index.d.ts +9 -0
- package/dist/lib/pages/UserAccessPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserActivityPage/index.d.ts +8 -0
- package/dist/lib/pages/UserActivityPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserGeneralPage/index.d.ts +7 -0
- package/dist/lib/pages/UserGeneralPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserRolesPage/index.d.ts +8 -0
- package/dist/lib/pages/UserRolesPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserSessionsPage/index.d.ts +7 -0
- package/dist/lib/pages/UserSessionsPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserWorkspacesPage/index.d.ts +8 -0
- package/dist/lib/pages/UserWorkspacesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/AccountMenu/index.d.ts +9 -0
- package/dist/lib/presentation/components/AccountMenu/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/AccountMenu/index.js +42 -0
- package/dist/lib/presentation/components/AddToWorkspacesDialog/index.d.ts +19 -0
- package/dist/lib/presentation/components/AddToWorkspacesDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/AddToWorkspacesDialog/index.js +89 -0
- package/dist/lib/presentation/components/BackLink/index.d.ts +14 -0
- package/dist/lib/presentation/components/BackLink/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/BackLink/index.js +12 -0
- package/dist/lib/presentation/components/InviteLinkDialog/index.d.ts +25 -0
- package/dist/lib/presentation/components/InviteLinkDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/InviteLinkDialog/index.js +77 -0
- package/dist/lib/presentation/components/InviteLinkPanel/index.d.ts +26 -0
- package/dist/lib/presentation/components/InviteLinkPanel/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/InviteLinkPanel/index.js +59 -0
- package/dist/lib/presentation/components/InviteSent/index.d.ts +20 -0
- package/dist/lib/presentation/components/InviteSent/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/InviteSent/index.js +60 -0
- package/dist/lib/presentation/components/MemberAvatar/index.d.ts +24 -0
- package/dist/lib/presentation/components/MemberAvatar/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MemberAvatar/index.js +14 -0
- package/dist/lib/presentation/components/MembersEmpty/index.d.ts +16 -0
- package/dist/lib/presentation/components/MembersEmpty/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersEmpty/index.js +42 -0
- package/dist/lib/presentation/components/MembersNoAccess/index.d.ts +7 -0
- package/dist/lib/presentation/components/MembersNoAccess/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersNoAccess/index.js +24 -0
- package/dist/lib/presentation/components/MembersPagination/index.d.ts +17 -0
- package/dist/lib/presentation/components/MembersPagination/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersPagination/index.js +45 -0
- package/dist/lib/presentation/components/MembersSkeleton/index.d.ts +32 -0
- package/dist/lib/presentation/components/MembersSkeleton/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersSkeleton/index.js +61 -0
- package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.d.ts +17 -0
- package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.js +36 -0
- package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.d.ts +16 -0
- package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.js +284 -0
- package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.d.ts +10 -0
- package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.js +49 -0
- package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.d.ts +10 -0
- package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.js +37 -0
- package/dist/lib/presentation/components/MembersTable/index.d.ts +12 -0
- package/dist/lib/presentation/components/MembersTable/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/index.js +54 -0
- package/dist/lib/presentation/components/MembersTable/membersTableAnchor/index.d.ts +14 -0
- package/dist/lib/presentation/components/MembersTable/membersTableAnchor/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersToolbar/index.d.ts +15 -0
- package/dist/lib/presentation/components/MembersToolbar/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersToolbar/index.js +23 -0
- package/dist/lib/presentation/components/PasswordResetCard/index.d.ts +19 -0
- package/dist/lib/presentation/components/PasswordResetCard/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/PasswordResetCard/index.js +109 -0
- package/dist/lib/presentation/components/PasswordResetLinkDialog/index.d.ts +27 -0
- package/dist/lib/presentation/components/PasswordResetLinkDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/PasswordResetLinkDialog/index.js +79 -0
- package/dist/lib/presentation/components/PasswordResetLinkPanel/index.d.ts +31 -0
- package/dist/lib/presentation/components/PasswordResetLinkPanel/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/PasswordResetLinkPanel/index.js +64 -0
- package/dist/lib/presentation/components/RolePicker/index.d.ts +21 -0
- package/dist/lib/presentation/components/RolePicker/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/RolePicker/index.js +51 -0
- package/dist/lib/presentation/components/SessionCard/index.d.ts +15 -0
- package/dist/lib/presentation/components/SessionCard/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/SessionCard/index.js +43 -0
- package/dist/lib/presentation/components/ThemeSync/index.d.ts +21 -0
- package/dist/lib/presentation/components/ThemeSync/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/ThemeSync/index.js +32 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.d.ts +15 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.js +52 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.d.ts +10 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.js +26 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.d.ts +10 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.js +39 -0
- package/dist/lib/presentation/components/UserDetailLayout/index.d.ts +13 -0
- package/dist/lib/presentation/components/UserDetailLayout/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailLayout/index.js +101 -0
- package/dist/lib/presentation/components/UserDetailRouter/index.d.ts +16 -0
- package/dist/lib/presentation/components/UserDetailRouter/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailRouter/index.js +33 -0
- package/dist/lib/presentation/components/WorkspaceMembershipCard/index.d.ts +15 -0
- package/dist/lib/presentation/components/WorkspaceMembershipCard/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceMembershipCard/index.js +27 -0
- package/dist/lib/presentation/membersFilterFields/index.d.ts +10 -0
- package/dist/lib/presentation/membersFilterFields/index.d.ts.map +1 -0
- package/dist/lib/presentation/membersFilterFields/index.js +67 -0
- package/dist/lib/presentation/membersResultsAnchor/index.d.ts +17 -0
- package/dist/lib/presentation/membersResultsAnchor/index.d.ts.map +1 -0
- package/dist/lib/presentation/membersResultsAnchor/index.js +16 -0
- package/dist/lib/presentation/pages/InviteMemberPage/index.d.ts +7 -0
- package/dist/lib/presentation/pages/InviteMemberPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/InviteMemberPage/index.js +346 -0
- package/dist/lib/presentation/pages/MembersPage/index.d.ts +13 -0
- package/dist/lib/presentation/pages/MembersPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/MembersPage/index.js +140 -0
- package/dist/lib/presentation/pages/UserAccessPage/index.d.ts +18 -0
- package/dist/lib/presentation/pages/UserAccessPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserAccessPage/index.js +153 -0
- package/dist/lib/presentation/pages/UserActivityPage/index.d.ts +8 -0
- package/dist/lib/presentation/pages/UserActivityPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserActivityPage/index.js +228 -0
- package/dist/lib/presentation/pages/UserGeneralPage/index.d.ts +7 -0
- package/dist/lib/presentation/pages/UserGeneralPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserGeneralPage/index.js +72 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.d.ts +11 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.js +24 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/index.d.ts +10 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/index.js +148 -0
- package/dist/lib/presentation/pages/UserRolesPage/index.d.ts +8 -0
- package/dist/lib/presentation/pages/UserRolesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserRolesPage/index.js +110 -0
- package/dist/lib/presentation/pages/UserSessionsPage/index.d.ts +7 -0
- package/dist/lib/presentation/pages/UserSessionsPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserSessionsPage/index.js +121 -0
- package/dist/lib/presentation/pages/UserWorkspacesPage/index.d.ts +8 -0
- package/dist/lib/presentation/pages/UserWorkspacesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserWorkspacesPage/index.js +111 -0
- package/dist/lib/presentation/userDetailContext/index.d.ts +13 -0
- package/dist/lib/presentation/userDetailContext/index.d.ts.map +1 -0
- package/dist/lib/presentation/userDetailContext/index.js +5 -0
- package/dist/lib/presentation/usersPlugin/index.d.ts +27 -0
- package/dist/lib/presentation/usersPlugin/index.d.ts.map +1 -0
- package/dist/lib/presentation/usersPlugin/index.js +109 -0
- package/dist/lib/types/member/index.d.ts +63 -0
- package/dist/lib/types/member/index.d.ts.map +1 -0
- package/dist/lib/utils/membersFilterFields/index.d.ts +10 -0
- package/dist/lib/utils/membersFilterFields/index.d.ts.map +1 -0
- package/dist/lib/utils/membersKeys/index.d.ts +27 -0
- package/dist/lib/utils/membersKeys/index.d.ts.map +1 -0
- package/dist/lib/utils/toMember/index.d.ts +33 -0
- package/dist/lib/utils/toMember/index.d.ts.map +1 -0
- package/dist/lib/utils/userDetailContext/index.d.ts +13 -0
- package/dist/lib/utils/userDetailContext/index.d.ts.map +1 -0
- package/dist/lib/utils/usersPlugin/index.d.ts +27 -0
- package/dist/lib/utils/usersPlugin/index.d.ts.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { Card, CardContent } from '@orthacms/design-system';
|
|
4
|
+
import { MemberAvatar } from '../../MemberAvatar';
|
|
5
|
+
import { MemberRoleChip } from '../../MembersTable/MemberRoleChip';
|
|
6
|
+
import { MemberStatusBadge } from '../../MembersTable/MemberStatusBadge';
|
|
7
|
+
/** Intl descriptors for {@link UserHero}, co-located with the component. */
|
|
8
|
+
const messages = defineMessages({
|
|
9
|
+
memberSince: {
|
|
10
|
+
id: 'users.detail.hero.memberSince',
|
|
11
|
+
defaultMessage: 'Member since {date}'
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* The detail page's identity card: a large initials avatar, the member's name
|
|
16
|
+
* and email, their status and role badges, and the join date. Read-only — every
|
|
17
|
+
* edit lives in a tab below.
|
|
18
|
+
*/
|
|
19
|
+
export function UserHero({ member }) {
|
|
20
|
+
const intl = useIntl();
|
|
21
|
+
return (_jsx(Card, { children: _jsxs(CardContent, { className: "flex items-center gap-4 pt-6", children: [_jsx(MemberAvatar, { initials: member.initials, color: member.color, className: "size-16 shrink-0 text-lg" }), _jsxs("div", { className: "min-w-0 space-y-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("h1", { className: "truncate text-xl font-semibold", children: member.name }), _jsx(MemberStatusBadge, { status: member.status }), _jsx(MemberRoleChip, { role: member.role, roleName: member.roleName })] }), _jsx("p", { className: "truncate text-sm text-muted-foreground", children: member.email }), _jsx("p", { className: "text-xs text-muted-foreground", children: intl.formatMessage(messages.memberSince, {
|
|
22
|
+
date: intl.formatDate(member.joinedAt, {
|
|
23
|
+
dateStyle: 'long'
|
|
24
|
+
})
|
|
25
|
+
}) })] })] }) }));
|
|
26
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Member } from '../../../../domain/types/member';
|
|
2
|
+
/**
|
|
3
|
+
* A three-tile summary above the detail tabs: when the member joined, how many
|
|
4
|
+
* workspaces they belong to, and their global role. Sourced entirely from the
|
|
5
|
+
* shared detail record — no extra requests.
|
|
6
|
+
*/
|
|
7
|
+
export declare function UserStatsStrip({ member }: {
|
|
8
|
+
member: Member;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAgD9D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,+BA2B5D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { Building2, CalendarDays, ShieldCheck } from 'lucide-react';
|
|
4
|
+
import { Card, CardContent } from '@orthacms/design-system';
|
|
5
|
+
import { MemberRoleChip } from '../../MembersTable/MemberRoleChip';
|
|
6
|
+
/** Intl descriptors for {@link UserStatsStrip}, co-located with the component. */
|
|
7
|
+
const messages = defineMessages({
|
|
8
|
+
memberSince: {
|
|
9
|
+
id: 'users.detail.stats.memberSince',
|
|
10
|
+
defaultMessage: 'Member since'
|
|
11
|
+
},
|
|
12
|
+
workspaces: {
|
|
13
|
+
id: 'users.detail.stats.workspaces',
|
|
14
|
+
defaultMessage: 'Workspaces'
|
|
15
|
+
},
|
|
16
|
+
workspaceCount: {
|
|
17
|
+
id: 'users.detail.stats.workspaceCount',
|
|
18
|
+
defaultMessage: '{count, plural, one {# workspace} other {# workspaces}}'
|
|
19
|
+
},
|
|
20
|
+
role: {
|
|
21
|
+
id: 'users.detail.stats.role',
|
|
22
|
+
defaultMessage: 'Role'
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
/** One stat tile: an icon, a label, and its value. */
|
|
26
|
+
function StatTile({ icon: Icon, label, children }) {
|
|
27
|
+
return (_jsx(Card, { children: _jsxs(CardContent, { className: "flex items-center gap-3 pt-6", children: [_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground", children: _jsx(Icon, { "aria-hidden": true, className: "size-4" }) }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: label }), _jsx("div", { className: "text-sm font-medium", children: children })] })] }) }));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A three-tile summary above the detail tabs: when the member joined, how many
|
|
31
|
+
* workspaces they belong to, and their global role. Sourced entirely from the
|
|
32
|
+
* shared detail record — no extra requests.
|
|
33
|
+
*/
|
|
34
|
+
export function UserStatsStrip({ member }) {
|
|
35
|
+
const intl = useIntl();
|
|
36
|
+
return (_jsxs("div", { className: "grid gap-4 sm:grid-cols-3", children: [_jsx(StatTile, { icon: CalendarDays, label: intl.formatMessage(messages.memberSince), children: intl.formatDate(member.joinedAt, { dateStyle: 'medium' }) }), _jsx(StatTile, { icon: Building2, label: intl.formatMessage(messages.workspaces), children: intl.formatMessage(messages.workspaceCount, {
|
|
37
|
+
count: member.workspaces.length
|
|
38
|
+
}) }), _jsx(StatTile, { icon: ShieldCheck, label: intl.formatMessage(messages.role), children: _jsx(MemberRoleChip, { role: member.role, roleName: member.roleName }) })] }));
|
|
39
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The user detail page shell, mounted at `/users/:id/*`. Fetches the member
|
|
3
|
+
* once and shares it with every tab through the Outlet context, so a tab read
|
|
4
|
+
* is free. Renders the back link, identity hero, stats strip, and the underline
|
|
5
|
+
* tab bar above the active tab. Loading shows skeletons; a 404 shows a
|
|
6
|
+
* dedicated "no longer exists" state; any other error is retryable by the
|
|
7
|
+
* tabs' own queries falling back here.
|
|
8
|
+
*
|
|
9
|
+
* Gated on `users:read` (the same permission the roster needs): without it the
|
|
10
|
+
* page shows the shared no-access state and fetches nothing.
|
|
11
|
+
*/
|
|
12
|
+
export declare function UserDetailLayout(): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/UserDetailLayout/index.tsx"],"names":[],"mappings":"AA4CA;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,gCA4I/B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Outlet, useParams } from 'react-router-dom';
|
|
3
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
4
|
+
import { Alert, AlertDescription, Container, Skeleton } from '@orthacms/design-system';
|
|
5
|
+
import { ApiError, HTTP_STATUS, useDocumentTitle } from '@orthacms/utils-admin';
|
|
6
|
+
import { useHasPermission } from '@orthacms/identity-admin';
|
|
7
|
+
import { PageTopBar } from '@orthacms/shell-admin';
|
|
8
|
+
import { Users } from 'lucide-react';
|
|
9
|
+
import { useUserDetail } from '../../../application/useUserDetail';
|
|
10
|
+
import { BackLink } from '../BackLink';
|
|
11
|
+
import { MembersNoAccess } from '../MembersNoAccess';
|
|
12
|
+
import { UserHero } from './UserHero';
|
|
13
|
+
import { UserDetailTabs } from './UserDetailTabs';
|
|
14
|
+
import { UserStatsStrip } from './UserStatsStrip';
|
|
15
|
+
/** Intl descriptors for {@link UserDetailLayout}, co-located with the component. */
|
|
16
|
+
const messages = defineMessages({
|
|
17
|
+
documentTitle: {
|
|
18
|
+
id: 'users.detail.documentTitle',
|
|
19
|
+
defaultMessage: 'Member'
|
|
20
|
+
},
|
|
21
|
+
back: {
|
|
22
|
+
id: 'users.detail.back',
|
|
23
|
+
defaultMessage: 'Back to members'
|
|
24
|
+
},
|
|
25
|
+
crumbMembers: {
|
|
26
|
+
id: 'users.detail.crumbMembers',
|
|
27
|
+
defaultMessage: 'Members'
|
|
28
|
+
},
|
|
29
|
+
notFound: {
|
|
30
|
+
id: 'users.detail.notFound',
|
|
31
|
+
defaultMessage: 'This member no longer exists.'
|
|
32
|
+
},
|
|
33
|
+
error: {
|
|
34
|
+
id: 'users.detail.error',
|
|
35
|
+
defaultMessage: 'Couldn’t load this member. Please try again.'
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* The user detail page shell, mounted at `/users/:id/*`. Fetches the member
|
|
40
|
+
* once and shares it with every tab through the Outlet context, so a tab read
|
|
41
|
+
* is free. Renders the back link, identity hero, stats strip, and the underline
|
|
42
|
+
* tab bar above the active tab. Loading shows skeletons; a 404 shows a
|
|
43
|
+
* dedicated "no longer exists" state; any other error is retryable by the
|
|
44
|
+
* tabs' own queries falling back here.
|
|
45
|
+
*
|
|
46
|
+
* Gated on `users:read` (the same permission the roster needs): without it the
|
|
47
|
+
* page shows the shared no-access state and fetches nothing.
|
|
48
|
+
*/
|
|
49
|
+
export function UserDetailLayout() {
|
|
50
|
+
const intl = useIntl();
|
|
51
|
+
const { id = '' } = useParams();
|
|
52
|
+
const canRead = useHasPermission('users:read');
|
|
53
|
+
const { data: member, isPending, isError, error } = useUserDetail(id, canRead);
|
|
54
|
+
// Titled here rather than in each of the seven tabs: the page is *this
|
|
55
|
+
// member*, and their name is the thing that tells one open tab from another
|
|
56
|
+
// (WCAG 2.4.2, `ORT-140`). Falls back to a generic label until the read
|
|
57
|
+
// lands, so the title never claims a name the page is not showing.
|
|
58
|
+
useDocumentTitle(member?.name ?? intl.formatMessage(messages.documentTitle));
|
|
59
|
+
if (!canRead) {
|
|
60
|
+
return (_jsxs(_Fragment, { children: [_jsx(PageTopBar, { icon: Users, iconClassName: "bg-success-soft text-success-soft-foreground", crumbs: [
|
|
61
|
+
{
|
|
62
|
+
key: 'members',
|
|
63
|
+
label: intl.formatMessage(messages.crumbMembers),
|
|
64
|
+
to: '/users'
|
|
65
|
+
}
|
|
66
|
+
] }), _jsx(Container, { children: _jsx(MembersNoAccess, {}) })] }));
|
|
67
|
+
}
|
|
68
|
+
const back = (_jsx(BackLink, { to: "/users", label: intl.formatMessage(messages.back) }));
|
|
69
|
+
if (isPending) {
|
|
70
|
+
return (_jsxs(_Fragment, { children: [_jsx(PageTopBar, { icon: Users, iconClassName: "bg-success-soft text-success-soft-foreground", crumbs: [
|
|
71
|
+
{
|
|
72
|
+
key: 'members',
|
|
73
|
+
label: intl.formatMessage(messages.crumbMembers),
|
|
74
|
+
to: '/users'
|
|
75
|
+
}
|
|
76
|
+
] }), _jsxs(Container, { className: "space-y-6", children: [back, _jsx(Skeleton, { className: "h-24 w-full rounded-xl" }), _jsx(Skeleton, { className: "h-20 w-full rounded-xl" }), _jsx(Skeleton, { className: "h-64 w-full rounded-xl" })] })] }));
|
|
77
|
+
}
|
|
78
|
+
if (isError) {
|
|
79
|
+
const status = error instanceof ApiError ? error.status : null;
|
|
80
|
+
const message = status === HTTP_STATUS.NOT_FOUND
|
|
81
|
+
? messages.notFound
|
|
82
|
+
: messages.error;
|
|
83
|
+
return (_jsxs(_Fragment, { children: [_jsx(PageTopBar, { icon: Users, iconClassName: "bg-success-soft text-success-soft-foreground", crumbs: [
|
|
84
|
+
{
|
|
85
|
+
key: 'members',
|
|
86
|
+
label: intl.formatMessage(messages.crumbMembers),
|
|
87
|
+
to: '/users'
|
|
88
|
+
}
|
|
89
|
+
] }), _jsxs(Container, { className: "space-y-6", children: [back, _jsx(Alert, { variant: "destructive", role: "alert", children: _jsx(AlertDescription, { children: intl.formatMessage(message) }) })] })] }));
|
|
90
|
+
}
|
|
91
|
+
const context = { member };
|
|
92
|
+
const crumbs = [
|
|
93
|
+
{
|
|
94
|
+
key: 'members',
|
|
95
|
+
label: intl.formatMessage(messages.crumbMembers),
|
|
96
|
+
to: '/users'
|
|
97
|
+
},
|
|
98
|
+
{ key: member.id, label: member.name }
|
|
99
|
+
];
|
|
100
|
+
return (_jsxs(_Fragment, { children: [_jsx(PageTopBar, { icon: Users, iconClassName: "bg-success-soft text-success-soft-foreground", crumbs: crumbs }), _jsxs(Container, { className: "space-y-6", children: [back, _jsx(UserHero, { member: member }), _jsx(UserStatsStrip, { member: member }), _jsxs("div", { className: "flex flex-col gap-6", children: [_jsx(UserDetailTabs, { member: member }), _jsx("div", { className: "min-w-0", children: _jsx(Outlet, { context: context }) }, member.id)] })] })] }));
|
|
101
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The nested router for one member, mounted by the plugin at `/users/:id/*`.
|
|
3
|
+
* Mirrors `IdentityRouter`: a single element owning its own `<Routes>`, with
|
|
4
|
+
* the shared layout wrapping the tab pages and providing the member via Outlet
|
|
5
|
+
* context.
|
|
6
|
+
*
|
|
7
|
+
* The Audit (Sessions, Activity) and Access tabs are permission-gated at the
|
|
8
|
+
* route level — without the permission the route redirects to General, so a
|
|
9
|
+
* deep link or stale bookmark can't reach a tab the side rail hides. The
|
|
10
|
+
* Preferences tab is **self-only** — it is the current user's own app
|
|
11
|
+
* preferences (theme), so it is gated on the viewed profile being the caller's
|
|
12
|
+
* own, and redirects to General on anyone else's profile. The index redirects
|
|
13
|
+
* to General as the default tab.
|
|
14
|
+
*/
|
|
15
|
+
export declare function UserDetailRouter(): import("react").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/UserDetailRouter/index.tsx"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,gCA2D/B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Navigate, Route, Routes, useParams } from 'react-router-dom';
|
|
3
|
+
import { AuthStatus, useAuth, useHasPermission } from '@orthacms/identity-admin';
|
|
4
|
+
import { UserDetailLayout } from '../UserDetailLayout';
|
|
5
|
+
import { UserGeneralPage } from '../../pages/UserGeneralPage';
|
|
6
|
+
import { UserRolesPage } from '../../pages/UserRolesPage';
|
|
7
|
+
import { UserWorkspacesPage } from '../../pages/UserWorkspacesPage';
|
|
8
|
+
import { UserSessionsPage } from '../../pages/UserSessionsPage';
|
|
9
|
+
import { UserActivityPage } from '../../pages/UserActivityPage';
|
|
10
|
+
import { UserAccessPage } from '../../pages/UserAccessPage';
|
|
11
|
+
import { UserPreferencesPage } from '../../pages/UserPreferencesPage';
|
|
12
|
+
/**
|
|
13
|
+
* The nested router for one member, mounted by the plugin at `/users/:id/*`.
|
|
14
|
+
* Mirrors `IdentityRouter`: a single element owning its own `<Routes>`, with
|
|
15
|
+
* the shared layout wrapping the tab pages and providing the member via Outlet
|
|
16
|
+
* context.
|
|
17
|
+
*
|
|
18
|
+
* The Audit (Sessions, Activity) and Access tabs are permission-gated at the
|
|
19
|
+
* route level — without the permission the route redirects to General, so a
|
|
20
|
+
* deep link or stale bookmark can't reach a tab the side rail hides. The
|
|
21
|
+
* Preferences tab is **self-only** — it is the current user's own app
|
|
22
|
+
* preferences (theme), so it is gated on the viewed profile being the caller's
|
|
23
|
+
* own, and redirects to General on anyone else's profile. The index redirects
|
|
24
|
+
* to General as the default tab.
|
|
25
|
+
*/
|
|
26
|
+
export function UserDetailRouter() {
|
|
27
|
+
const canManage = useHasPermission('users:update');
|
|
28
|
+
const canReadActivity = useHasPermission('activity:read');
|
|
29
|
+
const { id } = useParams();
|
|
30
|
+
const auth = useAuth();
|
|
31
|
+
const isSelf = auth.status === AuthStatus.Authenticated && auth.user.id === id;
|
|
32
|
+
return (_jsx(Routes, { children: _jsxs(Route, { element: _jsx(UserDetailLayout, {}), children: [_jsx(Route, { index: true, element: _jsx(Navigate, { to: "general", replace: true }) }), _jsx(Route, { path: "general", element: _jsx(UserGeneralPage, {}) }), _jsx(Route, { path: "roles", element: _jsx(UserRolesPage, {}) }), _jsx(Route, { path: "workspaces", element: _jsx(UserWorkspacesPage, {}) }), _jsx(Route, { path: "sessions", element: canManage ? (_jsx(UserSessionsPage, {})) : (_jsx(Navigate, { to: "../general", replace: true })) }), _jsx(Route, { path: "activity", element: canReadActivity ? (_jsx(UserActivityPage, {})) : (_jsx(Navigate, { to: "../general", replace: true })) }), _jsx(Route, { path: "access", element: canManage ? (_jsx(UserAccessPage, {})) : (_jsx(Navigate, { to: "../general", replace: true })) }), _jsx(Route, { path: "preferences", element: isSelf ? (_jsx(UserPreferencesPage, {})) : (_jsx(Navigate, { to: "../general", replace: true })) }), _jsx(Route, { path: "*", element: _jsx(Navigate, { to: "general", replace: true }) })] }) }));
|
|
33
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MemberWorkspace } from '../../../domain/types/member';
|
|
2
|
+
/**
|
|
3
|
+
* One workspace the member belongs to: its tinted mark, name, and (when the
|
|
4
|
+
* viewer can manage members) a Remove action. Removal is confirmed by the
|
|
5
|
+
* parent page, so this card just signals intent.
|
|
6
|
+
*/
|
|
7
|
+
export declare function WorkspaceMembershipCard({ workspace, onRemove, removing }: {
|
|
8
|
+
/** The workspace membership to render. */
|
|
9
|
+
workspace: MemberWorkspace;
|
|
10
|
+
/** Remove handler; omit to hide the action (read-only). */
|
|
11
|
+
onRemove?: (workspace: MemberWorkspace) => void;
|
|
12
|
+
/** Whether a removal for this workspace is in flight. */
|
|
13
|
+
removing?: boolean;
|
|
14
|
+
}): import("react").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/WorkspaceMembershipCard/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAcpE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,QAAgB,EACnB,EAAE;IACC,0CAA0C;IAC1C,SAAS,EAAE,eAAe,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,+BA2CA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { Trash2 } from 'lucide-react';
|
|
4
|
+
import { Button, Card, CardContent, Spinner } from '@orthacms/design-system';
|
|
5
|
+
import { MemberAvatar } from '../MemberAvatar';
|
|
6
|
+
/** Intl descriptors for {@link WorkspaceMembershipCard}. */
|
|
7
|
+
const messages = defineMessages({
|
|
8
|
+
remove: {
|
|
9
|
+
id: 'users.workspaces.remove',
|
|
10
|
+
defaultMessage: 'Remove'
|
|
11
|
+
},
|
|
12
|
+
removeLabel: {
|
|
13
|
+
id: 'users.workspaces.removeLabel',
|
|
14
|
+
defaultMessage: 'Remove from {name}'
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* One workspace the member belongs to: its tinted mark, name, and (when the
|
|
19
|
+
* viewer can manage members) a Remove action. Removal is confirmed by the
|
|
20
|
+
* parent page, so this card just signals intent.
|
|
21
|
+
*/
|
|
22
|
+
export function WorkspaceMembershipCard({ workspace, onRemove, removing = false }) {
|
|
23
|
+
const intl = useIntl();
|
|
24
|
+
return (_jsx(Card, { children: _jsxs(CardContent, { className: "flex items-center gap-3 pt-6", children: [_jsx(MemberAvatar, { initials: workspace.initials, color: workspace.color, className: "size-9 shrink-0 text-xs" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: workspace.name }), workspace.description ? (_jsx("p", { className: "line-clamp-3 text-xs text-muted-foreground", children: workspace.description })) : null] }), onRemove ? (_jsxs(Button, { variant: "ghost", size: "sm", className: "text-muted-foreground", disabled: removing, "aria-label": intl.formatMessage(messages.removeLabel, {
|
|
25
|
+
name: workspace.name
|
|
26
|
+
}), onClick: () => onRemove(workspace), children: [removing ? (_jsx(Spinner, {})) : (_jsx(Trash2, { "aria-hidden": true, className: "size-4" })), intl.formatMessage(messages.remove)] })) : null] }) }));
|
|
27
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FilterField } from '@orthacms/query-builder-admin';
|
|
2
|
+
/**
|
|
3
|
+
* The members filter surface the query builder offers. A static mirror of the
|
|
4
|
+
* server's `USERS_FILTER_SCHEMA` — each `id` matches a whitelisted field (the
|
|
5
|
+
* `role.key` dotted path resolves to the BE's `role` relation), so a rule built
|
|
6
|
+
* here always validates server-side. `status` / `role` render as dropdowns; the
|
|
7
|
+
* BE still accepts any role key string, the UI just offers the system roles.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MEMBERS_FILTER_FIELDS: readonly FilterField[];
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/presentation/membersFilterFields/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAoC7E;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,WAAW,EAwBvD,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { defineMessages } from 'react-intl';
|
|
2
|
+
import { FIELD_TYPE } from '@orthacms/query-builder-admin';
|
|
3
|
+
/**
|
|
4
|
+
* Field + enum-option labels for the members query builder, co-located per the
|
|
5
|
+
* admin i18n convention. Display only — the `id`s and enum `value`s travel on
|
|
6
|
+
* the wire.
|
|
7
|
+
*/
|
|
8
|
+
const messages = defineMessages({
|
|
9
|
+
email: { id: 'users.filter.email', defaultMessage: 'Email' },
|
|
10
|
+
name: { id: 'users.filter.name', defaultMessage: 'Name' },
|
|
11
|
+
status: { id: 'users.filter.status', defaultMessage: 'Status' },
|
|
12
|
+
role: { id: 'users.filter.role', defaultMessage: 'Role' },
|
|
13
|
+
createdAt: { id: 'users.filter.createdAt', defaultMessage: 'Joined' },
|
|
14
|
+
statusPending: {
|
|
15
|
+
id: 'users.filter.status.pending',
|
|
16
|
+
defaultMessage: 'Pending'
|
|
17
|
+
},
|
|
18
|
+
statusActive: {
|
|
19
|
+
id: 'users.filter.status.active',
|
|
20
|
+
defaultMessage: 'Active'
|
|
21
|
+
},
|
|
22
|
+
statusDisabled: {
|
|
23
|
+
id: 'users.filter.status.disabled',
|
|
24
|
+
defaultMessage: 'Disabled'
|
|
25
|
+
},
|
|
26
|
+
roleAdmin: {
|
|
27
|
+
id: 'users.filter.role.admin',
|
|
28
|
+
defaultMessage: 'Administrator'
|
|
29
|
+
},
|
|
30
|
+
roleContributor: {
|
|
31
|
+
id: 'users.filter.role.contributor',
|
|
32
|
+
defaultMessage: 'Contributor'
|
|
33
|
+
},
|
|
34
|
+
roleViewer: { id: 'users.filter.role.viewer', defaultMessage: 'Viewer' }
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* The members filter surface the query builder offers. A static mirror of the
|
|
38
|
+
* server's `USERS_FILTER_SCHEMA` — each `id` matches a whitelisted field (the
|
|
39
|
+
* `role.key` dotted path resolves to the BE's `role` relation), so a rule built
|
|
40
|
+
* here always validates server-side. `status` / `role` render as dropdowns; the
|
|
41
|
+
* BE still accepts any role key string, the UI just offers the system roles.
|
|
42
|
+
*/
|
|
43
|
+
export const MEMBERS_FILTER_FIELDS = [
|
|
44
|
+
{ id: 'email', label: messages.email, type: FIELD_TYPE.String },
|
|
45
|
+
{ id: 'name', label: messages.name, type: FIELD_TYPE.String },
|
|
46
|
+
{
|
|
47
|
+
id: 'status',
|
|
48
|
+
label: messages.status,
|
|
49
|
+
type: FIELD_TYPE.Enum,
|
|
50
|
+
enumValues: [
|
|
51
|
+
{ value: 'pending', label: messages.statusPending },
|
|
52
|
+
{ value: 'active', label: messages.statusActive },
|
|
53
|
+
{ value: 'disabled', label: messages.statusDisabled }
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'role.key',
|
|
58
|
+
label: messages.role,
|
|
59
|
+
type: FIELD_TYPE.Enum,
|
|
60
|
+
enumValues: [
|
|
61
|
+
{ value: 'admin', label: messages.roleAdmin },
|
|
62
|
+
{ value: 'contributor', label: messages.roleContributor },
|
|
63
|
+
{ value: 'viewer', label: messages.roleViewer }
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{ id: 'createdAt', label: messages.createdAt, type: FIELD_TYPE.Date }
|
|
67
|
+
];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The id of the roster's focus anchor — the wrapper around the results region,
|
|
3
|
+
* which carries `tabIndex={-1}` so it can receive focus programmatically without
|
|
4
|
+
* becoming a tab stop.
|
|
5
|
+
*
|
|
6
|
+
* It exists because a row-removing mutation unmounts the control that opened the
|
|
7
|
+
* overlay (the row's kebab), so Radix's focus restoration has nowhere to return
|
|
8
|
+
* to and focus falls to `<body>` — restarting a keyboard user at the top of the
|
|
9
|
+
* document after every action (WCAG 2.4.3 Focus Order).
|
|
10
|
+
*
|
|
11
|
+
* It wraps **all four** result states (skeleton / error / empty / table), not the
|
|
12
|
+
* table alone. Revoking the last row on screen swaps the table for the empty
|
|
13
|
+
* state, so an anchor that lived on the table would unmount at exactly the moment
|
|
14
|
+
* it was needed — which is the one case where focus was still being dropped.
|
|
15
|
+
*/
|
|
16
|
+
export declare const MEMBERS_RESULTS_ANCHOR_ID = "members-results";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/presentation/membersResultsAnchor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,yBAAyB,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The id of the roster's focus anchor — the wrapper around the results region,
|
|
3
|
+
* which carries `tabIndex={-1}` so it can receive focus programmatically without
|
|
4
|
+
* becoming a tab stop.
|
|
5
|
+
*
|
|
6
|
+
* It exists because a row-removing mutation unmounts the control that opened the
|
|
7
|
+
* overlay (the row's kebab), so Radix's focus restoration has nowhere to return
|
|
8
|
+
* to and focus falls to `<body>` — restarting a keyboard user at the top of the
|
|
9
|
+
* document after every action (WCAG 2.4.3 Focus Order).
|
|
10
|
+
*
|
|
11
|
+
* It wraps **all four** result states (skeleton / error / empty / table), not the
|
|
12
|
+
* table alone. Revoking the last row on screen swaps the table for the empty
|
|
13
|
+
* state, so an anchor that lived on the table would unmount at exactly the moment
|
|
14
|
+
* it was needed — which is the one case where focus was still being dropped.
|
|
15
|
+
*/
|
|
16
|
+
export const MEMBERS_RESULTS_ANCHOR_ID = 'members-results';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-page, three-step invite wizard (Details → Role → Workspaces) at
|
|
3
|
+
* `/users/invite`, on the design-system wizard chrome. Gated on `users:create`
|
|
4
|
+
* — the server enforces the same — so a user without it is redirected.
|
|
5
|
+
*/
|
|
6
|
+
export declare function InviteMemberPage(): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/pages/InviteMemberPage/index.tsx"],"names":[],"mappings":"AAkQA;;;;GAIG;AACH,wBAAgB,gBAAgB,gCA6iB/B"}
|