# @suaveplan/drive-react-sharing — React Bindings for Drive Sharing React-tier UI for managing partitioned drive resources. Wraps the real `@suaveplan/drive-sharing` engine (PartitionManager / GrantManager / TokenManager) behind a `useSharing` hook + three accessible components. ## Requirements ### Requirement: useSharing hook The package SHALL expose `useSharing(options): UseSharingResult` that: - Holds a live `recipients` list synchronised with `GrantManager.list()`. - Exposes async actions `addRecipient`, `removeRecipient`, `updatePermission`, `refresh`. Each action MUST surface failures as `DriveReactSharingError` (typed `cause` preserving the underlying `DriveShareError`). - Increments OTel counters `drive.react.sharing.recipients_added_total`, `drive.react.sharing.recipients_removed_total`, `drive.react.sharing.permissions_updated_total{permission}` on each successful action. - Threads AbortSignal through every async path. - Does NOT mock the engine — consumers pass real `PartitionManager` / `GrantManager` / `TokenManager` instances. #### Scenario: updatePermission preserves expiresAt - **WHEN** `updatePermission(grantId, newPermission)` is called on a grant with `expiresAt` set - **THEN** the resulting grant MUST have the same `expiresAt` value as before (the hook revokes-then-creates internally since `GrantManager` has no atomic permission mutation). ### Requirement: ShareDialog component The package SHALL expose `` modal with: - `role="dialog"` + `aria-modal="true"` + `aria-labelledby` referencing the heading id. - ESC key dismisses (handler bound to dialog `onKeyDown`). - Backdrop is a real `