blob: 77057b1109a885a9c1176ba2cb64a50844483ca3 [file] [log] [blame] [view]
# Elements
*tl;dr:* Elements are components added to a session as a result of user
interaction, similar to "apps" on other platforms.
This document provides a brief conceptual overview of elements, element
annotations, and their relationship to [components][doc-component].
## Elements are components
Elements are [components][doc-component] with key-value annotations. All
elements are implemented as components. While any component could hypothetically
be instantiated as an element, elements [contribute more directly](#element-ui)
to the user experience of a product, much like an "app" would on other
platforms.
Since elements are components, they inherit all component properties, such as:
* Elements are identified by their component URL, and have a [component
manifest][doc-component-manfest].
* Elements participate in [capability routing][doc-capability-routing].
Elements are typically instantiated in [component
collections][doc-component-collection] within the session component.
## Elements provide a UI {#element-ui}
Elements contribute to the user experience of a product by providing a visual,
audible, or other discernible interaction with the user. The specific modes of
interaction available to, and expected from, an element, are defined by the
product and its configuration. The most common mode of output is graphical.
## Elements have annotations {#element-annotations}
Every element has an associated list of mutable key-value annotations, set first
when the element instance is added to a product experience at runtime. Element
annotations are used by the product's "user experience presenter" to control
details of the element's presentation. For example, for graphical elements
annotations may specify if presentation should hide system chrome, allow for
certain types of gestures, and so on.
## Elements are portable across products
Elements are an abstraction intended to make it easier to interactively run
components on many different Fuchsia products and varying product
configurations. An element's primary interaction surface with a product are
defined by:
* The mechanism by which it presents itself (graphically using Scenic, through
audio, and so on).
* The mechanism by which it receives user input (finger touches, gestures,
keyboard, and so on).
* The semantic meaning associated with its various annotations.
Although none of these mechanisms are strictly defined by the Fuchsia platform,
some are standardized and intended to be re-used across all products built with
Fuchsia.
For example, the specific meanings of different annotation keys and their
respective values are not prescribed by the Fuchsia platform. Some keys
have recommended meanings, with recommended standard schemas.
## Further reading
* [Graphical Presenter][doc-graphical-presenter]: a component role and protocol
for presenting elements using Fuchsia's graphical compositor,
[Scenic][doc-scenic].
[doc-component]: /docs/concepts/components/v2/introduction.md
[doc-component-manifest]: /docs/concepts/components/v2/component_manifests.md
[doc-capability-routing]: /docs/concepts/components/v2/topology.md#capability-routing
[doc-scenic]: /docs/concepts/graphics/scenic/scenic.md
[doc-component-collection]: /docs/concepts/components/v2/realms.md#collections