blob: 44e88c3784aabc6a6d005ccfe03c1eb2c99ebca8 [file] [log] [blame] [view]
# Elements {#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}
Elements are [components][doc-component] with key-value annotations. 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:
* Being identifiable by their component URLs, and having
[component manifests][doc-component-manifest].
* Participating 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. These
annotations are first set 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, a for graphical element's annotations may specify if the presentation
should hide system chrome, allow for certain types of gestures, and so on.
## Elements are portable across products {#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.
While the specific meanings of different annotation keys and their
respective values are not prescribed by the Fuchsia platform, some keys do
have recommended meanings with recommended standard schemas.
## Further reading {#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
[doc-graphical-presenter]: /docs/concepts/session/graphical_presenter.md