F1 component kit/Actions and confirmation/Confirmation ladderPhone

Confirmation ladder

F1 variant25 · confirm-ladder

Three rungs: plain confirm → consequence summary (count, amounts with currency, wallet before → after; 409 idempotent retry) → typed confirmation for the irreversible (revoke all sessions, Q14). Money and revoke stay desktop-first.

Covers: alert-dialog primitive, confirm designer. Exports: ConfirmDialog.

Whole page:CompactComfortableLaravel · navyDTC · midnight green
AnatomyStatesDensityEN · 中文Edge casesContract

Anatomy

The component as it sits in the product: English, compact, real data shapes.

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00

The three rungs

Plain → consequence summary → typed. Pick the lowest rung that is honest about the consequence.

1 · plain confirm

Mark 3 orders as Completed?

4509, 4508, 4506 · Delivered tab

2 · consequence summary (money)

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00
3 · typed confirmation (Q14)

Revoke every session and token?

Signs out all 42 staff and revokes 17 API tokens immediately. Integrations stop until new keys are minted.

Sessions42
API tokens17
Type REVOKE ALL to confirmREVOKE ALL

States

7 states, left to right, top to bottom. A mock poll never finishes, so each state is drawn on purpose.

1 · plain

Mark 3 orders as Completed?

4509, 4508, 4506 · Delivered tab

2 · money summary

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00
2 · balance changed (409)

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00
The balance changed while you were reviewingNow USD 1,190.00 → 1,162.00 after this debit. Same Idempotency-Key: applying twice is safe.
3 · typed · empty

Revoke every session and token?

Signs out all 42 staff and revokes 17 API tokens immediately. Integrations stop until new keys are minted.

Sessions42
API tokens17
Type REVOKE ALL to confirmREVOKE ALL
3 · typed · mismatch

Revoke every session and token?

Signs out all 42 staff and revokes 17 API tokens immediately. Integrations stop until new keys are minted.

Sessions42
API tokens17
Type REVOKE ALL to confirmREVOKE ALDoesn’t match yet
3 · typed · match

Revoke every session and token?

Signs out all 42 staff and revokes 17 API tokens immediately. Integrations stop until new keys are minted.

Sessions42
API tokens17
Type REVOKE ALL to confirmREVOKE ALL
3 · applying

Revoke every session and token?

Signs out all 42 staff and revokes 17 API tokens immediately. Integrations stop until new keys are minted.

Sessions42
API tokens17
Type REVOKE ALL to confirmREVOKE ALL

Density

Compact (2b ultra, the default) and comfortable, side by side. Same markup, only the density tokens change.

compact · default · data-density=compact

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00
comfortable · data-density=comfortable

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00

English · 中文

Staff pick en or cn (T001 Q25). Labels arrive localised; CJK falls back to PingFang SC / Noto Sans SC.

en

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00
中文 · lang=zh-Hans

核对钱包扣款

工单 #877 · 无法撤销;冲正需另建充值。

店铺Atelier North
方向扣款
金额− USD 28.00
原因订单修改 (USD) · 订单 #4521
结果余额USD 1,240.00 → 1,212.00

Long string · permission denied

The long-string case (PL-063) and what a role without the permission sees (the server decides; T003).

long string

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopThe Cambridge Gentleman's Outfitters · Trumpington Street bespoke branch
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00
permission denied

Not available to your role

Your role is missing manage sessions. Nothing here is hidden by mistake: the server sends only what you can do.

Both apps

One @rj/admin-kit component, two themes: the Laravel admin (navy pinned) and the DTC admin (kit v4 Midnight green), by token swap only.

Laravel admin · :root

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00
DTC admin · data-theme=dtc

Review wallet debit

Ticket #877 · this cannot be undone; a reversing credit is a new transaction.

ShopAtelier North
DirectionDebit
Amount− USD 28.00
ReasonOrder Modification (USD) · Order #4521
Resulting balanceUSD 1,240.00 → 1,212.00

Contract

The @rj/admin-kit API for this family. Mirrored in CONTRACT.md.

Export
ConfirmDialog · @rj/admin-kit
Props
level plain|summary|typed · title · consequences[] · money {currency, before, after} · phrase · idempotencyKey · onConfirm
States
open · mismatch · ready · busy · conflict (409) · error
shadcn / Radix
AlertDialog
Package underneath
react-hook-form + zod (typed phrase) · crypto.randomUUID() (Idempotency-Key)
Accessibility
focus starts on Cancel; the confirm button names the action and amount; typed input is labelled with the phrase
API operations
admin.sessions.revoke-all (confirmation, expected_revision) · admin.orders.void (Idempotency-Key, 409) · admin.billing.wallets.transactions.store · admin.tickets.wallet-transactions.store · admin.api-keys.bulk-revoke
Phone variant
rung 1 only; 2 and 3 open on desktop