5b64423
: Revised and clarified official browser support (still as broad and deep as reasonably possible).47f62ac
: 🚨 Breaking: Tabbable dependency has been updated to v6.0.0 and contains a breaking change related to detached nodes with its default displayCheck
setting. See tabbable's changelog for more information.5b64423
: 🚨 Breaking: Dropped support of IE browsers, all versions.
f68882e
: Fix docs and typings to clarify that initialFocus, fallbackFocus, and setReturnFocus options can be functions that also return selector strings.8a8b1f1
: Bump tabbable to v5.3.3 to pick up a small bug fix to web component (shadow DOM) support.ef0ce48
: Handle unexpected param (true) passed as the value for the initialFocus
, fallbackFocus
, and setReturnFocus
options: Ignore and perform default behavior.83262a7
: Bumps tabbable to v5.3.2 to pick-up a fix to displayCheck=full
(default) option behavior that caused issues with detached nodes.2a57e4b
: Add new trap.active
and trap.paused
readonly state properties on the trap so that the trap's active/paused state can be queried.8fd49df
: Fixed bug where clickOutsideDeactivate
handler would get called on the 'click' event even if the node clicked was in the trap. As with 'mousedown' and 'touchstart' events where this option is also used, the handler should only get called if the target node is outside the trap.c32c60a
: Fixed: onDeactivate, onPostDeactivate, and checkCanReturnFocus options originally given to createFocusTrap() were not being used by default when calling trap.deactivate({...})
with an option set even if that option set didn't specify any overrides of these options.7c86111
:
^5.3.1
(fixing previous update which was incorrectly set to 5.3.0
).tabbableOptions
not being used in all internal uses of tabbable APIs.displayCheck
option in tabbableOptions
typings and pass it through to tabbable APIs.21458c9
: Bumps tabbable to v5.3.0 and includes all changes from the past v6.8.0 beta releases. The big new feature is opt-in Shadow DOM support in tabbable, and a new getShadowRoot
tabbable option exposed in a new tabbableOptions
focus-trap config option.
getShadowRoot
tabbable option is also passed to focusable()
.v5.3.0-beta.1
tabbableOptions
configuration option, which allows specifically for the new getShadowRoot
Tabbable configuration option: focusTrap.createFocusTrap(rootElement, { tabbableOptions: { getShadowRoot: (node) => closedShadowRoot } })
, for example (where your code has the reference to closedShadowRoot
previously created on node
which Tabbable cannot find on its own).v5.3.0-beta.0
ab20d3d
: Fix issue with focusing negative tabindex node and then tabbing away when this node is not the last node in the trap's container ((#611)[https://github.com/focus-trap/focus-trap/issues/611])c932330
: Fixed bug where tabbing forward from an element with negative tabindex that is last in the trap would result in focus remaining on that element (565)28a069f
: Fix bug from #504 where it's no longer possible to create a trap without any options [#525]893dd2c
: Add document
option to support focus traps inside <iframe>
elements (#97)244f0c1
: Extend the setReturnFocus
option to receive a reference to the element that had focus prior to the trap being activated when a function is specified. Additionally, the function can now return false
to leave focus where it is at the time of deactivation. (#485)60162eb
: Fix bug where KeyboardEvent
was not being passed to escapeDeactivates
option when it's a function (#498)7b6abfa
: Fix how focus-trap determines the event's target, which was preventing traps inside open shadow DOMs from working properly (#496)14b0ee8
: Fix initialFocus
option not supporting function returning false
as documented (#490)24063d7
: Update tabbable to v5.2.1 to get bug fix for disabled fieldsets.281e66c
: Add option to allow no initial focus when trap activates via initialFocus: false
There may be cases where we don't want to focus the first tabbable element when a focus trap activates.
Examples use-cases:
In addition, this change ensures that any element inside the trap manually focused outside of focus-trap
code will be brought back in focus if focus is somehow found outside of the trap.
Example usage:
When the trap activates, there will be no initially focused element inside the new trap.
const focusTrap = createFocusTrap('#some-container', {
initialFocus: false,
});
75be463
: escapeDeactivates
can now be either a boolean (as before) or a function that takes an event and returns a boolean.e2294f0
: Fix race condition when activating a second trap where initial focus in the second trap may be thwarted because pausing of first trap clears the delayInitialFocus
timer created for the second trap before during its activation sequence.c38bf3f
: onPostDeactivate should always be called even if returnFocus/OnDeactivate is disabled.278e77e
: Adding 4 new configuration event options to improve support for animated dialogs and animated focus trap triggers: checkCanFocusTrap()
, onPostActivate()
, checkCanReturnFocus()
, and onPostDeactivate()
.8d11e15
: Improve docs and types for most options, adding SVGElement
as a supported type of "DOM node" since it supports the focus()
method, same as HTMLElement
.21c82ce
: Bump tabbable from 5.1.6 to 5.2.0. There should be no changes in behavior as a result of this upgrade as focus-trap
does not currently leverage the new displayCheck
option.1baf62e
: Fix focus trapped on initial focus container with tabindex=-1 when pressing shift+tab (#363)a882d62
: clickOutsideDeactivates
can now also be a function that returns a boolean
, similar to allowOutsideClick
. The function receives the MouseEvent
that triggered the click. (#289)4d67dee
: Fix a focus escape when pressing TAB after hiding element with focus (#281)ca32014
: Bump tabbable from 5.1.4 to 5.1.5fd3f2d1
: Fix a bug where a multi-container trap would cease to work if all tabbable nodes were removed from one of the containers (fixes #223). As a result, an error is now thrown if the trap is left in a state where none of its containers contain any tabbable nodes (unless a fallbackFocus
node has been configured in the trap's options). Also, the most-recently-focused node is more reliably tracked now, should focus somehow escape the trap and be brought back in by the trap, resulting in the truly most-recently-focused node to regain focus if that ever happens.f0c2aff
: Bump tabbable to 5.1.4 for bug fix.2ba512b
:
./dist
.trap.activate()
and trap.deactivate()
would not always return the trap (now they do in all circumstances).d26d2e1
: Refactoring to use const/let, and simplify a few lines. This does NOT impact the build output published in ./dist
, however, and hence does not impact browser support.6a39217
: Close the gap with #172 and bump tabbable
to 5.1.2 which has a similar fix.756c79d
: Fix #172 (again): 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.00674dd
: Fix #172: Transpile non-minified bundles so they are compatible with IE11.679009b
: Update tabbable dependency to 5.1.1 to get transpiled non-minified bundles.fe2b0ad
: Fixed #103: returnFocusOnDeactivate
is now respected on auto-deactivation with clickOutsideDeactivates=true
.5174ce1
: Add delayInitialFocus option53b906b
: Change prepublishOnly
script to prepare
script so that it also runs if someone installs the package directly from the git repo (e.g. from your work in which you fixed a bug or added a feature you're waiting to get merged to master and published to NPM).31bb28e
: Update tabbable dependency to 5.1.0. The most significant update for focus-trap is a bug fix related to fixed-position containers.694e2fa
: Package main/module entries no longer point to minified bundles.allowOutsideClick
option.preventScroll
feature to prevent scrolling to the element getting focus if not in the viewport.isTabbableRadio()
internal function.package.json
state sideEffects: false
to mark this module as having no side effects as a result of merely importing it.package.json
's "main" no longer points to ./index.js
in the package (although it still points to a CJS module, so it's possible this actually doesn't break anything). It now has:
dist/focus-trap.min.js
(the CJS bundle)dist/focus-trap.esm.min.js
(the new ESM bundle)dist/focus-trap.umd.min.js
if needed (convenient for loading directly in an older browser that doesn't support ESM)const { createFocusTrap } = require('focus-trap');
to get the function from before.import { createFocusTrap } from 'focus-trap';
to import the module.dist/focus-trap.esm.*
.dist/focus-trap.umd.*
.setReturnFocus
option that allows you to set which element receives focus when the trap closes.allowOutsideClick
option that allows you to pass a click event through, even when clickOutsideDeactivates
is false
.onActivate
callback changes the list of tabbable nodes and the initialFocus
option is not used, the initial focus will still go to the first element present before the callback.passive: false
).(Release 4.0.1 was a mistake, containing no changes.)
clickOutsideDeactivates
and returnFocusOnDeactivate
are both true
, focus will be returned to the pre-trap element only if the clicked element is not focusable."main"
field in package.json
.unpkg.com
.activate
function.tabindex
and is in the middle of other tabbable elements.initialFocus
and fallbackFocus
options can take functions that return DOM nodes.pause
and unpause
cannot accidentally add extra event listeners.initialFocus
.fallbackFocus
option.clickOutsideDeactivates
no longer triggers deactivation when you click inside the trap.tabbable
to fix handling of traps with changing contents.clickOutsideDeactivates
functionality.clickOutsideDeactivates
option.escapeDeactivates
option.select()
<input>
elements when they receive focus via tab.