# Members

List members, edit roles, manage domain access and pending invitations.

Import: @slices.sh/auth/headless

Public parts: 56

## Installation

### 1. Install the service registry

services/index.ts, which `import "@/services"` loads. A provider setup writes the same file; skip this if your app has one.

```bash
npx shadcn@latest add "https://slices.sh/r/services.json"
```

### 2. Install the headless library

```bash
npm install @slices.sh/auth@^0.1.10
```

### 3. Install the service

Install the provider configuration via shadcn or the slices CLI. Skip this step if your app already has the service configured. Provider commands and provisioning: https://slices.sh/docs/services/auth.md

## Anatomy

### Composition

```text
User.Root
  Organization.Active
    Members.Table.Root
      Members.Table.Empty
      Members.Table.Rows
        Members.ConfirmRemove
          Members.RemoveDialog
          Members.Remove
          Members.CancelRemove
        Members.Image
        Members.Initials
        Members.Name
        Members.Email
        Members.Role
          Members.RoleOption
        Members.RemoveTrigger
        Members.RequestRemove
        Members.Table.Self
        Members.Table.RoleName
        Members.RemoveError
        Members.RoleError
      Members.Table.Search
      Members.Table.Filter
        Members.Table.FilterOption
      Members.Count
      Members.Table.PageInfo
      Members.Table.Previous
      Members.Table.Next
    Members.Bulk.Root
      Members.Bulk.Visible
        Members.Bulk.Phase name="selection"
          Members.Bulk.SelectPage
          Members.Bulk.Select
          Members.Bulk.RequestRow
          Members.Bulk.Count
          Members.Bulk.Request
          Members.Bulk.Clear
        Members.Bulk.Phase name="scheduled"
          Members.Bulk.Undo
        Members.Bulk.Phase name="refused"
          Members.Bulk.Refusal
          Members.Bulk.Error
          Members.Bulk.Retry
        Members.Bulk.Phase name="pending"
      Members.Bulk.Dialog
        Members.Bulk.Planned
        Members.Bulk.Confirm
        Members.Bulk.Cancel
    Members.Transfer.Root
      Members.Item
        Members.Transfer.Request
      Members.Transfer.Dialog
        Members.Transfer.Content
          Members.Transfer.Target
          Members.Transfer.Confirm
          Members.Transfer.Cancel
      Members.Transfer.Partial
      Members.Transfer.Error
    Members.Item
  Members.Loading
  Members.Empty
  Members.Error
```

## Minimal composition

```tsx
"use client"

import "@/services"
import { User, Members } from "@slices.sh/auth/headless"

export function Example() {
  return (
    <User.Root>
      <ul>
        <Members.Item>
          <Members.Name />
          <Members.Email />
        </Members.Item>
      </ul>
      <Members.Empty>No members.</Members.Empty>
    </User.Root>
  )
}

```

Requires an authenticated account. Organization controls also require organizations and the appropriate role.

## Bulk member actions

```tsx
"use client"

import "@/services"
import { User, Members } from "@slices.sh/auth/headless"

export function Example() {
  return (
    <User.Root>
      <Members.Bulk.Root>
        <Members.Bulk.SelectPage>Select this page</Members.Bulk.SelectPage>
        <Members.Item>
          <Members.Bulk.Select />
          <Members.Name />
        </Members.Item>
        <Members.Bulk.Request>Remove selected members</Members.Bulk.Request>
        <Members.Bulk.Dialog>
          <Members.Bulk.Planned />
          <Members.Bulk.Confirm>Confirm removal</Members.Bulk.Confirm>
          <Members.Bulk.Cancel>Cancel</Members.Bulk.Cancel>
        </Members.Bulk.Dialog>
        <Members.Bulk.Error />
      </Members.Bulk.Root>
    </User.Root>
  )
}

```

Requires an authenticated account. Organization controls also require organizations and the appropriate role.

## Member table

```tsx
"use client"

import "@/services"
import { User, Members } from "@slices.sh/auth/headless"

export function Example() {
  return (
    <User.Root>
      <Members.Table.Root>
        <Members.Table.Search aria-label="Search members" />
        <table>
          <tbody>
            <Members.Table.Rows>
              <td>
                <Members.Name />
              </td>
              <td>
                <Members.Table.RoleName />
              </td>
            </Members.Table.Rows>
          </tbody>
        </table>
        <Members.Table.Previous>Previous</Members.Table.Previous>
        <Members.Table.Next>Next</Members.Table.Next>
      </Members.Table.Root>
    </User.Root>
  )
}

```

Requires an authenticated account. Organization controls also require organizations and the appropriate role.

## Transfer ownership

```tsx
"use client"

import "@/services"
import { User, Members } from "@slices.sh/auth/headless"

export function Example() {
  return (
    <User.Root>
      <Members.Transfer.Root>
        <Members.Item>
          <Members.Name />
          <Members.Transfer.Request>
            Transfer ownership
          </Members.Transfer.Request>
        </Members.Item>
        <Members.Transfer.Dialog>
          <Members.Transfer.Target />
          <Members.Transfer.Confirm>
            Confirm transfer
          </Members.Transfer.Confirm>
          <Members.Transfer.Cancel>Cancel</Members.Transfer.Cancel>
        </Members.Transfer.Dialog>
        <Members.Transfer.Error />
      </Members.Transfer.Root>
    </User.Root>
  )
}

```

Requires an authenticated account. Organization controls also require organizations and the appropriate role.

## Complete API reference

### Members.RemoveTrigger

action · Element: button

The dialog trigger stays mounted so the primitive can restore focus to it.

Import: @slices.sh/auth/headless

Members.RemoveTrigger requires a member row.

```tsx
PartProps<"button">
```

Alternate import: Members.RemoveTrigger from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/remove-trigger.tsx

### Members.RemoveError

content · Element: p

Inline: RequestRemove arms the row, ConfirmRemove gates the question, Remove does it with { pending }, CancelRemove takes focus back. In a dialog: RemoveDialog maps the armed state onto render={<AlertDialog />} and RemoveTrigger stays mounted so focus returns to it. RemoveError gets { code, message }. All render nothing for a member you cannot manage.

Import: @slices.sh/auth/headless

Members.RemoveError requires a member row.

```tsx
PartProps<"p", { code: AuthErrorCode; message: string }>
```

Alternate import: Members.RemoveError from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/remove-error.tsx

### Members.RoleError

content · Element: p

Role is a native <select> with { role }, one option per backend role unless given children, disabled for a member you cannot manage. RoleOption repeats once per role with value locked. RoleError reports a refused change.

Import: @slices.sh/auth/headless

Members.RoleError requires a member row.

```tsx
PartProps<"p", { code: AuthErrorCode; message: string }>
```

Alternate import: Members.RoleError from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/role-error.tsx

### Members.RemoveDialog

content

Inline: RequestRemove arms the row, ConfirmRemove gates the question, Remove does it with { pending }, CancelRemove takes focus back. In a dialog: RemoveDialog maps the armed state onto render={<AlertDialog />} and RemoveTrigger stays mounted so focus returns to it. RemoveError gets { code, message }. All render nothing for a member you cannot manage.

Import: @slices.sh/auth/headless

Members.RemoveDialog requires a member row.

```tsx
PartProps<null>
```

Alternate import: Members.RemoveDialog from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/remove-dialog.tsx

### Members.Count

content · Element: span

Item is an <li> repeated once per member with { self }. Name and Email are text; Image is the stored image else Gravatar; Initials as User.Initials. Count gets { count }.

Import: @slices.sh/auth/headless

Capability: organizations

```tsx
PartProps<"span", { count: number }>
```

Alternate import: Members.Count from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/count.tsx

### Members.Item

content · Element: li

Item is an <li> repeated once per member with { self }. Name and Email are text; Image is the stored image else Gravatar; Initials as User.Initials. Count gets { count }.

Import: @slices.sh/auth/headless

Capability: organizations

```tsx
ItemProps

type ItemProps = PartProps<"li", { self: boolean; name: string | null }>
```

Alternate import: Members.Item from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/item.tsx

### Members.Name

content

Item is an <li> repeated once per member with { self }. Name and Email are text; Image is the stored image else Gravatar; Initials as User.Initials. Count gets { count }.

Import: @slices.sh/auth/headless

Capability: organizations

Members.Name must be inside <Members.Item>.

```tsx
PartProps<null>
```

Alternate import: Members.Name from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/name.tsx

### Members.Email

content

Item is an <li> repeated once per member with { self }. Name and Email are text; Image is the stored image else Gravatar; Initials as User.Initials. Count gets { count }.

Import: @slices.sh/auth/headless

Capability: organizations

Members.Email must be inside <Members.Item>.

```tsx
PartProps<null>
```

Alternate import: Members.Email from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/email.tsx

### Members.Image

content · Element: img

Item is an <li> repeated once per member with { self }. Name and Email are text; Image is the stored image else Gravatar; Initials as User.Initials. Count gets { count }.

Import: @slices.sh/auth/headless

Capability: organizations

Members.Image must be inside <Members.Item>.

```tsx
PartProps<"img">
```

Alternate import: Members.Image from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/image.tsx

### Members.Initials

content

Item is an <li> repeated once per member with { self }. Name and Email are text; Image is the stored image else Gravatar; Initials as User.Initials. Count gets { count }.

Import: @slices.sh/auth/headless

Capability: organizations

Members.Initials must be inside <Members.Item>.

```tsx
PartProps<null>
```

Alternate import: Members.Initials from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/initials.tsx

### Members.Role

input · Element: select

Role is a native <select> with { role }, one option per backend role unless given children, disabled for a member you cannot manage. RoleOption repeats once per role with value locked. RoleError reports a refused change.

Import: @slices.sh/auth/headless

Members.Role must be inside <Members.Item>.

Members.Role must be inside a member row.

```tsx
PartProps<"select", { role: RoleName }>
```

Alternate import: Members.Role from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/role.tsx

### Members.RoleOption

content · Element: option

Role is a native <select> with { role }, one option per backend role unless given children, disabled for a member you cannot manage. RoleOption repeats once per role with value locked. RoleError reports a refused change.

Import: @slices.sh/auth/headless

```tsx
RoleOptionProps

type RoleOptionProps = PartProps<"option", { role: Role }>
```

Alternate import: Members.RoleOption from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/role-option.tsx

### Members.RequestRemove

action · Element: button

Inline: RequestRemove arms the row, ConfirmRemove gates the question, Remove does it with { pending }, CancelRemove takes focus back. In a dialog: RemoveDialog maps the armed state onto render={<AlertDialog />} and RemoveTrigger stays mounted so focus returns to it. RemoveError gets { code, message }. All render nothing for a member you cannot manage.

Import: @slices.sh/auth/headless

Members.RequestRemove must be inside <Members.Item>.

```tsx
PartProps<"button">
```

Alternate import: Members.RequestRemove from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/request-remove.tsx

### Members.ConfirmRemove

gate

Inline: RequestRemove arms the row, ConfirmRemove gates the question, Remove does it with { pending }, CancelRemove takes focus back. In a dialog: RemoveDialog maps the armed state onto render={<AlertDialog />} and RemoveTrigger stays mounted so focus returns to it. RemoveError gets { code, message }. All render nothing for a member you cannot manage.

Import: @slices.sh/auth/headless

Members.ConfirmRemove must be inside <Members.Item>.

```tsx
GateProps
```

Alternate import: Members.ConfirmRemove from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/confirm-remove.tsx

### Members.CancelRemove

action · Element: button

Inline: RequestRemove arms the row, ConfirmRemove gates the question, Remove does it with { pending }, CancelRemove takes focus back. In a dialog: RemoveDialog maps the armed state onto render={<AlertDialog />} and RemoveTrigger stays mounted so focus returns to it. RemoveError gets { code, message }. All render nothing for a member you cannot manage.

Import: @slices.sh/auth/headless

Members.CancelRemove must be inside <Members.Item>.

Members.CancelRemove requires a member row.

```tsx
PartProps<"button">
```

Alternate import: Members.CancelRemove from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/cancel-remove.tsx

### Members.Remove

action · Element: button

Inline: RequestRemove arms the row, ConfirmRemove gates the question, Remove does it with { pending }, CancelRemove takes focus back. In a dialog: RemoveDialog maps the armed state onto render={<AlertDialog />} and RemoveTrigger stays mounted so focus returns to it. RemoveError gets { code, message }. All render nothing for a member you cannot manage.

Import: @slices.sh/auth/headless

Members.Remove must be inside <Members.Item>.

Members.Remove must be inside a member row.

```tsx
PartProps<"button", { pending: boolean }>
```

Alternate import: Members.Remove from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/remove.tsx

### Members.Loading

gate

Loading, Empty and Error for the members list; Error gets { code, message }.

Import: @slices.sh/auth/headless

```tsx
GateProps
```

Alternate import: Members.Loading from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/loading.tsx

### Members.Empty

gate

Loading, Empty and Error for the members list; Error gets { code, message }.

Import: @slices.sh/auth/headless

```tsx
GateProps
```

Alternate import: Members.Empty from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/empty.tsx

### Members.Error

gate

Loading, Empty and Error for the members list; Error gets { code, message }.

Import: @slices.sh/auth/headless

```tsx
GateProps<{ code: AuthErrorCode; message: string }>
```

Alternate import: Members.Error from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/error.tsx

### Members.Table.RoleName

content

Rows repeats its render element once per member on the page, with { self, name }, and every Members value part works inside it. Self renders inside your own row. RoleName gets { role } for a read-only role. Empty opens when the filters leave nobody.

Import: @slices.sh/auth/headless

Members.Table.RoleName requires a member row.

```tsx
PartProps<null, { role: Role }>
```

Alternate import: Members.Table.RoleName from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/role-name.tsx

### Members.Table.Root

scope

Rows repeats its render element once per member on the page, with { self, name }, and every Members value part works inside it. Self renders inside your own row. RoleName gets { role } for a read-only role. Empty opens when the filters leave nobody.

Import: @slices.sh/auth/headless

```tsx
RootProps & AuthRootProps
```

Alternate import: Members.Table.Root from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/root.tsx

### Members.Table.Search

input · Element: input

Search is the text filter, with shortcuts to focus it. Filter is a native <select> of roles and FilterOption repeats with { role }, including all.

Import: @slices.sh/auth/headless

Members.Table.Search requires Members.Table.Root.

```tsx
PartProps<"input"> & { shortcuts?: boolean }
```

Alternate import: Members.Table.Search from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/search.tsx

### Members.Table.Filter

input · Element: select

Search is the text filter, with shortcuts to focus it. Filter is a native <select> of roles and FilterOption repeats with { role }, including all.

Import: @slices.sh/auth/headless

Members.Table.Filter requires Members.Table.Root.

```tsx
PartProps<"select">
```

Alternate import: Members.Table.Filter from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/role-filter.tsx

### Members.Table.FilterOption

content · Element: option

Search is the text filter, with shortcuts to focus it. Filter is a native <select> of roles and FilterOption repeats with { role }, including all.

Import: @slices.sh/auth/headless

```tsx
Props

type Props = PartProps<"option", { role: Role | "all" }>
```

Alternate import: Members.Table.FilterOption from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/filter-option.tsx

### Members.Table.Rows

content · Element: tr

Rows repeats its render element once per member on the page, with { self, name }, and every Members value part works inside it. Self renders inside your own row. RoleName gets { role } for a read-only role. Empty opens when the filters leave nobody.

Import: @slices.sh/auth/headless

Members.Table.Rows requires Members.Table.Root.

Members.Table.Rows supplies each member.

```tsx
Props

type Props = PartProps<"tr", { self: boolean; name: string | null }>
```

Alternate import: Members.Table.Rows from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/rows.tsx

### Members.Table.Self

content · Element: span

Rows repeats its render element once per member on the page, with { self, name }, and every Members value part works inside it. Self renders inside your own row. RoleName gets { role } for a read-only role. Empty opens when the filters leave nobody.

Import: @slices.sh/auth/headless

Members.Table.Self requires a member row.

```tsx
PartProps<"span">
```

Alternate import: Members.Table.Self from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/self.tsx

### Members.Table.Empty

gate

Rows repeats its render element once per member on the page, with { self, name }, and every Members value part works inside it. Self renders inside your own row. RoleName gets { role } for a read-only role. Empty opens when the filters leave nobody.

Import: @slices.sh/auth/headless

Members.Table.Empty requires Members.Table.Root.

```tsx
GateProps
```

Alternate import: Members.Table.Empty from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/empty.tsx

### Members.Table.PageInfo

content · Element: p

PageInfo is a polite status with { page, pages, count }. Previous and Next move a page and disable at the ends.

Import: @slices.sh/auth/headless

Members.Table.PageInfo requires Members.Table.Root.

```tsx
PartProps<"p", { page: number; pages: number; count: number }>
```

Alternate import: Members.Table.PageInfo from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/page-info.tsx

### Members.Table.Previous

action · Element: button

PageInfo is a polite status with { page, pages, count }. Previous and Next move a page and disable at the ends.

Import: @slices.sh/auth/headless

Members.Table.Previous requires Members.Table.Root.

```tsx
PartProps<"button">
```

Alternate import: Members.Table.Previous from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/previous.tsx

### Members.Table.Next

action · Element: button

PageInfo is a polite status with { page, pages, count }. Previous and Next move a page and disable at the ends.

Import: @slices.sh/auth/headless

Members.Table.Next requires Members.Table.Root.

```tsx
PartProps<"button">
```

Alternate import: Members.Table.Next from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/table/next.tsx

### Members.Bulk.Root

scope

Members.Bulk.Root provides state to the parts inside it.

Import: @slices.sh/auth/headless

```tsx
RootProps
```

Alternate import: Members.Bulk.Root from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/root.tsx

### Members.Bulk.Select

input · Element: input

Members.Bulk.Select renders a input element.

Import: @slices.sh/auth/headless

Members.Bulk.Select requires a member row.

Members.Bulk.Select requires Root.

```tsx
PartProps<"input">
```

Alternate import: Members.Bulk.Select from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/select.tsx

### Members.Bulk.SelectPage

input · Element: input

Members.Bulk.SelectPage renders a input element.

Import: @slices.sh/auth/headless

Members.Bulk.SelectPage requires Table.Root.

Members.Bulk.SelectPage requires Root.

```tsx
PartProps<"input">
```

Alternate import: Members.Bulk.SelectPage from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/select-page.tsx

### Members.Bulk.Visible

gate

Members.Bulk.Visible conditionally renders its children.

Import: @slices.sh/auth/headless

Members.Bulk.Visible requires Root.

```tsx
GateProps & { render?: ReactElement }
```

Alternate import: Members.Bulk.Visible from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/visible.tsx

### Members.Bulk.Phase

gate

Members.Bulk.Phase conditionally renders its children.

Import: @slices.sh/auth/headless

Members.Bulk.Phase requires Root.

```tsx
GateProps & { name: "selection" | "scheduled" | "pending" | "refused" }
```

Alternate import: Members.Bulk.Phase from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/phase.tsx

### Members.Bulk.Count

content · Element: span

Members.Bulk.Count renders a span element.

Import: @slices.sh/auth/headless

Members.Bulk.Count requires Root.

```tsx
PartProps<"span", { count: number; seconds: number }>
```

Alternate import: Members.Bulk.Count from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/count.tsx

### Members.Bulk.Request

action · Element: button

Members.Bulk.Request renders a button element.

Import: @slices.sh/auth/headless

Members.Bulk.Request requires Root.

Members.Bulk request requires Root.

```tsx
PartProps<"button">
```

Alternate import: Members.Bulk.Request from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/request.tsx

### Members.Bulk.RequestRow

action · Element: button

Members.Bulk.RequestRow renders a button element.

Import: @slices.sh/auth/headless

Members.Bulk.RequestRow requires Root.

Members.Bulk request requires Root.

Members.Bulk.RequestRow requires a row.

```tsx
PartProps<"button">
```

Alternate import: Members.Bulk.RequestRow from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/request-row.tsx

### Members.Bulk.Dialog

content

Members.Bulk.Dialog renders content from its current scope.

Import: @slices.sh/auth/headless

Members.Bulk.Dialog requires Root.

```tsx
PartProps<null>
```

Alternate import: Members.Bulk.Dialog from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/dialog.tsx

### Members.Bulk.Planned

content · Element: li

Members.Bulk.Planned renders a li element.

Import: @slices.sh/auth/headless

Members.Bulk.Planned requires Root.

```tsx
PartProps<"li", { name: string | null; email: string | null }>
```

Alternate import: Members.Bulk.Planned from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/planned.tsx

### Members.Bulk.Confirm

action · Element: button

Members.Bulk.Confirm renders a button element.

Import: @slices.sh/auth/headless

Members.Bulk.Confirm requires Root.

```tsx
PartProps<"button", { count: number; retryAfter: number }>
```

Alternate import: Members.Bulk.Confirm from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/confirm.tsx

### Members.Bulk.Cancel

action · Element: button

Members.Bulk.Cancel renders a button element.

Import: @slices.sh/auth/headless

Members.Bulk.Cancel requires Root.

```tsx
PartProps<"button">
```

Alternate import: Members.Bulk.Cancel from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/cancel.tsx

### Members.Bulk.Undo

action · Element: button

Members.Bulk.Undo renders a button element.

Import: @slices.sh/auth/headless

Members.Bulk.Undo requires Root.

```tsx
PartProps<"button">
```

Alternate import: Members.Bulk.Undo from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/undo.tsx

### Members.Bulk.Clear

action · Element: button

Members.Bulk.Clear renders a button element.

Import: @slices.sh/auth/headless

Members.Bulk.Clear requires Root.

```tsx
PartProps<"button">
```

Alternate import: Members.Bulk.Clear from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/clear.tsx

### Members.Bulk.Retry

action · Element: button

Members.Bulk.Retry renders a button element.

Import: @slices.sh/auth/headless

Members.Bulk.Retry requires Root.

```tsx
PartProps<"button", { retryAfter: number }>
```

Alternate import: Members.Bulk.Retry from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/retry.tsx

### Members.Bulk.Refusal

content · Element: li

Members.Bulk.Refusal renders a li element.

Import: @slices.sh/auth/headless

Members.Bulk.Refusal requires Root.

```tsx
PartProps<"li", { name: string | null; message: string }>
```

Alternate import: Members.Bulk.Refusal from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/refusal.tsx

### Members.Bulk.Error

content · Element: p

Members.Bulk.Error renders a p element.

Import: @slices.sh/auth/headless

Members.Bulk.Error requires Root.

```tsx
PartProps<"p", { message: string }>
```

Alternate import: Members.Bulk.Error from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/bulk/error.tsx

### Members.Transfer.Root

scope

Members.Transfer.Root provides state to the parts inside it.

Import: @slices.sh/auth/headless

```tsx
RootProps
```

Alternate import: Members.Transfer.Root from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/root.tsx

### Members.Transfer.Request

action · Element: button

Members.Transfer.Request renders a button element.

Import: @slices.sh/auth/headless

Members.Transfer.Request requires a member row.

Members.Transfer.Request requires Root.

```tsx
PartProps<"button">
```

Alternate import: Members.Transfer.Request from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/request.tsx

### Members.Transfer.Dialog

content

Members.Transfer.Dialog renders content from its current scope.

Import: @slices.sh/auth/headless

Members.Transfer.Dialog requires Root.

```tsx
PartProps<null>
```

Alternate import: Members.Transfer.Dialog from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/dialog.tsx

### Members.Transfer.Content

content

Members.Transfer.Content renders content from its current scope.

Import: @slices.sh/auth/headless

Members.Transfer.Content requires Root.

```tsx
PartProps<null>
```

Alternate import: Members.Transfer.Content from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/content.tsx

### Members.Transfer.Target

content · Element: span

Members.Transfer.Target renders a span element.

Import: @slices.sh/auth/headless

Members.Transfer.Target requires Root.

```tsx
PartProps<"span", { name: string | null; email: string | null }>
```

Alternate import: Members.Transfer.Target from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/target.tsx

### Members.Transfer.Confirm

action · Element: button

Members.Transfer.Confirm renders a button element.

Import: @slices.sh/auth/headless

Members.Transfer.Confirm requires Root.

```tsx
PartProps<"button", { pending: boolean; retryAfter: number }>
```

Alternate import: Members.Transfer.Confirm from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/confirm.tsx

### Members.Transfer.Cancel

action · Element: button

Members.Transfer.Cancel renders a button element.

Import: @slices.sh/auth/headless

Members.Transfer.Cancel requires Root.

```tsx
PartProps<"button">
```

Alternate import: Members.Transfer.Cancel from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/cancel.tsx

### Members.Transfer.Partial

content · Element: p

Members.Transfer.Partial renders a p element.

Import: @slices.sh/auth/headless

Members.Transfer.Partial requires Root.

```tsx
PartProps<"p", { message: string }>
```

Alternate import: Members.Transfer.Partial from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/partial.tsx

### Members.Transfer.Error

content · Element: p

Members.Transfer.Error renders a p element.

Import: @slices.sh/auth/headless

Members.Transfer.Error requires Root.

```tsx
PartProps<"p", { message: string }>
```

Alternate import: Members.Transfer.Error from @slices.sh/auth/headless/members

Source: @slices.sh/auth/src/headless/members/transfer/error.tsx

### User.Root

scope

Says which auth the User parts below read, and whether they may do without it. The parts need
no root: left out, they read the nearest auth root's config, or "default", and render nothing
without auth. `<User.Root enabled="optional">` is for the one who wants that said in the code.

Import: @slices.sh/auth/headless

```tsx
RootProps & AuthRootProps
```

Alternate import: User.Root from @slices.sh/auth/headless/user

Alternate import: User.Root from @slices.sh/auth/headless/passkeys

Alternate import: User.Root from @slices.sh/auth/headless/two-factor

Source: @slices.sh/auth/src/headless/user/root.tsx

### Organization.Active

gate

Item is a <button> repeated once per organization with { active, pending }; clicking makes it active. Personal switches to the personal account. Active renders its children with the active organization in scope, and nothing on the personal account; None is its mirror, once the answer is in. Switcher holds the searchable list: Switcher.Surface maps onto a Popover or a Sheet, Switcher.Options, Input, List, Item, Empty and Error search and list, and Switcher.Shortcuts binds keys to switch.

Import: @slices.sh/auth/headless

Capability: organizations

```tsx
GateProps
```

Alternate import: Organization.Active from @slices.sh/auth/headless/organization

Source: @slices.sh/auth/src/headless/organization/active.tsx
