reach/reach-ui

[Dialog] Pressing escape key inside of dialog when footer exists in Safari scrolls to the last focusable element on the page

Open

#754 opened on Feb 27, 2021

View on GitHub
 (11 comments) (1 reaction) (1 assignee)TypeScript (558 forks)auto 404
Help WantedStatus: In ProgressType: Bug

Repository metrics

Stars
 (5,975 stars)
PR merge metrics
 (PR metrics pending)

Description

🐛 Bug report

Test setup

  • Use Safari browser
  • Reach dialog with text input inside of it
  • <footer> tag exists on page

Current Behavior

Right now when you open the dialog (before you make any user action on the dialog) press the escape key and it jumps to the bottom of the screen

Expected behavior

I feel as though this is an undesirable effect and should react the same as when a footer doesn't exist. This may be due to safari behaviour

Reproducible example

Could not use code sandbox as it didn't show the issue since the virtual browser is not safari based. Using this simple reproducible code in any scenario should be sufficient as long as you open the page in safari.

import React from "react";
import Dialog from "@reach/dialog";

export default function DialogExample() {
  const [showDialog, setShowDialog] = React.useState(false);
  const open = () => setShowDialog(true);
  const close = () => setShowDialog(false);
  return (
    <div>
      <button onClick={open}>Open Dialog</button>
      <Dialog isOpen={showDialog} onDismiss={close}>
        <input />
      </Dialog>
      <div style={{ height: "200vh" }}></div>
      <footer>footer</footer>
    </div>
  );
}

Suggested solution(s)

Maybe it's possible to block escape key default event?

Additional context

N/A

Your environment

Software Name(s) Version
Reach Package @reach/dialog 0.13.2
React 17.0.1
Browser safari 14.0.3
Assistive tech
Node v12.18.4
npm/yarn yarn 1.22.10
Operating System MacOS Big Sur 11.2

Contributor guide