Skip to content

Releases: NoriginMedia/Norigin-Spatial-Navigation

Moved global methods, new features for focus restore and boundary directions

Choose a tag to compare

@asgvard asgvard released this 11 Sep 14:21

Added

  • New property for useFocusable - focusBoundaryDirections, array of directions to block when isFocusBoundary is enabled
  • New property useFocusable - forceFocus to mark the component to be the target for auto-restore focus logic when focus is lost
  • New global method doesFocusableExist to check if the focusable component exists before setting focus on it. Safety feature

Changed

  • [BREAKING] Top level exports setFocus, getCurrentFocusKey, navigateByDirection, pause, resume, updateAllLayouts are now exported from SpatialNavigation instead of useFocusable hook.

Fixed

  • Context display name is now called FocusContext in React Devtools
  • Updating lastFocusedChildKey for newly added parent components

Bugfixes, auto restore focus improvements

Choose a tag to compare

@asgvard asgvard released this 31 Jul 13:00
  • Fixed the issue where component would have kept itself in the array of parentsHavingFocusedChild array after removal
  • Further improvements to autoRestoreFocus logic to trigger not only on Lead components, but also on Parents that had focused child when being removed. Edge case, normally children are removed first.

Bugfixes

Choose a tag to compare

@asgvard asgvard released this 31 Jul 09:36

Fixed

  • Fixed a bug where parents were not updating their hasFocusedChild when new child is created and focused right away
  • Fixed a bug where lastFocusedChild was updated only on blur, but not on manual focus, resulting in a wrong key being stored

Changed

  • Renamed useFocusedContext file to useFocusContext to match the export name

Handling `StrictMode` without custom hook, more debug logs

Choose a tag to compare

@asgvard asgvard released this 11 May 09:19
a6feb4d

Added

  • Extra debug logs, printing focusable components data in addition to DOM nodes.
  • Extra call to set focused state to false on unmount. This is to support "double-mount" in Strict mode in React 18.

Changed

  • [Potentially Breaking] Auto restore focus when the item is removed is now happening with a slight debounced delay. This is done to prevent multiple automatic focus restorations when multiple elements are remove one by one. Now it will accumulate all the auto-restore focus calls into one delayed debounced call with the final target parent to get focused.

Removed

  • Custom useEffectOnce hook that introduced issues with unmounted components being remained as focusable.

Accessibility support: `.focus()` DOM node when the item is focused

Choose a tag to compare

@asgvard asgvard released this 08 May 10:01
4e9e4ec

This release includes support for Accessibility. With the new configuration flag shouldFocusDOMNode it is possible to also set a native browser focus on the DOM node when the item is focused by the library. This allows usage of aria tags for screen readers.

New "useGetBoundingClientRect" config option

Choose a tag to compare

@asgvard asgvard released this 10 Mar 10:53

New init config option useGetBoundingClientRect that affects the measurements of sizes and coordinates.

Added setThrottle

Choose a tag to compare

@guilleccc guilleccc released this 20 Dec 11:27
32dc88d

Added

  • Add setThrottle to dynamically change throttle time. In relation to issue #45

Changed

  • Remove event listeners for unbindEventHandlers regardless of throttle value

Fix focus lost

Choose a tag to compare

@guilleccc guilleccc released this 15 Dec 10:09
6a7e164

Changed

  • Update parentFocusKey when removeFocusable
  • Fix issue with destroy (added bind)

es5 compliant (removed Reflect)

Choose a tag to compare

@guilleccc guilleccc released this 09 Dec 11:44
541634d

Replaced Reflect.deleteProperty with delete, to be es5 compliant.

Accept `focusDetails` argument in focusSelf

Choose a tag to compare

@guilleccc guilleccc released this 07 Dec 14:08
10fe198

Added focusDetails argument in focusSelf (and also in setFocus).

Also, I modified the focusDetails interface to include either an event, nativeEvent or any key-value combination required. This object will be received at the onFocus callback.