Spotlight
An extensible library for 5-way navigation and focus control
Spotlight is an extensible utility that enables users to navigate
applications using a keyboard or television remote control. Responding to input
from the UP, DOWN, LEFT, RIGHT, and RETURN keys, Spotlight
provides a navigation experience that compares favorably to that of a
computer-with-mouse.
Usage
import kind from '@enact/core/kind';
import {SpotlightRootDecorator, Spottable} from '@enact/spotlight';
const MySpottableComponent = Spottable('div');
const MyApp = kind({
name: 'MyApp',
render: () => (<MySpottableComponent>Hello, Enact!</MySpottableComponent>)
});
const MySpotlightApp = SpotlightRootDecorator(MyApp);
See the docs for more information.
Additional Information
When using @enact/moonstone
, the SpotlightRootDecorator
is applied automatically by
MoonstoneDecorator
.
Acknowledgments
Spotlight is based on a fork of JavaScript SpatialNavigation
(c) 2016 Luke Chang, under the terms of the Mozilla Public License.
Copyright and License Information
Unless otherwise specified, all content, including all source code files and
documentation files in this repository are:
Copyright (c) 2012-2016 LG Electronics
Unless otherwise specified or set forth in the NOTICE file, all content,
including all source code files and documentation files in this repository are:
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this content except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
[1.0.0-alpha.3] - 2016-11-8
Note: For those who are using eslint-config-enact
for in-editor linting, there have been some important changes and reinstallation is necessary. Refer to https://github.com/enactjs/eslint-config-enact/ for install instructions or reinstall via:
npm install -g eslint eslint-plugin-react eslint-plugin-babel babel-eslint enactjs/eslint-plugin-enact enactjs/eslint-config-enact
If you don't use in-editor linting or use a different linting configuration, you can safely ignore this notice.
Added
core/dispatcher
- an event dispatcher for global events (e.g. window
and document
events) that fire outside of the React tree- Support for detecting browser locale change events through
languagechange
event in
i18n/I18nDecorator
moonstone/BodyText
, moonstone/DatePicker
, moonstone/DayPicker
, moonstone/ExpandableItem
, moonstone/Image
, and moonstone/TimePicker
componentsfullBleed
prop to moonstone/Panels/Header
. When true
, the header content is indented and the header lines are removed.- Application close button to
moonstone/Panels
. Fires onApplicationClose
when clicked. Can be omitted with the noCloseButton
prop. - Samples for
moonstone/BodyText
, moonstone/DatePicker
, moonstone/DayPicker
,
moonstone/ExpandableItem
, moonstone/Image
, moonstone/Scroller
, moonstone/TimePicker
,
moonstone/VirtualList
, and moonstone/VirtualList.VirtualGridList
spotlightDefaultClass
to @enact/spotlight
export. Applying this class to an item in a
container will cause it to be the default spotted item in that container.- Selection type support to
ui/Group
- Documentation on Flexbox and an Enyo to Enact component migration guide
Changed
data
parameter passed to component
prop of VirtualList
.moonstone/Expandable
into a submodule of moonstone/ExpandableItem
ExpandableList
to properly support selectionmoonstone/Divider
's children
property to be optionalmoonstone/ToggleItem
's inline
version to have a max-width
of 240px
moonstone/Input
to use <div>
instead of <label>
for wrapping components. No change to
functionality, only markup.- Spotlight containers to spot the last focused element by default.
ui/Group
prop select
to childSelect
and added prop select
to support selection types
Removed
moonstone/ExpandableCheckboxItemGroup
in favor of ExpandableList
decorated
prop from @enact/spotlight/focusable
as this relationship is managed
implicitly by the component decorated by @enact/spotlight/focusable
.
Fixed
- Spotlight stops at container boundaries when 5-way key held down
- Several issues related to spotting controls in edge cases