@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,60 @@
|
|
|
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 { Link } from 'react-router-dom';
|
|
5
|
+
import { CircleCheck } from 'lucide-react';
|
|
6
|
+
import { useUnsavedChanges } from '@orthacms/utils-admin';
|
|
7
|
+
import { Button, CardContent, CardDescription, CardHeader, CardTitle, WizardStepCard } from '@orthacms/design-system';
|
|
8
|
+
import { InviteLinkPanel } from '../InviteLinkPanel';
|
|
9
|
+
/** Intl descriptors for {@link InviteSent}, co-located with the component. */
|
|
10
|
+
const messages = defineMessages({
|
|
11
|
+
title: {
|
|
12
|
+
id: 'users.inviteSent.title',
|
|
13
|
+
defaultMessage: 'Invite created for {email}'
|
|
14
|
+
},
|
|
15
|
+
description: {
|
|
16
|
+
id: 'users.inviteSent.description',
|
|
17
|
+
defaultMessage: 'Their account exists but is dormant until they accept. Nothing was emailed — this install has no mail server yet — so pass the link below to them yourself.'
|
|
18
|
+
},
|
|
19
|
+
nextTitle: {
|
|
20
|
+
id: 'users.inviteSent.nextTitle',
|
|
21
|
+
defaultMessage: 'What happens when they open it'
|
|
22
|
+
},
|
|
23
|
+
nextOpen: {
|
|
24
|
+
id: 'users.inviteSent.nextOpen',
|
|
25
|
+
defaultMessage: 'They land on a page that already knows their name and email — the only thing they choose is a password.'
|
|
26
|
+
},
|
|
27
|
+
nextRole: {
|
|
28
|
+
id: 'users.inviteSent.nextRole',
|
|
29
|
+
defaultMessage: 'Their account activates with the {role} role and the workspace access you picked. Nothing they type can change either.'
|
|
30
|
+
},
|
|
31
|
+
nextSignedIn: {
|
|
32
|
+
id: 'users.inviteSent.nextSignedIn',
|
|
33
|
+
defaultMessage: 'They’re signed in immediately, and the link stops working. If it expires first, resend the invite from their row.'
|
|
34
|
+
},
|
|
35
|
+
backToMembers: {
|
|
36
|
+
id: 'users.inviteSent.backToMembers',
|
|
37
|
+
defaultMessage: 'Back to members'
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* The invite wizard's final step: the invite exists, and here is the link.
|
|
42
|
+
*
|
|
43
|
+
* It is a step rather than a toast-then-redirect because the link is shown
|
|
44
|
+
* **once** — the server keeps only its hash, so navigating away before copying
|
|
45
|
+
* it means resending the invite. The copy spells out what the invitee will see,
|
|
46
|
+
* since the admin can't preview the page they're sending someone to.
|
|
47
|
+
*/
|
|
48
|
+
export function InviteSent({ email, link, roleLabel }) {
|
|
49
|
+
const intl = useIntl();
|
|
50
|
+
const [copied, setCopied] = useState(false);
|
|
51
|
+
// Until the link is captured, treat leaving this step as losing unsaved
|
|
52
|
+
// work — because it is: the token exists only in this component's state and
|
|
53
|
+
// is never re-fetchable. The app-wide guard covers every exit (links,
|
|
54
|
+
// programmatic navigation, and reload via `beforeunload`), which is the
|
|
55
|
+
// only one a component here could not intercept for itself.
|
|
56
|
+
useUnsavedChanges(!copied, 'users.invite.link');
|
|
57
|
+
return (_jsxs(WizardStepCard, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { asChild: true, className: "flex items-center gap-2", children: _jsxs("h2", { children: [_jsx(CircleCheck, { "aria-hidden": true, className: "size-5 shrink-0 text-success-soft-foreground" }), intl.formatMessage(messages.title, { email })] }) }), _jsx(CardDescription, { children: intl.formatMessage(messages.description) })] }), _jsxs(CardContent, { className: "flex flex-col gap-8", children: [_jsx(InviteLinkPanel, { link: link, email: email, onCopied: () => setCopied(true) }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("h3", { className: "text-sm font-medium", children: intl.formatMessage(messages.nextTitle) }), _jsxs("ul", { className: "flex list-disc flex-col gap-2 pl-5 text-sm text-muted-foreground", children: [_jsx("li", { children: intl.formatMessage(messages.nextOpen) }), _jsx("li", { children: intl.formatMessage(messages.nextRole, {
|
|
58
|
+
role: roleLabel
|
|
59
|
+
}) }), _jsx("li", { children: intl.formatMessage(messages.nextSignedIn) })] })] }), _jsx(Button, { asChild: true, className: "self-start", children: _jsx(Link, { to: "/users", children: intl.formatMessage(messages.backToMembers) }) })] })] }));
|
|
60
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
import { type AvatarColor } from '@orthacms/design-system';
|
|
3
|
+
type MemberAvatarProps = {
|
|
4
|
+
/** Initials rendered as the avatar content. */
|
|
5
|
+
initials: string;
|
|
6
|
+
/** Accent color tinting the avatar background. */
|
|
7
|
+
color: AvatarColor;
|
|
8
|
+
/** Extra classes (size, border). */
|
|
9
|
+
className?: string;
|
|
10
|
+
/** Extra inline styles (e.g. overlap margin in a stack). */
|
|
11
|
+
style?: CSSProperties;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* An initials avatar tinted with one of the shared accent colors — members in
|
|
15
|
+
* the table, and the smaller workspace chips in the Workspaces column, both
|
|
16
|
+
* sized via `className`. Shape comes from the design-system `Avatar` default
|
|
17
|
+
* (rounded square). Purely decorative: the member/workspace
|
|
18
|
+
* name is always rendered as adjacent text (or an `aria-label` on the
|
|
19
|
+
* enclosing control), so the initials are hidden from assistive tech to avoid
|
|
20
|
+
* a meaningless "J D A B" reading.
|
|
21
|
+
*/
|
|
22
|
+
export declare function MemberAvatar({ initials, color, className, style }: MemberAvatarProps): import("react").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/MemberAvatar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAKH,KAAK,WAAW,EACnB,MAAM,yBAAyB,CAAC;AAEjC,KAAK,iBAAiB,GAAG;IACrB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,KAAK,EAAE,WAAW,CAAC;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EACzB,QAAQ,EACR,KAAK,EACL,SAAS,EACT,KAAK,EACR,EAAE,iBAAiB,+BAYnB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Avatar, AvatarFallback, avatarColorVar, cn } from '@orthacms/design-system';
|
|
3
|
+
/**
|
|
4
|
+
* An initials avatar tinted with one of the shared accent colors — members in
|
|
5
|
+
* the table, and the smaller workspace chips in the Workspaces column, both
|
|
6
|
+
* sized via `className`. Shape comes from the design-system `Avatar` default
|
|
7
|
+
* (rounded square). Purely decorative: the member/workspace
|
|
8
|
+
* name is always rendered as adjacent text (or an `aria-label` on the
|
|
9
|
+
* enclosing control), so the initials are hidden from assistive tech to avoid
|
|
10
|
+
* a meaningless "J D A B" reading.
|
|
11
|
+
*/
|
|
12
|
+
export function MemberAvatar({ initials, color, className, style }) {
|
|
13
|
+
return (_jsx(Avatar, { "aria-hidden": true, className: cn(className), style: { backgroundColor: avatarColorVar(color), ...style }, children: _jsx(AvatarFallback, { className: "rounded-[inherit] bg-transparent font-semibold text-white", children: initials }) }));
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type MembersEmptyProps = {
|
|
2
|
+
/** Whether a search is currently narrowing the list. */
|
|
3
|
+
filtered: boolean;
|
|
4
|
+
/** Clears the search. */
|
|
5
|
+
onClear: () => void;
|
|
6
|
+
/** Opens the invite flow. Omitted when the user lacks `users:create`. */
|
|
7
|
+
onInvite?: () => void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* The empty state under the toolbar. A search miss offers to clear the
|
|
11
|
+
* search; a genuinely empty roster invites the first member (when the
|
|
12
|
+
* signed-in user may invite).
|
|
13
|
+
*/
|
|
14
|
+
export declare function MembersEmpty({ filtered, onClear, onInvite }: MembersEmptyProps): import("react").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/MembersEmpty/index.tsx"],"names":[],"mappings":"AAwCA,KAAK,iBAAiB,GAAG;IACrB,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EACzB,QAAQ,EACR,OAAO,EACP,QAAQ,EACX,EAAE,iBAAiB,+BAwCnB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { UserPlus, Users } from 'lucide-react';
|
|
4
|
+
import { Button, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from '@orthacms/design-system';
|
|
5
|
+
/** Intl descriptors for {@link MembersEmpty}, co-located with the component. */
|
|
6
|
+
const messages = defineMessages({
|
|
7
|
+
filteredTitle: {
|
|
8
|
+
id: 'users.empty.filtered.title',
|
|
9
|
+
defaultMessage: 'No members match'
|
|
10
|
+
},
|
|
11
|
+
filteredDescription: {
|
|
12
|
+
id: 'users.empty.filtered.description',
|
|
13
|
+
defaultMessage: 'Try a different name or email, or clear the search.'
|
|
14
|
+
},
|
|
15
|
+
clear: {
|
|
16
|
+
id: 'users.empty.clear',
|
|
17
|
+
defaultMessage: 'Clear search'
|
|
18
|
+
},
|
|
19
|
+
emptyTitle: {
|
|
20
|
+
id: 'users.empty.none.title',
|
|
21
|
+
defaultMessage: 'No members yet'
|
|
22
|
+
},
|
|
23
|
+
emptyDescription: {
|
|
24
|
+
id: 'users.empty.none.description',
|
|
25
|
+
defaultMessage: 'Invite the first member to give them access.'
|
|
26
|
+
},
|
|
27
|
+
invite: {
|
|
28
|
+
id: 'users.empty.invite',
|
|
29
|
+
defaultMessage: 'Invite member'
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* The empty state under the toolbar. A search miss offers to clear the
|
|
34
|
+
* search; a genuinely empty roster invites the first member (when the
|
|
35
|
+
* signed-in user may invite).
|
|
36
|
+
*/
|
|
37
|
+
export function MembersEmpty({ filtered, onClear, onInvite }) {
|
|
38
|
+
const intl = useIntl();
|
|
39
|
+
return (_jsxs(Empty, { className: "border", children: [_jsxs(EmptyHeader, { children: [_jsx(EmptyMedia, { variant: "icon", children: _jsx(Users, {}) }), _jsx(EmptyTitle, { children: intl.formatMessage(filtered ? messages.filteredTitle : messages.emptyTitle) }), _jsx(EmptyDescription, { children: intl.formatMessage(filtered
|
|
40
|
+
? messages.filteredDescription
|
|
41
|
+
: messages.emptyDescription) })] }), _jsx(EmptyContent, { children: filtered ? (_jsx(Button, { variant: "outline", className: "shadow-none", onClick: onClear, children: intl.formatMessage(messages.clear) })) : onInvite ? (_jsxs(Button, { onClick: onInvite, children: [_jsx(UserPlus, {}), intl.formatMessage(messages.invite)] })) : null })] }));
|
|
42
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shown in place of the Members page when the signed-in user lacks
|
|
3
|
+
* `users:read` — the route still resolves, but no member data is fetched or
|
|
4
|
+
* rendered (and the server would refuse it regardless).
|
|
5
|
+
*/
|
|
6
|
+
export declare function MembersNoAccess(): 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/components/MembersNoAccess/index.tsx"],"names":[],"mappings":"AAuBA;;;;GAIG;AACH,wBAAgB,eAAe,gCAgB9B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { Lock } from 'lucide-react';
|
|
4
|
+
import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from '@orthacms/design-system';
|
|
5
|
+
/** Intl descriptors for {@link MembersNoAccess}, co-located with the component. */
|
|
6
|
+
const messages = defineMessages({
|
|
7
|
+
title: {
|
|
8
|
+
id: 'users.noAccess.title',
|
|
9
|
+
defaultMessage: 'You don’t have access to members'
|
|
10
|
+
},
|
|
11
|
+
description: {
|
|
12
|
+
id: 'users.noAccess.description',
|
|
13
|
+
defaultMessage: 'Viewing members requires the users:read permission. Ask an admin if you think you should have it.'
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Shown in place of the Members page when the signed-in user lacks
|
|
18
|
+
* `users:read` — the route still resolves, but no member data is fetched or
|
|
19
|
+
* rendered (and the server would refuse it regardless).
|
|
20
|
+
*/
|
|
21
|
+
export function MembersNoAccess() {
|
|
22
|
+
const intl = useIntl();
|
|
23
|
+
return (_jsx(Empty, { className: "border", children: _jsxs(EmptyHeader, { children: [_jsx(EmptyMedia, { variant: "icon", children: _jsx(Lock, {}) }), _jsx(EmptyTitle, { children: intl.formatMessage(messages.title) }), _jsx(EmptyDescription, { children: intl.formatMessage(messages.description) })] }) }));
|
|
24
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** The selectable page sizes, smallest first. The server caps at the largest. */
|
|
2
|
+
export declare const PAGE_SIZE_OPTIONS: number[];
|
|
3
|
+
/**
|
|
4
|
+
* The table's footer bar: a rows-per-page selector and an "{from}–{to} of
|
|
5
|
+
* {total}" readout, with previous/next controls once there's more than one
|
|
6
|
+
* page. Real buttons (not link-styled anchors) since page state is client
|
|
7
|
+
* state, not a URL — they disable cleanly at either end.
|
|
8
|
+
*/
|
|
9
|
+
export declare function MembersPagination({ page, pageCount, pageSize, total, onPageChange, onPageSizeChange }: {
|
|
10
|
+
page: number;
|
|
11
|
+
pageCount: number;
|
|
12
|
+
pageSize: number;
|
|
13
|
+
total: number;
|
|
14
|
+
onPageChange: (page: number) => void;
|
|
15
|
+
onPageSizeChange: (pageSize: number) => void;
|
|
16
|
+
}): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/MembersPagination/index.tsx"],"names":[],"mappings":"AAuCA,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,UAAmB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,gBAAgB,EACnB,EAAE;IACC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD,+BAmFA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { ChevronLeft, ChevronRight } from 'lucide-react';
|
|
4
|
+
import { Button, Pagination, PaginationContent, PaginationItem, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@orthacms/design-system';
|
|
5
|
+
/** Intl descriptors for {@link MembersPagination}, co-located with the component. */
|
|
6
|
+
const messages = defineMessages({
|
|
7
|
+
rowsPerPage: {
|
|
8
|
+
id: 'users.pagination.rowsPerPage',
|
|
9
|
+
defaultMessage: 'Rows per page'
|
|
10
|
+
},
|
|
11
|
+
range: {
|
|
12
|
+
id: 'users.pagination.range',
|
|
13
|
+
defaultMessage: '{from}–{to} of {total}'
|
|
14
|
+
},
|
|
15
|
+
previous: {
|
|
16
|
+
id: 'users.pagination.previous',
|
|
17
|
+
defaultMessage: 'Previous page'
|
|
18
|
+
},
|
|
19
|
+
next: {
|
|
20
|
+
id: 'users.pagination.next',
|
|
21
|
+
defaultMessage: 'Next page'
|
|
22
|
+
},
|
|
23
|
+
page: {
|
|
24
|
+
id: 'users.pagination.page',
|
|
25
|
+
defaultMessage: 'Page {page} of {pageCount}'
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
/** The selectable page sizes, smallest first. The server caps at the largest. */
|
|
29
|
+
export const PAGE_SIZE_OPTIONS = [5, 10, 25, 100];
|
|
30
|
+
/**
|
|
31
|
+
* The table's footer bar: a rows-per-page selector and an "{from}–{to} of
|
|
32
|
+
* {total}" readout, with previous/next controls once there's more than one
|
|
33
|
+
* page. Real buttons (not link-styled anchors) since page state is client
|
|
34
|
+
* state, not a URL — they disable cleanly at either end.
|
|
35
|
+
*/
|
|
36
|
+
export function MembersPagination({ page, pageCount, pageSize, total, onPageChange, onPageSizeChange }) {
|
|
37
|
+
const intl = useIntl();
|
|
38
|
+
const rowsLabel = intl.formatMessage(messages.rowsPerPage);
|
|
39
|
+
const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
|
|
40
|
+
const to = Math.min(page * pageSize, total);
|
|
41
|
+
return (_jsxs("div", { className: "mt-4 flex flex-wrap items-center justify-between gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: rowsLabel }), _jsxs(Select, { value: String(pageSize), onValueChange: (value) => onPageSizeChange(Number(value)), children: [_jsx(SelectTrigger, { className: "h-8 w-[72px] rounded-lg shadow-none", "aria-label": rowsLabel, children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { className: "rounded-lg shadow-none", children: _jsx(SelectGroup, { children: PAGE_SIZE_OPTIONS.map((size) => (_jsx(SelectItem, { value: String(size), children: size }, size))) }) })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: intl.formatMessage(messages.range, { from, to, total }) }), pageCount > 1 ? (_jsx(Pagination, { className: "mx-0 w-auto", children: _jsxs(PaginationContent, { className: "gap-3", children: [_jsx(PaginationItem, { children: _jsx(Button, { variant: "outline", size: "icon", className: "size-8 shadow-none", disabled: page <= 1, onClick: () => onPageChange(page - 1), "aria-label": intl.formatMessage(messages.previous), children: _jsx(ChevronLeft, {}) }) }), _jsx(PaginationItem, { children: _jsx("span", { className: "text-sm text-muted-foreground", children: intl.formatMessage(messages.page, {
|
|
42
|
+
page,
|
|
43
|
+
pageCount
|
|
44
|
+
}) }) }), _jsx(PaginationItem, { children: _jsx(Button, { variant: "outline", size: "icon", className: "size-8 shadow-none", disabled: page >= pageCount, onClick: () => onPageChange(page + 1), "aria-label": intl.formatMessage(messages.next), children: _jsx(ChevronRight, {}) }) })] }) })) : null] })] }));
|
|
45
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section placeholder shown while {@link useWorkspaceOptions} resolves in the
|
|
3
|
+
* invite wizard's "assign workspaces" step — two mode tiles over a short list of
|
|
4
|
+
* option rows. Replaces the inline spinner so the step keeps its shape while the
|
|
5
|
+
* list loads. Owns a single `role="status"`; the tiles are `aria-hidden`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function WorkspaceOptionsSkeleton({ rows }: {
|
|
8
|
+
rows?: number;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
/**
|
|
11
|
+
* The members-table placeholder shown while {@link useMembers} resolves. Built
|
|
12
|
+
* from the real `Table` primitives so column widths and the header match the
|
|
13
|
+
* loaded table exactly (no reflow on swap). Drops into the page body in place
|
|
14
|
+
* of the table (header + toolbar stay live), so it owns the single
|
|
15
|
+
* `role="status"` announcement; the table itself is `aria-hidden`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function MembersTableSkeleton({ rows }: {
|
|
18
|
+
rows?: number;
|
|
19
|
+
}): import("react").JSX.Element;
|
|
20
|
+
/**
|
|
21
|
+
* Full-page placeholder for the lazy-route `Suspense` fallback — before
|
|
22
|
+
* {@link MembersPage} mounts there is no header or toolbar yet, so this sketches
|
|
23
|
+
* the whole page (header, search toolbar, table) to hold the layout steady
|
|
24
|
+
* while the chunk loads. Reuses {@link MembersTableSkeleton} for the body.
|
|
25
|
+
*/
|
|
26
|
+
export declare function MembersPageSkeleton(): import("react").JSX.Element;
|
|
27
|
+
/**
|
|
28
|
+
* Lazy-route `Suspense` fallback for {@link InviteMemberPage}. Wraps the shared
|
|
29
|
+
* {@link WizardPageSkeleton} so the `sr-only` status stays localized.
|
|
30
|
+
*/
|
|
31
|
+
export declare function InviteMemberPageSkeleton(): import("react").JSX.Element;
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/MembersSkeleton/index.tsx"],"names":[],"mappings":"AAiCA;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,IAAQ,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BA0BvE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,IAAQ,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAmEnE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,gCAgClC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,gCAMvC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { Container, Skeleton, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, WizardPageSkeleton } from '@orthacms/design-system';
|
|
4
|
+
/** Intl descriptors for the members skeletons, co-located here. */
|
|
5
|
+
const messages = defineMessages({
|
|
6
|
+
heading: {
|
|
7
|
+
id: 'users.skeleton.heading',
|
|
8
|
+
defaultMessage: 'Loading members'
|
|
9
|
+
},
|
|
10
|
+
loading: {
|
|
11
|
+
id: 'users.skeleton.loading',
|
|
12
|
+
defaultMessage: 'Loading members…'
|
|
13
|
+
},
|
|
14
|
+
loadingForm: {
|
|
15
|
+
id: 'users.skeleton.loadingForm',
|
|
16
|
+
defaultMessage: 'Loading…'
|
|
17
|
+
},
|
|
18
|
+
loadingWorkspaces: {
|
|
19
|
+
id: 'users.skeleton.loadingWorkspaces',
|
|
20
|
+
defaultMessage: 'Loading workspaces…'
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Section placeholder shown while {@link useWorkspaceOptions} resolves in the
|
|
25
|
+
* invite wizard's "assign workspaces" step — two mode tiles over a short list of
|
|
26
|
+
* option rows. Replaces the inline spinner so the step keeps its shape while the
|
|
27
|
+
* list loads. Owns a single `role="status"`; the tiles are `aria-hidden`.
|
|
28
|
+
*/
|
|
29
|
+
export function WorkspaceOptionsSkeleton({ rows = 3 }) {
|
|
30
|
+
const intl = useIntl();
|
|
31
|
+
return (_jsxs("div", { role: "status", children: [_jsx("span", { className: "sr-only", children: intl.formatMessage(messages.loadingWorkspaces) }), _jsxs("div", { "aria-hidden": true, className: "flex flex-col gap-3", children: [_jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [_jsx(Skeleton, { className: "h-20 w-full rounded-xl" }), _jsx(Skeleton, { className: "h-20 w-full rounded-xl" })] }), Array.from({ length: rows }).map((_, index) => (_jsxs("div", { className: "flex items-center gap-3 rounded-xl border p-3", children: [_jsx(Skeleton, { className: "size-8 shrink-0 rounded-xl" }), _jsx(Skeleton, { className: "h-4 w-40" }), _jsx(Skeleton, { className: "ml-auto size-5 rounded" })] }, index)))] })] }));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The members-table placeholder shown while {@link useMembers} resolves. Built
|
|
35
|
+
* from the real `Table` primitives so column widths and the header match the
|
|
36
|
+
* loaded table exactly (no reflow on swap). Drops into the page body in place
|
|
37
|
+
* of the table (header + toolbar stay live), so it owns the single
|
|
38
|
+
* `role="status"` announcement; the table itself is `aria-hidden`.
|
|
39
|
+
*/
|
|
40
|
+
export function MembersTableSkeleton({ rows = 5 }) {
|
|
41
|
+
const intl = useIntl();
|
|
42
|
+
return (_jsxs("div", { role: "status", children: [_jsx("span", { className: "sr-only", children: intl.formatMessage(messages.loading) }), _jsx("div", { "aria-hidden": true, className: "rounded-xl border", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: _jsx(Skeleton, { className: "h-4 w-16" }) }), _jsx(TableHead, { children: _jsx(Skeleton, { className: "h-4 w-10" }) }), _jsx(TableHead, { children: _jsx(Skeleton, { className: "h-4 w-12" }) }), _jsx(TableHead, { children: _jsx(Skeleton, { className: "h-4 w-20" }) }), _jsx(TableHead, { children: _jsx(Skeleton, { className: "h-4 w-12" }) }), _jsx(TableHead, { className: "w-12" })] }) }), _jsx(TableBody, { children: Array.from({ length: rows }).map((_, index) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Skeleton, { className: "size-9 shrink-0 rounded-xl" }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Skeleton, { className: "h-3.5 w-28" }), _jsx(Skeleton, { className: "h-3 w-36" })] })] }) }), _jsx(TableCell, { children: _jsx(Skeleton, { className: "h-5 w-16 rounded-full" }) }), _jsx(TableCell, { children: _jsx(Skeleton, { className: "h-5 w-16 rounded-full" }) }), _jsx(TableCell, { children: _jsxs("div", { className: "flex -space-x-2", children: [_jsx(Skeleton, { className: "size-6 rounded-xl" }), _jsx(Skeleton, { className: "size-6 rounded-xl" })] }) }), _jsx(TableCell, { children: _jsx(Skeleton, { className: "h-4 w-20" }) }), _jsx(TableCell, { className: "text-right", children: _jsx(Skeleton, { className: "ml-auto size-8 rounded-md" }) })] }, index))) })] }) })] }));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Full-page placeholder for the lazy-route `Suspense` fallback — before
|
|
46
|
+
* {@link MembersPage} mounts there is no header or toolbar yet, so this sketches
|
|
47
|
+
* the whole page (header, search toolbar, table) to hold the layout steady
|
|
48
|
+
* while the chunk loads. Reuses {@link MembersTableSkeleton} for the body.
|
|
49
|
+
*/
|
|
50
|
+
export function MembersPageSkeleton() {
|
|
51
|
+
const intl = useIntl();
|
|
52
|
+
return (_jsxs(Container, { children: [_jsx("h1", { className: "sr-only", children: intl.formatMessage(messages.heading) }), _jsxs("div", { className: "mb-6 flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Skeleton, { className: "h-8 w-40" }), _jsx(Skeleton, { className: "h-4 w-64 max-w-full" })] }), _jsx(Skeleton, { className: "h-9 w-36 shrink-0" })] }), _jsx("div", { className: "mb-4 flex flex-wrap items-center gap-3", children: _jsx(Skeleton, { className: "h-9 w-full sm:max-w-[360px]" }) }), _jsx(MembersTableSkeleton, {})] }));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Lazy-route `Suspense` fallback for {@link InviteMemberPage}. Wraps the shared
|
|
56
|
+
* {@link WizardPageSkeleton} so the `sr-only` status stays localized.
|
|
57
|
+
*/
|
|
58
|
+
export function InviteMemberPageSkeleton() {
|
|
59
|
+
const intl = useIntl();
|
|
60
|
+
return (_jsx(WizardPageSkeleton, { label: intl.formatMessage(messages.loadingForm) }));
|
|
61
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MemberRole } from '../../../../domain/types/member';
|
|
2
|
+
/**
|
|
3
|
+
* The Role column's read-only chip: the member's role as a labelled badge.
|
|
4
|
+
* Changing a role happens through the row's edit action (and the server gates
|
|
5
|
+
* it on `users:update`), so the column itself carries no inline editor.
|
|
6
|
+
*
|
|
7
|
+
* A member holding a **custom** role has `role: null`; the chip then shows the
|
|
8
|
+
* server's own `roleName` rather than a guessed system role, so the column never
|
|
9
|
+
* misstates someone's privileges.
|
|
10
|
+
*/
|
|
11
|
+
export declare function MemberRoleChip({ role, roleName }: {
|
|
12
|
+
/** The member's system role, or `null` for a custom one. */
|
|
13
|
+
role: MemberRole | null;
|
|
14
|
+
/** The server's label, shown verbatim when `role` is `null`. */
|
|
15
|
+
roleName: string;
|
|
16
|
+
}): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/presentation/components/MembersTable/MemberRoleChip/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AA2BlE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAC3B,IAAI,EACJ,QAAQ,EACX,EAAE;IACC,4DAA4D;IAC5D,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;CACpB,+BAWA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { Badge } from '@orthacms/design-system';
|
|
4
|
+
/** Intl descriptors for {@link MemberRoleChip}, co-located with the component. */
|
|
5
|
+
const messages = defineMessages({
|
|
6
|
+
admin: {
|
|
7
|
+
id: 'users.role.admin',
|
|
8
|
+
defaultMessage: 'Admin'
|
|
9
|
+
},
|
|
10
|
+
contributor: {
|
|
11
|
+
id: 'users.role.contributor',
|
|
12
|
+
defaultMessage: 'Contributor'
|
|
13
|
+
},
|
|
14
|
+
viewer: {
|
|
15
|
+
id: 'users.role.viewer',
|
|
16
|
+
defaultMessage: 'Viewer'
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const ROLE_MESSAGE = {
|
|
20
|
+
admin: messages.admin,
|
|
21
|
+
contributor: messages.contributor,
|
|
22
|
+
viewer: messages.viewer
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The Role column's read-only chip: the member's role as a labelled badge.
|
|
26
|
+
* Changing a role happens through the row's edit action (and the server gates
|
|
27
|
+
* it on `users:update`), so the column itself carries no inline editor.
|
|
28
|
+
*
|
|
29
|
+
* A member holding a **custom** role has `role: null`; the chip then shows the
|
|
30
|
+
* server's own `roleName` rather than a guessed system role, so the column never
|
|
31
|
+
* misstates someone's privileges.
|
|
32
|
+
*/
|
|
33
|
+
export function MemberRoleChip({ role, roleName }) {
|
|
34
|
+
const intl = useIntl();
|
|
35
|
+
return (_jsx(Badge, { variant: role === 'admin' ? 'primary-soft' : 'secondary', className: "rounded-xl", children: role === null ? roleName : intl.formatMessage(ROLE_MESSAGE[role]) }));
|
|
36
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Member } from '../../../../domain/types/member';
|
|
2
|
+
/**
|
|
3
|
+
* The row-end kebab menu. It mirrors the user detail page's side rail: an
|
|
4
|
+
* **Account** group (General / Role / Workspaces) that every reader sees, then
|
|
5
|
+
* permission-gated **Audit** (Sessions / Activity) and **Access** (Sign-in
|
|
6
|
+
* access) groups — each item navigates straight to that tab. Below a separator
|
|
7
|
+
* sit the status quick actions: a pending invite offers Resend / Revoke, an
|
|
8
|
+
* active member Disable, a disabled member Enable, each shown only with its
|
|
9
|
+
* `users:*` permission. The guardrailed Disable (yourself, the sole admin)
|
|
10
|
+
* stays visible but inert with a tooltip. (Clicking the row itself also opens
|
|
11
|
+
* the member — see {@link MembersTable}.)
|
|
12
|
+
*/
|
|
13
|
+
export declare function MemberRowActions({ member }: {
|
|
14
|
+
member: Member;
|
|
15
|
+
}): 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/MembersTable/MemberRowActions/index.tsx"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAgH9D;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,+BAiW9D"}
|