blob: 7a6e424c08335fc5b832c75b1d80a3a2cd87a1e9 [file] [log] [blame] [view]
# Module Facet
Modules declare their run-time capabilities (e.g. which Intent actions they
handle) in the module facet of their [component manifest][component-manifest]
(i.e. their `.cmx` file).
## What is a facet?
Component facets are sections in the component manifest which aren't consumed
directly by the component manager, but are left to be defined and consumed by
other parts of Fuchsia. The Modular framework defines a `fuchsia.module` facet
which module authors use to define module specific properties.
This document describes how to declare a module facet in your component
manifest.
## Example
The following is an excerpt of a component manifest that defines a module facet.
```
{
"facets": {
"fuchsia.module": {
"@version": 2,
"suggestion_headline": "See details about person",
"intent_filters": [
{
"action": "com.google.fuchsia.preview.v1",
"parameters": [
{
"name": "entityToPreview",
"type": "https://fuchsia.com/types/Friend"
}
]
}
],
"composition_pattern": "ticker"
}
}
}
```
This module can be launched using an Intent with the action
`com.google.fuchsia.preview.v1` action, and a `entityToPreview` parameter of
type `https://fuchsia.com/types/Friend`.
## Module Facet fields
The module facet is defined under the `fuchsia.module` facet in a component
manifest. See [example](#example).
* `@version` **unsigned integer** *(required)*
- Describes the version of the module facet. The fields below indicate
which minimum `@version` they require.
- **example**: `2`
* `composition_pattern`: **string** *(optional)*
- **minimum `@version`**: 1
- **possible values:**
* `ticker`: Show the module at the bottom of the screen underneath another
module.
* `comments-right`: show the module to the right of other modules.
- **example**: `"ticker"`
- Specifies the compositional pattern that will be used by the story shell
to display this module along-side other modules in the story. For
example, the ticker pattern gives a signal to the story shell that the
module should be placed below another module that it may share a link
with.
* `suggestion_headline`: **string** *(optional)*
- **minimum `@version`**: 2
- **possible values**: UTF-8 string
- **example**: `"See details about this person"`
- A human-readable string that may be used when suggesting this Module.
* `placeholder_color`: **string** *(optional)*
- **minimum `@version`**: 2
- **possible values**: hex color code, leading with a hashtag (`#`)
- **example**: `"#ff00ff"`
- Defines the color of the placeholder widget used while the module loads.
* `intent_filters`: **IntentFilter[]** *(optional)*
- **minimum `@version`**: 2
- **possible values**: JSON list of [IntentFilter](#IntentFilter)
- **example**: See [example](#example).
- A list of different Intent types this Module is able to handle. An
action dictates a semantic function this Module implements, as well as
the role of each of its parameters. When resolving an intent to a
module, the intent resolver uses an index of these intent filter lists
to determine which modules can handle an intent.
### IntentFilter
`IntentFilter` is a JSON object used to describe an intent type that a module is
able to handle. The following describes the fields of the IntentFilter JSON
object:
* `action`: **string** *(required)*
- **minimum `@version`**: 2
- **possible values**: ASCII string
- The action this module is able to handle.
* `parameters`: **ParameterConstraint[]** *(required)*
- **minimum `@version`**: 2
- **possible values**: JSON List of
[ParameterConstraint](#ParameterConstraint)
- Describes the names and types of the parameters required to execute the
specified action. Parameters are typically passed in as Entities.
### ParameterConstraint
`ParameterConstraint` describes a particular intent parameter's name, and it's
acceptable type.
* `name`: **string** *(required)*
- **minimum `@version`**: 2
* `type`: **string** *(required)*
- **minimum `@version`**: 2
- Type that is valid for this parameter.
See [example](#example).
[component-manifest]: /docs/concepts/storage/component_manifest.md