UNPKG

tabbable

Version:

Returns an array of all tabbable DOM nodes within a containing node.

156 lines (89 loc) 6.25 kB
# Changelog ## 5.2.0 ### Minor Changes - bf0a8f0: Exposed an option to select the way that an element is checked as displayed ## 5.1.6 ### Patch Changes - f9f6d25: Replaces Karma/Mocha/Sinon/Chai in test suite with Jest/Dom Testing Library. Removes README reference to identifying anchor tags with an `xlink:href` attribute as tabbable since that information is incorrect. ## 5.1.5 ### Patch Changes - c048203: fix crash when radio button name attributes contain CSS selector special characters (#168) ## 5.1.4 ### Patch Changes - a188c71: use element.matches fallback for IE11 and Webkit5 - 0d4cdf8: Update the code to use const/let and function declarations only for the repo; this does NOT affect browser compatibility as the code is still transpiled when published into the `./dist` directory for various targets. ## 5.1.3 ### Patch Changes - 5579825: fixes to details elements - ignore elements nested under a closed details element - ignore any extra summary elements after the first summary element - add details element as tabbable in case it has no direct summary element ## 5.1.2 ### Patch Changes - d3c6514: Fix UMD build incorrectly using `focusTrap` as output name. - 95563c2: Fix #99: Transpile ESM bundle down to the same browser target used for the CJS and UMD bundles. ESM is just the module system, not the browser target. ## 5.1.1 ### Patch Changes - fb49d23: Fix #96: Transpile non-minified bundles for expected browser targets. ## 5.1.0 ### Minor Changes - bd21d91: Add `focusable()` for getting all focusable nodes. ### Patch Changes - 3665d0b: The TypeScript return type of `tabbable` has been fixed: Was `Array<Element>` (an `Element` is technically not focusable), is now `Array<HTMLElement | SVGElement>` (which are both still/also `Element` instances). - 8a25135: Fixed: Tabbable elements in fixed-position (`position: fixed`) containers should now be consistently found in supported browsers. - 9544de2: Replace `prepublishOnly` script with `prepare` script. This has the added benefit of running automatically when installing the package from GitHub (as supported by NPM) where the published `./dist` directory is not automatically included. - 672f4a2: Add `focusable()` type definition. - 2424c0f: Small improvements for improving tree-shakeability of this package. A missing `#__PURE__` annotation has been added to allow dropping one of the top-level calls (if its result stays unused) and removed minification of the file referenced as `package.json#module` to avoid dropping the comments (including existing `#__PURE__` annotations). ## 5.0.0 - Changed code formatting to use dangling commas where ES5 supports them. - Fixed a bug where `<audio controls />` and `<video controls />` elements _without `tabindex` attribute specified_ would be deemed **NOT** tabbable in Chrome, but would be in FireFox, because Chrome has `tabIndex` (the DOM Element property) returning -1 (focusable, but not tabbable), while FireFox has `tabIndex` returning 0 (focusable, and tabbable), yet **both** browsers include these elements in the _regular tab order_ (as if `tabIndex` was 0 for both browsers). Now these elements are considered tabbable in Chrome too! - Add any `<summary>` element directly under a `<details>` element as tabbable and focusable. - **BREAKING**: Changes to the `isTabbableRadio()` internal function in order to better support nested radio buttons: - In case a form parent element exists, include only nested radio inputs from that form. - Ignore checked radio elements from forms different from the one the validated node belongs to. - NOTE: This may result in _less_ radio elements being flagged as tabbable depending on context from the "root" node given to `tabbable()`. - **BREAKING**: The exports have changed to be all named, and separate, as follows in order to help make the module more compatible with tree shaking: - `tabbable` -> `import { tabbable } from 'tabbable'; - `tabbable.isTabbable` -> `import { isTabbable } from 'tabbable'; - `tabbable.isFocusable` -> `import { isFocusable } from 'tabbable'; - Also to help with tree shaking, `package.json` now states `sideEffects: false` to mark this module as having no side effects as a result of merely importing it. - Added new UMD build, see `./dist/index.umd.*`. ## 4.0.0 - Improve performance by changing the method for detecting whether a DOM node is focusable or not. It's expected that this change will _not_ affect results; but this is a major version bump as a warning for you to check your edge cases before upgrading. ## 3.1.2 - Fix reference to root element that caused errors within Shadow DOM. ## 3.1.1 - Allow module to be imported by non-browser JavaScript. ## 3.1.0 - Add `tabbable.isFocusable` and `tabbable.isTabbable` functions. ## 3.0.0 - Add `[contenteditable]` elements. ## 2.0.0 - Add `<audio>` and `<video>` elements with `controls` attributes. - Only consider radio buttons tabbable if they are the `checked` on in their group, or if none in their group are `checked`. ## 1.1.3 - Fix bug causing SVG elements to precede elements they should follow in the tab order in IE. ## 1.1.2 - Ensure `querySelectorAll` receives a string argument. ## 1.1.1 - Fix crash when you call `tabbable(document)` (passing the `document` element). ## 1.1.0 - Add `includeContainer` option. ## 1.0.8 - Allows operation against elements that reside within iframes, by inspecting the element to determine its correct parent `document` (rather than relying on the global `document` object). ## 1.0.7 - Ensure stable sort of `tabindex`ed elements even in browsers that have an unstable `Array.prototype.sort`. ## 1.0.6 - Check `tabindex` attribute (via `getAttribute`), in addition to `node.tabIndex`, to fix handling of SVGs with `tabindex="-1"` in IE. ## 1.0.5 - Children of `visibility: hidden` elements that themselves have `visibility: visible` are considered tabbable. ## 1.0.4 - Fix IE9 compatibility. ## 1.0.3 - Further improvements to caching. ## 1.0.2 - Fix overaggressive caching that would prevent `tabbable` from knowing an element's children had changed. ## 1.0.1 - Fix handling of `<a>` elements with `tabindex="0"`. ## 1.0.0 - Initial release.