Bulk action bar · batches of 100
Select a page, then “select all 2,131 matching”. The frontend splits the run into batches of 100 (T003 #13): batch progress, Stop after this batch, partial failure with the failed ids and a retry, and only the bulk verbs the role holds.
Covers: action-bar primitive, action-bar designer, bulk-bar designer. Exports: BulkBar.
Anatomy
The component as it sits in the product: English, compact, real data shapes.
States
8 states, left to right, top to bottom. A mock poll never finishes, so each state is drawn on purpose.
Density
The phone shell is always comfortable (POWERUPS #15): 44px tap targets, 16px inputs. Compact exists on desktop only; see the desktop page.
English · 中文
Staff pick en or cn (T001 Q25). Labels arrive localised; CJK falls back to PingFang SC / Noto Sans SC.
Long string · permission denied
The long-string case (PL-063) and what a role without the permission sees (the server decides; T003).
Contract
The @rj/admin-kit API for this family. Mirrored in CONTRACT.md.
- Export
BulkBar·@rj/admin-kit- Props
selected·matching·actions(filtered by permission) ·batchSize100 ·run- States
- idle · page-selected · all-selected · running · stopping · stopped · partial · failed · done
- shadcn / Radix
- Progress · DropdownMenu (Print ▾)
- Package underneath
- TanStack row selection · zustand (selection across pages) · sequential useMutation runner
- Accessibility
- progress is a live region (polite); Stop is reachable by keyboard while running
- API operations
- admin.accounts.bulk-permissions (dry_run) · admin.api-keys.bulk-revoke · admin.accessory-codes.bulk · orders Complete = POST orders/completed in batches (proposal)
- Phone variant
- long-press to select; bar docks at the bottom