View Issue Details

IDProjectCategoryView StatusLast Update
0012002Talermerchant portal webuipublic2026-11-10 23:55
Reporterbot-cg [agent] Assigned ToResolution deadline
ImplementerReviewer 
Release signed byDeployed by 
VerifierCommunicatorCM_7  
Data protection authority notification requiredNo  
CSIRT notification requiredNo  
Estimated effort (hours)Actual effort (hours)0 
Fast-trackNo
Work packagenone
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Summary0012002: Merchant portal: dialogs, PIN/code prompts and single-purpose forms open without keyboard focus on the obvious field
DescriptionNoticed first in merchant account creation: the email/SMS code (PIN) steps have one input, but focus stays on the submit button, so typing the code does nothing. An audit of the whole portal found the same problem across dialogs, prompts and create forms (children of this issue).

Three root causes in this package: (1) TanCodeInputGroup, shared by sign-up, sign-in 2FA and the 'Confirm it is you' MFA screen, never focuses its input; the old portal's fix for this (0011487, e157ed6e2) was lost when e38ceeaba replaced the legacy portal. (2) ui/Modal.tsx picks its initial focus with one querySelector over a selector list, which matches in document order, so the title's close button always wins and [autofocus] is never honoured. (3) Hand-built overlays and create pages have no focus logic at all.

Also part of the patch set, not a bug on master: tutorial chapters render live previews of real screens, so once screens focus a field on mount, opening a chapter would pull the reader's focus into a preview and scroll the page by thousands of pixels. LiveComponentPreview keeps preview content inert while it mounts (unless the reader's focus is already inside), which is committed before the screen changes.

Why this keeps happening: Preact does not implement autoFocus. It only sets the HTML autofocus attribute, which browsers honour once per document (initial load), so in these single-page apps a field rendered later, such as a dialog, a wizard step or a new route, stays unfocused unless code calls focus() on mount. Several components accept a `focus` prop that nothing passes or nothing acts on.

Each child issue describes one dialog/screen/component, with before/after screenshots and a patch. All fixes are on branch dev/bots/autofocus (durian); the commit ids are added as a note here. Rules followed: focus the only input of a PIN/code prompt; the first empty field of a create/edit form or step; the safe choice (Cancel) of a confirmation without input, never the destructive action; keep overview/list pages and review-and-pay steps unfocused; focus once on mount or step change, never on re-render.
TagsNo tags attached.

Required notifications

Address or linkRemarkAdded byNotifiedActions

The plan

IDSummaryStatusAssigned ToEstimated effort (hours)
0012003Merchant portal: verification-code (PIN) steps and sign-in/sign-up/reset forms open without keyboard focus new
0012004Merchant: every Modal dialog opens on its close button instead of its first field, and ignores [autofocus] new
0012005Merchant: 'Pair a till' dialog does not focus Device Name, and its credential step drops focus (Escape stops working) new
0012006Merchant: Bank monitoring dialog stays on its close button after its settings load new
0012007Merchant: 'Point this portal at a different server' page does not focus the server address new
0012008Merchant: first-run 'Set up this merchant server' form does not focus Business name new
0012009Merchant: admin 'Reset merchant account password' page does not focus New password new
0012010Merchant: admin 'Create merchant account' form does not focus Account ID new
0012011Merchant: 'Create New Product' does not focus Product Name new
0012012Merchant: 'Create Machine Access' does not focus 'Used for' new
0012013Merchant: 'Add offline payment device' does not focus Name new
0012014Merchant: 'Add a bank account' does not focus the IBAN new
0012015Merchant: 'Create New Order' does not focus the amount new
0012016Merchant: Grant Refund screen does not focus the refund amount new
0012017Merchant: Schedule a Report form does not focus its Description field new
0012018Merchant: Add/Edit Product Group and Money Pot dialogs focus the close button instead of the identifier new
0012019Merchant: Delete Order confirmation leaves focus behind the overlay (and Escape does nothing) new
0012020Merchant: Remove bank account confirmation does not take focus (and Escape does nothing) new
0012021Merchant: Templates list 'Delete template' and 'Show QR' dialogs leave focus on the row menu behind them new
0012022Merchant PoS: ad-hoc item and quick-refund dialogs, and the paid screen, do not focus what they ask for new
0012023Merchant: 'You have been signed out' page does not focus 'Sign In Again' new
This issue (hours)
Its children (hours)0
Together (hours)0
Not planned yet: 0012003, 0012004, 0012005, 0012006, 0012007, 0012008, 0012009, 0012010, 0012011, 0012012, 0012013, 0012014, 0012015, 0012016, 0012017, 0012018, 0012019, 0012020, 0012021, 0012022, 0012023. The plan of this issue cannot be finished while part of it is unplanned.

Relationships

parent of 0012003 new Merchant portal: verification-code (PIN) steps and sign-in/sign-up/reset forms open without keyboard focus 
parent of 0012004 new Merchant: every Modal dialog opens on its close button instead of its first field, and ignores [autofocus] 
parent of 0012005 new Merchant: 'Pair a till' dialog does not focus Device Name, and its credential step drops focus (Escape stops working) 
parent of 0012006 new Merchant: Bank monitoring dialog stays on its close button after its settings load 
parent of 0012007 new Merchant: 'Point this portal at a different server' page does not focus the server address 
parent of 0012008 new Merchant: first-run 'Set up this merchant server' form does not focus Business name 
parent of 0012009 new Merchant: admin 'Reset merchant account password' page does not focus New password 
parent of 0012010 new Merchant: admin 'Create merchant account' form does not focus Account ID 
parent of 0012011 new Merchant: 'Create New Product' does not focus Product Name 
parent of 0012012 new Merchant: 'Create Machine Access' does not focus 'Used for' 
parent of 0012013 new Merchant: 'Add offline payment device' does not focus Name 
parent of 0012014 new Merchant: 'Add a bank account' does not focus the IBAN 
parent of 0012015 new Merchant: 'Create New Order' does not focus the amount 
parent of 0012016 new Merchant: Grant Refund screen does not focus the refund amount 
parent of 0012017 new Merchant: Schedule a Report form does not focus its Description field 
parent of 0012018 new Merchant: Add/Edit Product Group and Money Pot dialogs focus the close button instead of the identifier 
parent of 0012019 new Merchant: Delete Order confirmation leaves focus behind the overlay (and Escape does nothing) 
parent of 0012020 new Merchant: Remove bank account confirmation does not take focus (and Escape does nothing) 
parent of 0012021 new Merchant: Templates list 'Delete template' and 'Show QR' dialogs leave focus on the row menu behind them 
parent of 0012022 new Merchant PoS: ad-hoc item and quick-refund dialogs, and the paid screen, do not focus what they ask for 
parent of 0012023 new Merchant: 'You have been signed out' page does not focus 'Sign In Again' 
Not all the children of this issue are yet resolved or closed.

Activities

bot-cg [agent]

2026-11-10 23:55

updater   ~0030389

Fixes for this issue and all its children are on branch dev/bots/autofocus (durian), rebased on master bf2e571a2:

  e4cfe1bd2 web-util: honour the focus flag in forms and dialogs
  c0c3962de merchant web UI: keep tutorial previews from taking focus
  4693f4f1d merchant web UI: focus the code field in verification steps
  8a4eb4219 merchant web UI: start dialogs and create forms on their first field
  b48f5dd89 bank web UI: focus the field each page and dialog asks for
  216b033fe wallet web UI: focus the amount or field each form asks for first
  908d48a85 anastasis web UI: focus the first field of three setup steps
  dbbabcf82 exchange AML web UI: focus the password, search and decision fields
  21293f654 exchange KYC web UI: focus the first fillable field of a requirement form
  eaec0bcf6 challenger web UI: focus the address form and stop re-focusing the PIN
  150044e2b auditor web UI: move focus into the suppress dialog and the menu drawer

Merchant commits: c0c3962de (tutorial preview guard; must precede the screen changes), 4693f4f1d (0012003, code steps), 8a4eb4219 (the remaining children).

Tests: merchant web UI unit suite 719/720; the one failure, "the storybook does not mount the portal shell", fails identically on unmodified master. tsc clean. Every child's before/after was measured in headless Chromium (screenshots attached to each child).

Issue History

Date ModifiedUsernameFieldChange
2026-11-10 23:41bot-cgNew Issue
2026-11-10 23:41bot-cgRelationship addedparent of 0012003
2026-11-10 23:41bot-cgRelationship addedparent of 0012019
2026-11-10 23:41bot-cgRelationship addedparent of 0012018
2026-11-10 23:41bot-cgRelationship addedparent of 0012017
2026-11-10 23:41bot-cgRelationship addedparent of 0012016
2026-11-10 23:41bot-cgRelationship addedparent of 0012015
2026-11-10 23:41bot-cgRelationship addedparent of 0012014
2026-11-10 23:41bot-cgRelationship addedparent of 0012013
2026-11-10 23:41bot-cgRelationship addedparent of 0012012
2026-11-10 23:41bot-cgRelationship addedparent of 0012011
2026-11-10 23:41bot-cgRelationship addedparent of 0012010
2026-11-10 23:41bot-cgRelationship addedparent of 0012009
2026-11-10 23:41bot-cgRelationship addedparent of 0012008
2026-11-10 23:41bot-cgRelationship addedparent of 0012007
2026-11-10 23:41bot-cgRelationship addedparent of 0012006
2026-11-10 23:41bot-cgRelationship addedparent of 0012005
2026-11-10 23:41bot-cgRelationship addedparent of 0012004
2026-11-10 23:41bot-cgRelationship addedparent of 0012023
2026-11-10 23:41bot-cgRelationship addedparent of 0012022
2026-11-10 23:41bot-cgRelationship addedparent of 0012021
2026-11-10 23:41bot-cgRelationship addedparent of 0012020
2026-11-10 23:55bot-cgNote Added: 0030389