/** * Default Tailwind classes for the TeamSettingsPage composer (startsim-o7s). * * Apps pass a partial override map to tint the page in their visual * identity (indigo for vault, emerald for market, etc.). Each slot covers * exactly one visual surface — section wrappers, headings, inline buttons, * error rows. */ import type { MembersTableClassNames } from '../members-table-default-class-names' import type { InviteMemberDialogClassNames } from '../invite-member-dialog-default-class-names' import type { LeaveTeamDialogClassNames } from '../leave-team-dialog-default-class-names' export interface TeamSettingsPageClassNames { /** Outer page wrapper (controls overall spacing). */ root?: string /** Header block (back link + page title + meta line). */ header?: string /** "Back to environments" or equivalent breadcrumb link. */ backLink?: string /** Page title (`Team & members`). */ title?: string /** Subtitle line under the title (company · team name). */ subtitle?: string /** Wrapper for a single page section (members / invitations / danger). */ section?: string /** Row that pairs a section heading with its primary action button. */ sectionHeader?: string /** Section H2 label (small uppercase tracking). */ sectionHeading?: string /** Body text inside a section. */ sectionBody?: string /** Border divider above the danger zone. */ dangerDivider?: string /** Inline error text (mutation failures, validation hits). */ errorText?: string /** Loading text ("Loading team…", "Loading members…"). */ loadingText?: string /** Empty-state text ("No pending invitations.", etc). */ emptyText?: string /** "Retry" button rendered next to inline errors. */ retryButton?: string /** Wrapper of the pending-invitations table. */ invitationsTableWrapper?: string /** The invitations . */ invitationsTable?: string /** Thead of the invitations table. */ invitationsThead?: string /** Th cells of the invitations table. */ invitationsTh?: string /** Tbody (divide-y normally). */ invitationsTbody?: string /** Cell containing the email column. */ invitationsEmailCell?: string /** Cell containing the role badge. */ invitationsRoleCell?: string /** Role badge style. */ invitationsRoleBadge?: string /** Cell containing the expiry. */ invitationsExpiryCell?: string /** Cell containing the revoke action. */ invitationsActionsCell?: string /** Revoke button text. */ invitationsRevokeButton?: string /** Nested className maps for the embedded shared components. */ membersTable?: MembersTableClassNames inviteDialog?: InviteMemberDialogClassNames leaveDialog?: LeaveTeamDialogClassNames } export const TEAM_SETTINGS_PAGE_DEFAULTS: Required< Omit< TeamSettingsPageClassNames, 'membersTable' | 'inviteDialog' | 'leaveDialog' > > = { root: 'space-y-8', header: '', backLink: 'text-sm text-primary hover:underline', title: 'mt-2 text-xl font-semibold text-foreground', subtitle: 'mt-1 text-sm text-muted-foreground', section: 'space-y-3', sectionHeader: 'flex items-center justify-between', sectionHeading: 'text-sm font-semibold uppercase tracking-wide text-muted-foreground', sectionBody: 'text-sm text-muted-foreground', dangerDivider: 'space-y-3 border-t border-border pt-6', errorText: 'text-sm text-destructive', loadingText: 'text-sm text-muted-foreground', emptyText: 'text-sm text-muted-foreground', retryButton: 'rounded-lg border border-border px-3 py-1.5 text-sm text-foreground transition-colors hover:bg-muted', invitationsTableWrapper: 'overflow-hidden rounded-xl border border-border bg-card', invitationsTable: 'w-full text-sm', invitationsThead: 'bg-muted/50 text-left text-xs uppercase text-muted-foreground', invitationsTh: 'px-4 py-3 font-medium', invitationsTbody: 'divide-y divide-border', invitationsEmailCell: 'px-4 py-3 text-foreground', invitationsRoleCell: 'px-4 py-3', invitationsRoleBadge: 'inline-flex items-center rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary', invitationsExpiryCell: 'px-4 py-3 text-muted-foreground', invitationsActionsCell: 'px-4 py-3 text-right', invitationsRevokeButton: 'text-sm text-destructive hover:underline', }