A print trigger that prepares the page before the dialog opens — a cancellable async hook, a print scope class, and a restore raced between afterprint, the print media query and a timeout.
npx shadcn@latest add @zyeon/print-buttonZyeon UI limits how often it can be asked, and Print Button hasn't had its turn. Its source will show here once it has.