3.3 KiB
3.3 KiB
OpenSpec Change: enterprise-react-drive-sharing
- Change ID: enterprise-react-drive-sharing
- Package:
@suaveplan/drive-react-sharing - Category: react
- Target path:
packages/drive/drive-react-sharing - Status: PROPOSED
- Date: 2026-04-24
- Reference spec:
/mnt/s/web/suaveplan/enterprise/react-drive-sharing.md
Summary
Deliver @suaveplan/drive-react-sharing on genesis from scratch at enterprise quality. React UI for shared drive resource management: ShareDialog (recipients list, permission picker, add/remove), PartitionBadge (type + encryption indicator), FileAccessList (read-only list with revoke), and useSharing hook. Genesis consolidates the three overlapping permission type names into one canonical union, adds a useSharing Storybook demo, wires useSharing to the real @suaveplan/drive-sharing engine, adds OTel counters for share actions, full accessibility, and Playwright E2E.
Current-state audit (genesis)
Package does not exist on genesis — fresh build.
Available workspace deps on genesis
| Package | Role |
|---|---|
@suaveplan/error (workspace:^) |
DriveSharingError |
@suaveplan/drive-sharing (workspace:^) |
Sharing engine + canonical permission types |
@suaveplan/react-translate (workspace:^) |
i18n for all UI strings |
@opentelemetry/api (catalog:observability) |
drive.share.* counters + spans |
zod (catalog:forms) |
Prop validation |
tslib (catalog:build) |
TS helpers |
External: React 18 peer.
Preserved public API surface
// Components
ShareDialog, PartitionBadge, FileAccessList
// Hook
useSharing
// Types (consolidated from three overlapping names)
SharePermission, ShareRecipient, AccessEntry, PartitionType,
ShareDialogProps, PartitionBadgeProps, FileAccessListProps,
UseSharingOptions, UseSharingReturn
New additions for genesis
DriveSharingError— codes:SHARING_ADD_FAILED,SHARING_REVOKE_FAILED,SHARING_PERMISSION_FAILED.- Consolidated permission types —
SharePermissionre-exported from@suaveplan/drive-sharing;AccessPermissionandSharingPermissionaliases removed. - Real engine integration —
useSharingcalls@suaveplan/drive-sharingengine (not an in-memory stub). useSharingStorybook demo — hooks playground story (main branch had none).- OTel counters —
drive.share.add,drive.share.revoke,drive.share.permission.changespans. - Accessibility —
ShareDialogfocus trap, ESC-to-close,aria-modal,aria-labelledby; axe-core in all stories. - Playwright E2E — add recipient, remove recipient, change permission, keyboard-only, mobile viewport.
- Link sharing — generate/revoke shareable links with scope, expiry, and password.
File layout
packages/drive/drive-react-sharing/
package.json
tsconfig.json
vitest.config.ts
src/
index.ts
types/
components/
share-dialog/ (tsx + types + md + test + stories + index)
partition-badge/ (tsx + types + md + test + stories + index)
file-access-list/ (tsx + types + md + test + stories + index)
share-link-dialog/ (tsx + types + md + test + stories + index)
hooks/
use-sharing/ (ts + md + test + stories + index)
e2e/
drive-sharing.spec.ts