mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-10 01:56:16 -08:00
The PIN dialog's submit button now names the flow. The lock service passes a submitKey with every prompt: Unlock, Save PIN, Confirm (the current PIN before a change) and Turn off. The dismiss button is the shared Cancel. Submit was disabled while the input was invalid, and Enter does nothing on a disabled default button, so a mismatched repeat was silently swallowed. Submit is now disabled only while busy or cooling down, and submit() refuses invalid input: it shows the error on the field, shakes the field and focuses it. Errors are mat-error on their field, driven by an errorStateMatcher, so the input gets aria-invalid and the message lands in the form field's live region. The mismatch shows while typing once the repeat is as long as the PIN. Material's form-field error tokens map to the parental-lock red. There is no shake under prefers-reduced-motion. Set mode uses autocomplete="new-password". Adds the CONFIRM and TURN_OFF keys in all locales, and an Electron E2E for the set -> mismatch -> fix -> save flow and the per-flow labels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>