# @suaveplan/drive-react-sharing - React UI for @suaveplan/drive-sharing: ShareDialog, PartitionBadge, FileAccessList components and useSharing hook wired to the real sharing engine.
## Summary
React-tier UI surface for `@suaveplan/drive-sharing`. Three controlled
components plus a real-engine-backed hook.
## Documentation tree
- [file-access-list](./src/components/file-access-list/file-access-list.md) — _(no submodules)_
- [file-access-list](./src/components/file-access-list/file-access-list.md) — _(no submodules)_
- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_
- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_
- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_
- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_
- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_
- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_
- [otel](./src/otel/instruments.md) — _(no submodules)_
- [instruments](./src/otel/instruments.md) — _(no submodules)_
- [error-codes](./src/error-codes.md) — `@suaveplan/drive-react-sharing` raises every failure as a `DriveReactSharingError` — a `SuaveplanError` subclass with…
- [file-access-list](./src/components/file-access-list/file-access-list.md) — _(no submodules)_- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_- [otel](./src/otel/instruments.md) — _(no submodules)_- [instruments](./src/otel/instruments.md) — _(no submodules)_- [error-codes](./src/error-codes.md) — `@suaveplan/drive-react-sharing` raises every failure as a `DriveReactSharingError` — a `SuaveplanError` subclass with…
- [file-access-list](./src/components/file-access-list/file-access-list.md) — _(no submodules)_- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_- [otel](./src/otel/instruments.md) — _(no submodules)_- [instruments](./src/otel/instruments.md) — _(no submodules)_- [error-codes](./src/error-codes.md) — `@suaveplan/drive-react-sharing` raises every failure as a `DriveReactSharingError` — a `SuaveplanError` subclass with…
- [file-access-list](./src/components/file-access-list/file-access-list.md) — _(no submodules)_- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_- [otel](./src/otel/instruments.md) — _(no submodules)_- [instruments](./src/otel/instruments.md) — _(no submodules)_- [error-codes](./src/error-codes.md) — `@suaveplan/drive-react-sharing` raises every failure as a `DriveReactSharingError` — a `SuaveplanError` subclass with…
- [file-access-list](./src/components/file-access-list/file-access-list.md) — _(no submodules)_- [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_ - [partition-badge](./src/components/partition-badge/partition-badge.md) — _(no submodules)_- [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_ - [share-dialog](./src/components/share-dialog/share-dialog.md) — _(no submodules)_- [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_ - [use-sharing](./src/hooks/use-sharing/use-sharing.md) — _(no submodules)_- [otel](./src/otel/instruments.md) — _(no submodules)_ - [instruments](./src/otel/instruments.md) — _(no submodules)_- [error-codes](./src/error-codes.md) — `@suaveplan/drive-react-sharing` raises every failure as a `DriveReactSharingError` — a `SuaveplanError` subclass with…
## Install
```bash
bun add @suaveplan/drive-react-sharing @suaveplan/drive-sharing
```
Peer deps: `react ^18 || ^19`, `react-dom ^18 || ^19`.
## Quick start
```tsx
import {
GrantManager,
InMemoryPartitionStore,
KeyRing,
PartitionManager,
TokenManager,
userId,
} from "@suaveplan/drive-sharing";
import {
ShareDialog,
useSharing,
} from "@suaveplan/drive-react-sharing";
import { useState } from "react";
const partitions = new PartitionManager({
store: new InMemoryPartitionStore(),
keyRing: new KeyRing(),
});
const grants = new GrantManager();
const tokens = new TokenManager();
function Trigger({ partitionId }: { partitionId: string }) {
const sharing = useSharing({
partitionId,
grantorId: userId("me"),
partitions,
grants,
tokens,
});
const [open, setOpen] = useState(false);
return (
<>
sharing.addRecipient(id, perm)}
onRemove={(id) => sharing.removeRecipient(id)}
onClose={() => setOpen(false)}
/>
>
);
}
```
## Components
| Component | Purpose | Docs |
|---|---|---|
| `` | Modal share UI with add form + revoke per row | `src/components/share-dialog/share-dialog.md` |
| `` | Inline badge: classification + encryption indicator | `src/components/partition-badge/partition-badge.md` |
| `` | Read-only access list with optional revoke | `src/components/file-access-list/file-access-list.md` |
## Hook
| Hook | Purpose | Docs |
|---|---|---|
| `useSharing(options)` | Live-engine binding for recipient state + add/remove/update/refresh actions | `src/hooks/use-sharing/use-sharing.md` |
## Accessibility
- `` renders `role="dialog"` with `aria-modal="true"`
and `aria-labelledby` pointing at the title heading. Focus moves to
the recipient input on open; ESC and backdrop click both close.
- `` renders a semantic `` with one
`- ` per recipient. Revoke is a native `