# Getting Started

Learn how to create a cross-platform app with ULT

1\. Select your package manager and run the command to create your new project

{% tabs %}
{% tab title="NPM" %}

```bash
npx ult <project>
```

{% endtab %}

{% tab title="Yarn" %}

```bash
yarn dlx ult <project>
```

{% endtab %}
{% endtabs %}

2\. Choose a task from the table below to run with your selected package manager

{% tabs %}
{% tab title="NPM" %}

```bash
npm run <task>
```

{% endtab %}

{% tab title="Yarn" %}

```bash
yarn run <task>
```

{% endtab %}
{% endtabs %}

| Task          | Description                    |
| ------------- | ------------------------------ |
| web           | Start development on Web       |
| android       | Start development on Android   |
| ios           | Start development on iOS       |
| macos         | Start development on MacOS     |
| windows       | Start development on Windows   |
| build-web     | Build a production Web bundle  |
| build-android | Build a production Android app |
| build-ios     | Build a production iOS app     |
| build-macos   | Build a production MacOS app   |
| build-windows | Build a production Windows app |


# View

This component is a generic container for other components.

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                                 | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------------------------ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **accessibilityLabel**               | `string`                                     | <ul><li>Alternate text for screen readers</li><li>If not defined, title prop is used</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **accessibilityTraits**              | `AccessibilityTrait \| AccessibilityTrait[]` | <ul><li>Traits used to hint screen readers, etc.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| **accessibilityLiveRegion**          | `AccessibilityLiveRegion`                    | <ul><li>Region for accessibility mechanisms</li><li>Android and web only</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| **accessibilityId**                  | `string`                                     | <ul><li>It is hard or impossible to tell by a reference to an instance of a component from where this component has been instantiated</li><li>You can assign this property and check instance.props.accessibilityId</li><li>For example accessibilityId is used in View's FocusArbitrator callback</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **activeOpacity**                    | `number`                                     | <ul><li>Opacity value the button should animate to, on touch on views that have onPress handlers </li><li>iOS and Android only</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| **animateChildEnter**                | `boolean`                                    | <ul><li><p>Animation of children:</p><ul><li>Every child must have a <code>key</code></li><li>String refs aren't supported on children, only callback refs are</li></ul></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| **animateChildLeave**                | `boolean`                                    | <ul><li><p>Animation of children </p><ul><li>Every child must have a <code>key</code></li><li>String refs aren't supported on children, only callback refs are </li></ul></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| **animateChildMove**                 | `boolean`                                    | <ul><li><p>Animation of children </p><ul><li>Every child must have a <code>key</code></li><li>String refs aren't supported on children, only callback refs are</li></ul></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| **ariaLabelledBy**?                  | `string`                                     | <ul><li>Id of an element that describes the view for screen-reader</li><li>Web only</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| **ariaRoleDescription**?             | `string`                                     | <ul><li>A custom role description to be read by the screen-readers</li><li>Web only </li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **blockPointerEvents**               | `boolean`                                    | <ul><li>Block touches for this component and all of its children</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| **disableTouchOpacityAnimation**     | `boolean`                                    | <ul><li>Disable default opacity animation on touch on views that have onPress handlers  </li><li>iOS and Android only</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **id**                               | `string`                                     | <ul><li>Specifies a unique id for an HTML element </li><li>NOTE: This property may be going away in future versions</li><li>Web only </li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **ignorePointerEvents**              | `boolean`                                    | <ul><li>Ignore clicks and other mouse events, allowing children or components behind to receive them</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **importantForAccessibility**?       | `ImportantForAccessibility`                  | <ul><li>Expose the element and/or its children as accessible to screen-readers </li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| **restrictFocusWithin**              | `boolean`                                    | <ul><li>When the keyboard navigation is happening, restrict the focusable elements within this view</li><li> Useful for popups and modals, you might want to prevent the focus from going outside of the popup or modal</li><li>The views with restrictFocusWithin are stacked and the last mounted view is a winner</li><li>This means if you, for example, have restricted the focus within some modal, and you have a popup (which also desires for a restricted focus) inside this modal, the popup will get the restriction, but when dismissed, the restriction will be restored for the modal</li><li>See also the companion method setFocusRestricted() below</li><li>WARNING: For the sake of performance, this property is readonly and changing it during the View life cycle will produce an error</li></ul>                                                                                        |
| **limitFocusWithin**                 | `LimitFocusType`                             | <ul><li>When the keyboard navigation is happening, do not focus on this view and on all focusable elements inside this view</li><li>See also the companion method setFocusLimited() below</li><li>Useful for the list items, allows to skip the consecutive focusing on one list item (and item's internal focusable elements) after another using the Tab key and implement the switching between the items using the arrow keys (or using some other behaviour)</li><li>When limitFocusWithin=LimitFocusType.Limited, the View and the focusable components inside the View get both tabIndex=-1 and aria-hidden=true</li><li>When limitFocusWithin=LimitFocusType.Accessible, the View and the focusable components inside the View get only tabIndex=-1.</li><li>WARNING: For the sake of performance, this property is readonly and changing it during the View life cycle will produce an error</li></ul> |
| **autoFocus**                        | `boolean`                                    | <ul><li>Should be focused when the component is mounted, see also arbitrateFocus property below</li><li>WARNING: autoFocus=true means that this View's requestFocus() method will be called, however calling requestFocus() might have no effect (for example on web View is focusable only when tabIndex is specified), the application has to handle this either while setting this property or in the View's FocusArbitrator callback</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| **arbitrateFocus**                   | `FocusArbitrator`                            | <ul><li>When multiple components with autoFocus=true inside this View are mounting at the same time, and/or multiple components inside this view have received focus() call during the same render cycle, this callback will be called so that it's possible for the application to decide which one should actually be focused</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| **importantForLayout**               | `boolean`                                    | <ul><li>Additional invisible DOM elements will be added inside the view to track the size changes that are performed behind our back by the browser's layout engine faster (ViewBase checks for the layout updates once a second and sometimes it's not fast enough) </li><li>Web only </li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **onDragStart**                      | `(e: DragEvent) => void`                     | <ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **onDrag**                           | `(e: DragEvent) => void`                     | <p></p><ul><li>Mouse-specific Events</li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **onDragEnd**                        | `(e: DragEvent) => void`                     | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onDragEnter**                      | `(e: DragEvent) => void`                     | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onDragOver**                       | `(e: DragEvent) => void`                     | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onDragLeave**                      | `(e: DragEvent) => void`                     | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onDrop**                           | `(e: DragEvent) => void`                     | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onMouseEnter**                     | `(e: MouseEvent) => void`                    | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onMouseLeave**                     | `(e: MouseEvent) => void`                    | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onMouseMove**                      | `(e: MouseEvent) => void`                    | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onMouseOver**                      | `(e: MouseEvent) => void`                    | <p></p><ul><li>Mouse-specific Events </li><li>For drag specific events, if onDragStart is present, the view is draggable</li><li> onDragStart/onDrag/onDragEnd are source specific events</li><li>onDragEnter/onDragOver/onDragLeave/onDrop are destination specific events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **onContextMenu**                    | `(e: React.SyntheticEvent) => void`          | <ul><li>Mouse & Touch Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| **onPress**                          | `(e: SyntheticEvent) => void`                | <ul><li>Mouse & Touch Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| **onFocus**                          | `(e: FocusEvent) => void`                    | <ul><li>Focus Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **onBlur**                           | `(e: FocusEvent) => void`                    | <ul><li>Focus Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **onKeyPress**                       | `(e: KeyboardEvent) => void`                 | <ul><li>Keyboard Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **onTouchStartCapture**              | `(e: React.SyntheticEvent) => void`          | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onTouchMoveCapture**               | `(e: React.SyntheticEvent) => void`          | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onLongPress**                      | `(e: SyntheticEvent) => void`                | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onMoveShouldSetResponder**         | `(e: React.SyntheticEvent) => boolean`       | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onMoveShouldSetResponderCapture**  | `(e: React.SyntheticEvent) => boolean`       | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onResponderGrant**                 | `(e: React.SyntheticEvent) => void`          | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onResponderReject**                | `(e: React.SyntheticEvent) => void`          | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onResponderRelease**               | `(e: React.SyntheticEvent) => void`          | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onResponderStart**                 | `(e: React.TouchEvent) => void`              | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onResponderMove**                  | `(e: React.TouchEvent) => void`              | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onResponderEnd**                   | `(e: React.TouchEvent) => void`              | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onResponderTerminate**             | `(e: React.SyntheticEvent) => void`          | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onResponderTerminationRequest**    | `(e: React.SyntheticEvent) => boolean`       | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onStartShouldSetResponder**        | `(e: React.SyntheticEvent) => boolean`       | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onStartShouldSetResponderCapture** | `(e: React.SyntheticEvent) => boolean`       | <ul><li>Touch-specific Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **onLayout**                         | `(e: ViewOnLayoutEvent) => void`             | <ul><li>Other Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **shouldRasterizeIOS**               | `boolean`                                    | <ul><li>Rasterize contents using offscreen bitmap (perf optimization) </li><li>iOS only</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **tabIndex**                         | `number`                                     | <ul><li>Keyboard tab order</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **testId**                           | `string`                                     | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **title**                            | `string`                                     | <ul><li>Text for a tooltip</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **style**                            | `ViewStyleRuleSet \| ViewStyleRuleSet[]`     | <ul><li>See below for supported styles</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| **viewLayerTypeAndroid**             | `'none' \| 'software' \| 'hardware'`         | <ul><li>Should use hardware or software rendering?</li><li>Android only property </li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **underlayColor**                    | `string`                                     | <ul><li>Background color that will be visible on touch on views that have onPress handlers </li><li>iOS and Android only</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| **useSafeInsets**                    | `boolean`                                    | <ul><li><p>When true:</p><ul><li> Renders children within the safe area boundaries of a device, i.e. with padding with ensure the children don't cover navigation bars, toolbars etc. </li><li>Applies a style of { flex: 1, alignSelf: 'stretch' } to this view</li><li>Some ViewProps may be ignored. iOS only</li></ul></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |


# Scroll

This component is a generic container for other components. Unlike View, it supports scrolling, panning, and zooming so it is possible to view larger contents off-screen.

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                               | Type                                                    | Description                                                                                                                                                                                                                                                                                                                                        |
| ---------------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **bounces**                        | `boolean`                                               | <ul><li>Should scroll bar bounce when user hits the bounds?</li><li>iOS only</li></ul>                                                                                                                                                                                                                                                             |
| **horizontal**                     | `boolean`                                               | <ul><li>Does it support scrolling in the horizontal and/or vertical directions?</li></ul>                                                                                                                                                                                                                                                          |
| **vertical**                       | `boolean`                                               | <ul><li>Does it support scrolling in the horizontal and/or vertical directions?</li></ul>                                                                                                                                                                                                                                                          |
| **keyboardDismissMode**            | `'none' \| 'interactive' \| 'on-drag'`                  | <ul><li>When the user scrolls the view, how should the on-screen keyboard react?</li><li>Native only</li></ul>                                                                                                                                                                                                                                     |
| **keyboardShouldPersistTaps**      | `boolean \| 'always' \| 'never' \| 'handled' = 'never'` | <ul><li>Should the on-screen keyboard remain visible when the user taps the scroll view?</li><li>Native</li></ul>                                                                                                                                                                                                                                  |
| **onContentSizeChange**            | `(width: number, height: number) => void`               | <ul><li>Invoked when the contents of the scroll view change</li></ul>                                                                                                                                                                                                                                                                              |
| **onFocus**                        | `undefined`                                             | <ul><li>Focus Events</li></ul>                                                                                                                                                                                                                                                                                                                     |
| **onBlur**                         | `undefined`                                             | <ul><li>Focus Events</li></ul>                                                                                                                                                                                                                                                                                                                     |
| **onKeyPress**                     | `undefined`                                             | <ul><li>Keyboard Events</li></ul>                                                                                                                                                                                                                                                                                                                  |
| **onLayout**                       | `undefined`                                             | <ul><li>Invoked when view dimensions or position changes</li></ul>                                                                                                                                                                                                                                                                                 |
| **onScroll**                       | `undefined`                                             | <ul><li>Called when the scroll position changes</li></ul>                                                                                                                                                                                                                                                                                          |
| **onScrollBeginDrag**              | `undefined`                                             | <ul><li>Called when the user starts or stops scrolling (touch-based systems only)</li></ul>                                                                                                                                                                                                                                                        |
| **onScrollEndDrag**                | `undefined`                                             | <ul><li>Called when the user starts or stops scrolling (touch-based systems only)</li></ul>                                                                                                                                                                                                                                                        |
| **scrollXAnimatedValue**?          | `AnimatedValue`                                         | <ul><li>AnimatedValue objects hooked up to either (or both) of these properties will be automatically hooked into the onScroll handler of the scrollview and .setValue() will be called on them with the updated values</li><li>On supported platforms, it will use RN.Animated.event() to do // a native-side/-backed coupled animation</li></ul> |
| **scrollYAnimatedValue**?          | `AnimatedValue`                                         | <ul><li>AnimatedValue objects hooked up to either (or both) of these properties will be automatically hooked into the onScroll handler of the scrollview and .setValue() will be called on them with the updated values </li><li>On supported platforms, it will use RN.Animated.event() to do a native-side/-backed coupled animation</li></ul>   |
| **overScrollMode**?                | `'auto' \| 'always' \| 'never'`                         | <ul><li>Android only property to control overScroll mode</li></ul>                                                                                                                                                                                                                                                                                 |
| **pagingEnabled**                  | `boolean`                                               | <ul><li>Snap to page boundaries?</li></ul>                                                                                                                                                                                                                                                                                                         |
| **snapToInterval**                 | `number`                                                | <ul><li>Snap to page boundaries?</li></ul>                                                                                                                                                                                                                                                                                                         |
| **scrollEnabled**                  | `boolean`                                               | <ul><li>Is scrolling enabled?</li></ul>                                                                                                                                                                                                                                                                                                            |
| **scrollEventThrottle**            | `number`                                                | <ul><li>Minimum duration (in milliseconds) between scroll events</li></ul>                                                                                                                                                                                                                                                                         |
| **scrollIndicatorInsets**          | `ScrollIndicatorInsets`                                 | <ul><li>Inset (in pixels) of scroll indicator from top/bottom (vertical) or left/right (horizontal)</li></ul>                                                                                                                                                                                                                                      |
| **scrollsToTop**                   | `boolean`                                               | <ul><li>If true, this scroll bar scrolls to the top when the user taps on the status bar</li></ul>                                                                                                                                                                                                                                                 |
| **showsHorizontalScrollIndicator** | `boolean`                                               | <ul><li>Should the indicator be displayed?</li></ul>                                                                                                                                                                                                                                                                                               |
| **showsVerticalScrollIndicator**   | `boolean`                                               | <ul><li>Should the indicator be displayed?</li></ul>                                                                                                                                                                                                                                                                                               |
| **style**                          | `ViewStyleRuleSet \| ViewStyleRuleSet[]`                | <ul><li>See below for supported styles</li></ul>                                                                                                                                                                                                                                                                                                   |
| **tabNavigation**?                 | `'local' \| 'cycle' \| 'once'`                          | <ul><li>Windows-only property to control tab navigation inside the view</li></ul>                                                                                                                                                                                                                                                                  |
| **testId**                         | `string`                                                | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                                                                                                                                                                                                                                    |


# Gesture

This component is a generic container for other components. It supports multiple gestures – tapping, double-tapping, long-pressing, panning, and pinching.

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                           | Type                                              | Description                                                                                                                                                 |
| ------------------------------ | ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **accessibilityLabel**         | `string`                                          | <ul><li>Alternate text for screen readers</li></ul>                                                                                                         |
| **accessibilityTraits**        | `AccessibilityTrait \| AccessibilityTrait[]`      | <ul><li>Traits used to hint screen readers, etc.</li></ul>                                                                                                  |
| **importantForAccessibility**? | `ImportantForAccessibility`                       | <ul><li>Expose the element and/or its children as accessible to Screen readers</li></ul>                                                                    |
| **onPinchZoom**                | `(gestureState: MultiTouchGestureState) => void`  | <ul><li>Gestures and attributes that apply only to touch inputs</li></ul>                                                                                   |
| **onRotate**                   | `(gestureState: MultiTouchGestureState) => void`  | <ul><li>Gestures and attributes that apply only to touch inputs</li></ul>                                                                                   |
| **onScrollWheel**              | `(gestureState: ScrollWheelGestureState) => void` | <ul><li>Gestures and attributes that apply only to mouse inputs</li></ul>                                                                                   |
| **mouseOverCursor**            | `GestureMouseCursor`                              | <ul><li>Gestures and attributes that apply only to mouse inputs</li></ul>                                                                                   |
| **onPan**                      | `(gestureState: PanGestureState) => void`         | <ul><li>Gestures and attributes that apply to either touch or mouse inputs</li></ul>                                                                        |
| **onPanVertical**              | `(gestureState: PanGestureState) => void`         | <ul><li>Gestures and attributes that apply to either touch or mouse inputs</li></ul>                                                                        |
| **onPanHorizontal**            | `(gestureState: PanGestureState) => void`         | <ul><li>Gestures and attributes that apply to either touch or mouse inputs</li></ul>                                                                        |
| **onTap**                      | `(gestureState: TapGestureState) => void`         | <ul><li>Gestures and attributes that apply to either touch or mouse inputs</li></ul>                                                                        |
| **onDoubleTap**                | `(gestureState: TapGestureState) => void`         | <ul><li>Gestures and attributes that apply to either touch or mouse inputs</li></ul>                                                                        |
| **onContextMenu**              | `(gestureState: TapGestureState) => void`         | <ul><li>Gestures and attributes that apply to either touch or mouse inputs</li></ul>                                                                        |
| **onLongPress**                | `(gestureState: TapGestureState) => void`         | <ul><li>Gestures and attributes that apply to either touch or mouse inputs</li></ul>                                                                        |
| **onFocus**                    | `(e: FocusEvent) => void`                         | <ul><li>Focus Events</li></ul>                                                                                                                              |
| **onBlur**                     | `(e: FocusEvent) => void`                         | <ul><li>Focus Events</li></ul>                                                                                                                              |
| **onKeyPress**                 | `(e: KeyboardEvent) => void`                      | <ul><li>Keyboard Events</li></ul>                                                                                                                           |
| **preferredPan**               | `PreferredPanGesture = undefined`                 | <ul><li>We can set vertical or horizontal as preferred</li></ul>                                                                                            |
| **panPixelThreshold**          | `number`                                          | <ul><li>How many pixels (in either horizontal or vertical direction) until pan is recognized? </li><li>Default is 10</li><li>Can be any value > 0</li></ul> |
| **releaseOnRequest**           | `boolean`                                         | <ul><li>Something else wants to become responder. Should this view release the responder? </li><li>Setting true allows release.</li></ul>                   |
| **testId**                     | `string`                                          | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                                             |


# Button

This component is a generic container for other components. However, it adds some additional capabilities – support for presses or clicks and hovering.

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                             | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                         |
| -------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **accessibilityLabel**           | `boolean`                                    | <ul><li>Text to be used by screen readers</li></ul>                                                                                                                                                                                                                                                                                                                                                                 |
| **accessibilityTraits**          | `AccessibilityTrait\| AccessibilityTrait[]`  | <ul><li>Traits used to hint screen readers, etc.</li></ul>                                                                                                                                                                                                                                                                                                                                                          |
| **accessibilityId**              | `string`                                     | <ul><li>You can assign this property, and check instance.props.accessibilityId.</li><li>For example accessibilityId is used, in View's FocusArbitrator callback</li></ul>                                                                                                                                                                                                                                           |
| **activeOpacity**                | `number`                                     | <ul><li>Opacity value the button should animate to on button touch</li><li> iOS and Android only</li></ul>                                                                                                                                                                                                                                                                                                          |
| **ariaControls**                 | `string`                                     | <ul><li>Id of an expandable element revealed by the button</li><li>Describes a relation between button and element to screen reader</li><li>Web only</li></ul>                                                                                                                                                                                                                                                      |
| **id**                           | `string`                                     | <ul><li>Specifies a unique id for an HTML element </li><li>NOTE: This property may be going away in future versions</li><li>Web only</li></ul>                                                                                                                                                                                                                                                                      |
| **importantForAccessibility**?   | `ImportantForAccessibility`                  | <ul><li>Expose the element and/or its children as accessible to Screen readers</li></ul>                                                                                                                                                                                                                                                                                                                            |
| **delayLongPress**               | `number`                                     | <ul><li>Delay in ms before onLongPress is called</li></ul>                                                                                                                                                                                                                                                                                                                                                          |
| **disabled**                     | `boolean`                                    | <ul><li>If disabled, touch and mouse input events are ignored</li></ul>                                                                                                                                                                                                                                                                                                                                             |
| **disabledOpacity**              | `number`                                     | <ul><li>By default, opacity of a disabled element is 0.5</li><li>This value can be overridden with this property</li></ul>                                                                                                                                                                                                                                                                                          |
| **disableTouchOpacityAnimation** | `boolean`                                    | <ul><li>Disable default opacity animation on touch of buttons</li></ul>                                                                                                                                                                                                                                                                                                                                             |
| **autoFocus**                    | `boolean`                                    | <ul><li>Should be focused when the component is mounted, see also View's arbitrateFocus property</li><li>WARNING: autoFocus=true means that this Button's requestFocus() method will be called, however calling requestFocus() might have no effect (for example the button is disabled), the application has to handle this either while setting this property or in the View's FocusArbitrator callback</li></ul> |
| **onAccessibilityTapIOS**        | `(e: SyntheticEvent)=> void`                 | <ul><li>Called when VoiceOver is on and the user double tapped to activate a control</li><li>iOS Only</li></ul>                                                                                                                                                                                                                                                                                                     |
| **onFocus**                      | `(e: FocusEvent) => void`                    | <ul><li>Focus Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                      |
| **onBlur**                       | `(e: FocusEvent) => void`                    | <ul><li>Focus Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                      |
| **onHoverStart**                 | `(e: SyntheticEvent) => void`                | <ul><li>Called when the mouse cursor enters or leaves the view boundsOnHoverEnd</li></ul>                                                                                                                                                                                                                                                                                                                           |
| **onHoverEnd**                   | `(e: SyntheticEvent) => void`                | <ul><li>Called when the mouse cursor enters or leaves the view bounds</li></ul>                                                                                                                                                                                                                                                                                                                                     |
| **onKeyPress**                   | `(e: KeyboardEvent) => void`                 | <ul><li>Keyboard Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                   |
| **onLongPress**                  | `(e: SyntheticEvent) => void`                | <ul><li>Called when the user has pressed and held for a specified duration</li></ul>                                                                                                                                                                                                                                                                                                                                |
| **onPress**                      | `(e: SyntheticEvent) => void`                | <ul><li>Called when the touch or mouse button is released within the bounds of the view and the press has not been canceled</li></ul>                                                                                                                                                                                                                                                                               |
| **onPressIn**                    | `(e: SyntheticEvent) => void`                | <ul><li>Called when touch is initiated or mouse button is pressed</li></ul>                                                                                                                                                                                                                                                                                                                                         |
| **onPressOut**                   | `(e: SyntheticEvent) => void`                | <ul><li>Called when touch or the mouse button is released or the user's finger or mouse cursor is no longer over the view</li></ul>                                                                                                                                                                                                                                                                                 |
| **shouldRasterizeIOS**           | `boolean`                                    | <ul><li>Rasterize contents using offscreen bitmap (perf optimization)</li><li>ios only </li></ul>                                                                                                                                                                                                                                                                                                                   |
| **style**                        | `ButtonStyleRuleSet \| ButtonStyleRuleSet[]` | <ul><li>See below for supported styles</li></ul>                                                                                                                                                                                                                                                                                                                                                                    |
| **tabIndex**                     | `number`                                     | <ul><li>Keyboard tab order</li></ul>                                                                                                                                                                                                                                                                                                                                                                                |
| **testId**                       | `string`                                     | <ul><li>ID that can be used to identify the instantiated element for testing purposes.</li></ul>                                                                                                                                                                                                                                                                                                                    |
| **title**                        | `string`                                     | <ul><li>Text for a tooltip</li></ul>                                                                                                                                                                                                                                                                                                                                                                                |
| **underlayColor**                | `string`                                     | <ul><li>Background color that will be visible on button touch </li><li>iOS and Android only</li></ul>                                                                                                                                                                                                                                                                                                               |


# Text

This component displays basic text. Its children must be a string literal or a series of children that are either Text components or View components with a fixed height and width.

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                          | Type                                     | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ----------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **allowFontScaling**          | `boolean`                                | <ul><li>Should fonts be scaled according to system setting?</li><li>Android and ios only</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **ellipsizeMode**             | `'head' \| 'middle' \| 'tail'`           | <ul><li><p>When numberOfLines is set, this prop defines how text will be truncated.</p><ul><li>head: The line is displayed so that the end fits in the container and the missing text at the beginning of the line is indicated by an ellipsis glyph. e.g., "...wxyz"</li><li>middle: The line is displayed so that the beginning and end fit in the container and the missing text in the middle is indicated by an ellipsis glyph. "ab...yz"</li><li> tail: The line is displayed so that the beginning fits in the container and the missing text at the end of the line is indicated by an ellipsis glyph. e.g., "abcd..." </li></ul></li><li>Android and ios only</li></ul> |
| **id**                        | `string`                                 | <ul><li>Specifies a unique id for an HTML element</li><li>NOTE: This property may be going away in future versions</li><li>Web only </li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| **importantForAccessibility** | `ImportantForAccessibility`              | <ul><li>Expose the element and/or its children as accessible to Screen readers</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **accessibilityId**           | `string`                                 | <ul><li>It is hard or impossible to tell by a reference to an instance of a component from where this component has been instantiated. </li><li>You can assign this property and check instance.props.accessibilityId</li><li>For example accessibilityId is used in View's FocusArbitrator callback</li></ul>                                                                                                                                                                                                                                                                                                                                                                   |
| **autoFocus**                 | `boolean`                                | <ul><li>Should be focused when the component is mounted, see also View's arbitrateFocus property</li><li>WARNING: autoFocus=true means that this Text's requestFocus() method will be called, however calling requestFocus() for Text might make sense only on mobile for the accessibility reasons, on web it has no effect, the application has to handle this either while setting this property or in the View's FocusArbitrator callback</li></ul>                                                                                                                                                                                                                          |
| **numberOfLines**             | `number`                                 | <ul><li>For non-zero values, truncates with ellipsis if necessary. </li><li>Web platform doesn't support values greater than 1</li><li>Web platform may also not truncate properly if text contains line breaks, so it may be necessary to replace line breaks before rendering.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                       |
| **onPress**?                  | `(e: SyntheticEvent) => void`            | <ul><li>Mouse & Touch Events</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **selectable**                | `boolean`                                | <ul><li>Is the text selectable (affects mouse pointer and copy command)</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| **style**                     | `TextStyleRuleSet \| TextStyleRuleSet[]` | <ul><li>See below for supported styles</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **testId**                    | `string`                                 | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |


# TextInput

This component provides single and multi-line text input capabilities.

### Styles

* Text Styles
* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                     | Type                                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                           |
| ------------------------ | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **accessibilityLabel**   | `boolean`                                                    | <ul><li>Text to be used by screen readers</li></ul>                                                                                                                                                                                                                                                                                                                                                                   |
| **accessibilityId**      | `string`                                                     | <ul><li>It is hard or impossible to tell by a reference to an instance of a component from where this component has been instantiated</li><li>You can assign this property and check instance.props.accessibilityId </li><li>For example accessibilityId is used in View's FocusArbitrator callback</li></ul>                                                                                                         |
| **allowFontScaling**     | `boolean`                                                    | <ul><li>Should fonts be scaled according to system setting?</li><li>Android and iOS only</li></ul>                                                                                                                                                                                                                                                                                                                    |
| **autoCapitalize**       | `'none' \| 'sentences' \|'words' \|'characters'`             | <ul><li>Auto-capitalization mode</li></ul>                                                                                                                                                                                                                                                                                                                                                                            |
| **autoCorrect**          | `boolean`                                                    | <ul><li>Should auto-correction be applied to contents?</li></ul>                                                                                                                                                                                                                                                                                                                                                      |
| **autoFocus**            | `boolean`                                                    | <ul><li>Should be focused when the component is mounted, see also View's arbitrateFocus property</li><li>WARNING: autoFocus=true means that this TextInput's requestFocus() method will be called, however calling requestFocus() might have no effect (for example the input is disabled), the application has to handle this either while setting this property or in the View's FocusArbitrator callback</li></ul> |
| **blurOnSubmit**         | `boolean`                                                    | <ul><li>Should focus be lost after submitting?</li></ul>                                                                                                                                                                                                                                                                                                                                                              |
| **clearButtonMode**      | `'never' \| 'while-editing' \| 'unless-editing' \| 'always'` | <ul><li>iOS and Windows only property for controlling when the clear button should appear on the right side of the text view</li><li>Default behavior dependends  on platform: equivalent to 'never' on iOS, and 'always' on Windows</li></ul>                                                                                                                                                                        |
| **defaultValue**         | `string`                                                     | <ul><li>Initial value that will change when the user starts typing</li></ul>                                                                                                                                                                                                                                                                                                                                          |
| **disableFullscreenUI**  | `boolean`                                                    | <ul><li>Disable full screen editor mode?</li></ul>                                                                                                                                                                                                                                                                                                                                                                    |
| **editable**             | `boolean`                                                    | <ul><li>Can text be edited by the user?</li></ul>                                                                                                                                                                                                                                                                                                                                                                     |
| **keyboardAppearance**   | `'default' \| 'light' \| 'dark'`                             | <ul><li>iOS-only prop for controlling the keyboard appearance</li></ul>                                                                                                                                                                                                                                                                                                                                               |
| **keyboardType**         | `'default' \| 'numeric' \| 'email-address' \| 'number-pad'`  | <ul><li>On-screen keyboard type to display</li></ul>                                                                                                                                                                                                                                                                                                                                                                  |
| **maxLength**            | `number`                                                     | <ul><li>Maximum character count</li></ul>                                                                                                                                                                                                                                                                                                                                                                             |
| **multiline**            | `boolean`                                                    | <ul><li>Should the control support multiple lines of text?</li></ul>                                                                                                                                                                                                                                                                                                                                                  |
| **onBlur**               | `() => void`                                                 | <ul><li>Called when the control loses focus</li></ul>                                                                                                                                                                                                                                                                                                                                                                 |
| **onChangeText**         | `(newValue: string) => void`                                 | <ul><li>Called when the text value changes</li></ul>                                                                                                                                                                                                                                                                                                                                                                  |
| **onFocus**              | `() => void`                                                 | <ul><li>Called when the control obtains focus</li></ul>                                                                                                                                                                                                                                                                                                                                                               |
| **onKeyPress**           | `(e: KeyboardEvent) => void`                                 | <ul><li>Called on a key event</li></ul>                                                                                                                                                                                                                                                                                                                                                                               |
| **onPaste**              | `(e: ClipboardEvent) => void`                                | <ul><li>Called when text is pasted into the control (not currently supported on iOS or Android)</li></ul>                                                                                                                                                                                                                                                                                                             |
| **onScroll**             | `(newScrollLeft: number, newScrollTop: number) => void`      | <ul><li>Called when the selection scrolls due to overflow</li></ul>                                                                                                                                                                                                                                                                                                                                                   |
| **onSelectionChange**    | `(start: number, end: number) => void`                       | <ul><li>Called when the selection range or insertion point location changes</li></ul>                                                                                                                                                                                                                                                                                                                                 |
| **onSubmitEditing**      | `() => void`                                                 | <ul><li>Called when the text input submit button is pressed; invalid if multiline is true</li></ul>                                                                                                                                                                                                                                                                                                                   |
| **placeholder**          | `string`                                                     | <ul><li>Placeholder text to dislpay when input is empty</li></ul>                                                                                                                                                                                                                                                                                                                                                     |
| **placeholderTextColor** | `color`                                                      | <ul><li>Color of placeholder text</li></ul>                                                                                                                                                                                                                                                                                                                                                                           |
| **returnKeyType**        | `'done' \| 'go' \| 'next' \| 'search' \| 'send'`             | <ul><li>iOS and android prop for controlling return key type</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **secureTextEntry**      | `boolean`                                                    | <ul><li>Obscure the text input (for passwords)?</li></ul>                                                                                                                                                                                                                                                                                                                                                             |
| **spellCheck**           | `boolean`                                                    | <ul><li>Should spell checking be applied to contents?</li></ul>                                                                                                                                                                                                                                                                                                                                                       |
| **style**                | `TextInputStyleRuleSet \| TextInputStyleRuleSet[]`           | <ul><li>See below for supported styles</li></ul>                                                                                                                                                                                                                                                                                                                                                                      |
| **testId**               | `string`                                                     | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                                                                                                                                                                                                                                                                                                       |
| **title**                | `string`                                                     | <ul><li>Text for a tooltip</li></ul>                                                                                                                                                                                                                                                                                                                                                                                  |
| **value**                | `string`                                                     | <ul><li>If defined, the control value is forced to match this value</li><li>If undefined, control value can be modified by the user</li></ul>                                                                                                                                                                                                                                                                         |


# Link

This component displays a hyperlink. On the web, it translates to an \<a> tag. On mobile, it opens an embedded browser. On desktop it opens a tab in the default browser.

### Styles

* Text Styles
* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                 | Type                                       | Description                                                                                                                                                                                                                                                                                                   |
| -------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **accessibilityId**  | `string`                                   | <ul><li>It is hard or impossible to tell by a reference to an instance of a component from where this component has been instantiated</li><li>You can assign this property and check instance.props.accessibilityId</li><li>For example accessibilityId is used in View's FocusArbitrator callback </li></ul> |
| **allowFontScaling** | `boolean`                                  | <ul><li>Should fonts be scaled according to system setting?</li></ul>                                                                                                                                                                                                                                         |
| **autoFocus**        | `boolean`                                  | <ul><li>Should be focused when the component is mounted, see also View's arbitrateFocus property</li></ul>                                                                                                                                                                                                    |
| **numberOfLines**    | `number`                                   | <ul><li>For non-zero values, truncates with ellipsis if necessary</li></ul>                                                                                                                                                                                                                                   |
| **onHoverStart**     | `(e: SyntheticEvent) => void`              | <ul><li>Called when the mouse cursor enters or leaves the view bounds</li></ul>                                                                                                                                                                                                                               |
| **onHoverEnd**       | `(e: SyntheticEvent) => void`              | <ul><li>Called when the mouse cursor enters or leaves the view bounds </li></ul>                                                                                                                                                                                                                              |
| **onPress**          | `(e: SyntheticEvent, url: string) => void` | <ul><li>Event called when the touch or mouse button is released within the bounds of the view and the press has not been canceled</li></ul>                                                                                                                                                                   |
| **onLongPress**      | `(e: SyntheticEvent, url:string) => void`  | <ul><li>Event called when a long touch or mouse (> 1000ms) button is released within the bounds of the view and the press has not been canceled</li></ul>                                                                                                                                                     |
| **onContextMenu**    | `(e: MouseEvent) => void`                  | <ul><li>Event called when context menu is triggered, either by right mouse button click or context menu key</li></ul>                                                                                                                                                                                         |
| **selectable**       | `boolean`                                  | <ul><li>Can the link be included in a text selection?</li></ul>                                                                                                                                                                                                                                               |
| **style**            | `LinkStyleRuleSet\| LinkStyleRuleSet[]`    | <ul><li>See below for supported styles</li></ul>                                                                                                                                                                                                                                                              |
| **testId**           | `string`                                   | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                                                                                                                                                                                               |
| **title**            | `string`                                   | <ul><li>Text for a tooltip</li></ul>                                                                                                                                                                                                                                                                          |
| **url**              | `string`                                   | <ul><li>URL to follow for hyperlink</li></ul>                                                                                                                                                                                                                                                                 |


# Select

This component displays a control that allows the user to pick from a list of items. A dropdown is used for larger screens, a dialog for smaller ones.

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name              | Type                                                | Description                                                                                                                        |
| ----------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **items**         | `PickerPropsItem[]`                                 | <ul><li>List of items to be displayed in the picker</li></ul>                                                                      |
| **mode**          | `'dialog' \| 'dropdown'`                            | <ul><li>'dialog': Show a modal dialog </li><li>'dropdown': Shows a dropdown anchored to the picker </li><li>Android only</li></ul> |
| **onValueChange** | `(itemValue: string, itemPosition: number) => void` | <ul><li>Invoked when the selected value changes</li></ul>                                                                          |
| **selectedValue** | `string`                                            | <ul><li>Initially-selected item</li></ul>                                                                                          |
| **style**         | `PickerStyleRuleSet \| PickerStyleRuleSet[]`        | <ul><li>See below for supported styles</li></ul>                                                                                   |
| **testId**        | `string`                                            | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                    |
| **color**         | `string`                                            | <p></p><ul><li>Text Color</li></ul>                                                                                                |


# Spinner

This component displays an animated “spinner” control that tells the user that an operation is pending. Animation continues as long as the component is displayed.

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name          | Type                                       | Description                                              |
| ------------- | ------------------------------------------ | -------------------------------------------------------- |
| **color**     | `color`                                    | <ul><li>Color of indicator</li></ul>                     |
| **deferTime** | `number`                                   | <ul><li>Number of ms to wait before displaying</li></ul> |
| **size**      | `'large' \| 'medium' \| 'small' \| 'tiny'` | <ul><li>Size of indicator</li></ul>                      |
| **testId**    | `string`                                   | <ul><li>ID for testing purposes</li></ul>                |

### Examples

```jsx
<View style={styles.root}>
  {loading &&
    <ActivityIndicator color="#ffffff" size="medium" />
  }
</View>
```


# Image

This component displays an image, which can come from a local source or from the network. It supports JPEG, GIF and PNG formats.

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                   | Type                                                      | Description                                                                                                                                                                                                                           |
| ---------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **accessibilityLabel** | `string`                                                  | <ul><li>Alternate text to display if the image cannot be loaded or by screen readers</li></ul>                                                                                                                                        |
| **headers**            | `{[headerName:  string]: string}`                         | <ul><li>HTTP headers to include when fetching the URL</li></ul>                                                                                                                                                                       |
| **onError**            | `(err?: Error) => void`                                   | <ul><li>Called when an error occurs that prevents the image from loading</li></ul>                                                                                                                                                    |
| **onLoad**             | `(size: Dimensions) => void`                              | <ul><li>Called when the image successfully loads</li></ul>                                                                                                                                                                            |
| **resizeMethod**       | `'auto' \| 'resize' \| 'scale'`                           | <ul><li>Android-specific resize property</li></ul>                                                                                                                                                                                    |
| **resizeMode**         | `'stretch' \| 'contain' \| 'cover' \| 'auto' \| 'repeat'` | <ul><li>Determines how to resize the image if its natural size does not match the size of the container </li><li>Note: In Web version, 'auto' doesn't scale down image if width/height smaller than the original image size</li></ul> |
| **source**             | `string`                                                  | <ul><li>URL to image</li></ul>                                                                                                                                                                                                        |
| **style**              | `ImageStyleRuleSet \| ImageStyleRuleSet[ ]`               | <ul><li>See below for supported styles</li></ul>                                                                                                                                                                                      |
| **testId**             | `string`                                                  | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                                                                                                                       |
| **title**              | `string`                                                  | <ul><li>Tooltip for image</li></ul>                                                                                                                                                                                                   |


# SVG \*

This component displays a vector image. Supported properties are the path, fill color, stroke color, and stroke width.

### Installation

{% hint style="info" %}
&#x20;This component is not included by default, to use it import the following package:
{% endhint %}

{% tabs %}
{% tab title="NPM" %}

```bash
$ npm i react-ult-ext-imagesvg
```

{% endtab %}

{% tab title="Yarn" %}

```
yarn add react-ult-ext-imagesvg
```

{% endtab %}
{% endtabs %}

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Svg Props

| Name                    | Type                                             | Description                                                                                             |
| ----------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
| **style**               | `ImageSvgStyleRuleSet \| ImageSvgStyleRuleSet[]` | <ul><li>See below for supported styles</li></ul>                                                        |
| **fillColor**           | `color`                                          | <ul><li>Color and opacity of fill</li><li>Default values are provided by SVG</li></ul>                  |
| **fillOpacity**         | `number`                                         | <ul><li>Color and opacity of fill</li><li>Default values are provided by SVG</li></ul>                  |
| **preserveAspectRatio** | `boolean`                                        | <ul><li> Preserve aspect ratio or stretch?</li></ul>                                                    |
| **strokeColor**         | `color`                                          | <ul><li>Color</li><li>Width and opacity of stroke</li><li>Default values are provided by SVG</li></ul>  |
| **strokeWidth**         | `number`                                         | <ul><li>Color</li><li>Width and opacity of stroke</li><li>Default values are provided by SVG</li></ul>  |
| **strokeOpacity**       | `number`                                         | <ul><li>Color</li><li>Width and opacity of stroke;</li><li>Default values are provided by SVG</li></ul> |
| **title**               | `string`                                         | <ul><li>Tooltip for image</li></ul>                                                                     |
| **viewBox**             | `string`                                         | <ul><li>Bounding box</li></ul>                                                                          |
| **webShadow**           | `boolean`                                        | <ul><li>Shadow</li></ul>                                                                                |

### SvgCommon Props

| Name              | Type     | Description                                                                                             |
| ----------------- | -------- | ------------------------------------------------------------------------------------------------------- |
| **fillColor**     | `color`  | <ul><li>Color and opacity of fill</li><li>Default values are provided by SVG</li></ul>                  |
| **fillOpacity**   | `number` | <ul><li>Color and opacity of fill</li><li>Default values are provided by SVG</li></ul>                  |
| **strokeColor**   | `color`  | <ul><li>Colo</li><li>Width and opacity of stroke</li><li>Default values are provided by SVG</li></ul>   |
| **strokeWidth**   | `number` | <ul><li> Color</li><li>Width and opacity of stroke</li><li>Default values are provided by SVG</li></ul> |
| **strokeOpacity** | `number` | <ul><li>Color</li><li>Width and opacity of stroke</li><li>Default values are provided by SVG</li></ul>  |

### SvgPath Props

| Name  | Type     | Description                              |
| ----- | -------- | ---------------------------------------- |
| **d** | `string` | <ul><li>Path definition string</li></ul> |

### SvgRect Props

| Name       | Type     | Description                                                       |
| ---------- | -------- | ----------------------------------------------------------------- |
| **x**      | `number` | <ul><li>Position and dimension information for the rect</li></ul> |
| **y**      | `number` | <ul><li>Position and dimension information for the rect</li></ul> |
| **width**  | `number` | <ul><li>Position and dimension information for the rect</li></ul> |
| **height** | `number` | <ul><li>Position and dimension information for the rect</li></ul> |


# Video \*

This component provides video playback capabilities with optional controls for play, pause, etc.

### Installation

{% hint style="info" %}
&#x20;This component is not included by default, to use it import the following package:
{% endhint %}

{% tabs %}
{% tab title="NPM" %}

```bash
$ npm i react-ult-ext-video
```

{% endtab %}

{% tab title="Yarn" %}

```
$ yarn add react-ult-ext-video
```

{% endtab %}
{% endtabs %}

### Styles

* Flexbox Styles
* View Styles
* Transform Styles

### Props

| Name                   | Type                                     | Description                                                                                                                                     |
| ---------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| **accessibilityLabel** | `string`                                 | <ul><li>Alternate text to display if the image cannot be loaded or by screen readers</li></ul>                                                  |
| **authToken**          | `string`                                 | <ul><li> Authentication token to include in request (not supported on some React Native implementations)</li></ul>                              |
| **loop**               | `boolean`                                | <ul><li>Should video playback loop to beginning after it completes?</li></ul>                                                                   |
| **onBuffer**           | `() => void`                             | <ul><li>Called when the video is paused for buffering</li></ul>                                                                                 |
| **onCanPlay**          | `() => void`                             | <ul><li>Called when enough of the video has been loaded that playback is possible</li></ul>                                                     |
| **onCanPlayThrough**   | `() => void`                             | <ul><li>Called when enough of the video has been loaded that playback can proceed all the way to the end without buffering pauses</li></ul>     |
| **onEnded**            | `() => void`                             | <ul><li>Called when the video playback reaches the end</li></ul>                                                                                |
| **onError**            | `() => void`                             | <ul><li>Called when the video cannot be loaded</li></ul>                                                                                        |
| **onLoadedData**       | `(info: VideoInfo) => void`              | <ul><li>Called when the video's metadata has been loaded; returns information about the video</li></ul>                                         |
| **onLoadStart**        | `() => void`                             | <ul><li>Called when the video data is starting to load</li></ul>                                                                                |
| **onProgress**         | `(progress: VideoProgress) => void`      | <ul><li>Called periodically when the video is playing; reports progress information</li></ul>                                                   |
| **preload**            | `'auto'\|'metadata'\|'none'`             | <ul><li>Indiciates which portion of the video should be pre-loaded when the component is mounted</li></ul>                                      |
| **resizeMode**         | `'contain'\|'cover'\|'stretch'`          | <ul><li>Determines how to resize the image if its natural size does not match the size of the container</li></ul>                               |
| **showControls**       | `boolean`                                | <ul><li>Displays controls for play, pause, etc.</li></ul>                                                                                       |
| **source**             | `string \| number`                       | <ul><li>Source of video (URL) or resource <code>id</code> as resolved by <code>require()</code> for <code>react-native</code> targets</li></ul> |
| **style**              | `ViewStyleRuleSet \| ViewStyleRuleSet[]` | <ul><li>See above for supported styles</li></ul>                                                                                                |

###


# VirtualListView \*

This components supports a  list of items within a scrolling area. The visible portion of the list is referred to as the “viewport”.

### Installation

{% hint style="info" %}
&#x20;This component is not included by default, to use it import the following package:
{% endhint %}

{% tabs %}
{% tab title="NPM" %}

```bash
$ npm i react-ult-ext-virtuallistview
```

{% endtab %}

{% tab title="Yarn" %}

```
$ yarn add react-ult-ext-virtuallistview
```

{% endtab %}
{% endtabs %}

### Description&#x20;

The component is windowed, or virtualized, which means that items are rendered only when they are within the view port (or just above or below the view port).

Unlike other list views (such as the ListView provided in React Native), this component supports lists of heterogeneous items with different heights and completely different types.

Each item in the list is described by a VirtualizeItemInfo object. The list of items is specified by an ordered list passed in the itemList prop. When an item comes into view, it is rendered through the use of the renderItem callback. Additional fields can be added to the VirtualizeItemInfo by the caller as it sees fit. For example, it is sometimes useful to include additional identifying information such as an item type or an item-specific render method.

A height must be specified for each item. By default, this height is assumed to be accurate and constant. If you do not know the height of the object or it may change, the height can be measured at runtime. This option is expensive, so it should be avoided if possible.

It optionally supports animation of items when they are added, removed or moved within the list.

When items are added before or after the visible region, it attempts to maintain the current position of the visible items, adjusting the scroll position and list height as necessary.

### Performance Techniques

The VirtualListView component employs a number of tricks to improve performance.

It uses a technique called “cell recycling” to minimize the number of mounts and unmounts. A cell is a container for a list item. When a cell is no longer visible, it can be temporarily hidden and then reused for the next item that becomes visible. This optimization is most effective when the recycled cell and its contents are used for an item that is similar in content. For this reason, callers need to specify a “template” field to identify similar items. In some cases, disabling cell recycling can be beneficial as recycled cells continue their regular react lifecycle even when not visible, which can lead to excessive background re-rendering in some cases.

It also supports “overdraw” to render items above and below the view port. This minimizes chances that the user will scroll to a new portion of the list before new items can be rendered in that area. Overdraw is employed only after the view port is initially filled. This reduces the performance impact of rendering.

It also limits the number of items it renders each time to avoid consuming too many cycles on the JavaScript thread.

It supports a special mode where items are re-rendered only if the corresponding VirtualizeItemInfo changes. This mode requires that the renderItem method use only information within this object. To use this mode, set the skipRenderIfItemUnchanged prop to true.

### Props

| Name                           | Type                                                                            | Description                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------ | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **animateChanges**?            | `boolean`                                                                       | <ul><li>Should the list animate additions, removals and moves within the list?</li></ul>                                                                                                                                                                                                                                                                                                                 |
| **initialSelectedKey**?        | `string`                                                                        | <ul><li>Should the list animate additions, removals and moves within the list?</li></ul>                                                                                                                                                                                                                                                                                                                 |
| **itemList**                   | `VirtualizeItemInfo[]`                                                          | <ul><li>Ordered list of descriptors for items to display in the list.</li></ul>                                                                                                                                                                                                                                                                                                                          |
| **keyboardFocusScrollOffset**? | `number`                                                                        | <ul><li>Use this if you want to vertically offset the focused item from the top of the viewport when using keyboard navigation</li></ul>                                                                                                                                                                                                                                                                 |
| **logInfo**?                   | `(textToLog: string) => void`                                                   | <ul><li>Logging callback to debug issues.</li></ul>                                                                                                                                                                                                                                                                                                                                                      |
| **onItemSelected**?            | `(item: ItemInfo) => void`                                                      | <ul><li>Callback when an item is selected</li></ul>                                                                                                                                                                                                                                                                                                                                                      |
| **padding**?                   | `number`                                                                        | <ul><li>Optional padding around the scrolling content within the list</li></ul>                                                                                                                                                                                                                                                                                                                          |
| **renderItem**                 | `(renderDetails: VirtualListCellRenderDetails) => JSX.Element \| JSX.Element[]` | <ul><li>Callback for rendering item when it becomes visible within view port</li></ul>                                                                                                                                                                                                                                                                                                                   |
| **showOverflow**?              | `boolean`                                                                       | <ul><li>If true, allows each item to overflow its visible cell boundaries; by default, item contents are clipped to cell boundaries</li></ul>                                                                                                                                                                                                                                                            |
| **skipRenderIfItemUnchanged**? | `boolean`                                                                       | <ul><li>By default, Virtualize re-renders every item during the render </li><li>Setting this flag to true allows the list view to re-render only items from itemList whose descriptor has changed, thus avoiding unnecessary rendering. It uses \_.isEqual to perform this check. In this mode, renderItem should not depend on any external state, only on VirtualizeItemInfo, to render item</li></ul> |
| **testId**                     | `string`                                                                        | <ul><li>ID that can be used to identify the instantiated element for testing purposes</li></ul>                                                                                                                                                                                                                                                                                                          |
| **keyboardDismissMode**?       | `'none' \| 'interactive' \| 'on-drag'`                                          | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **keyboardShouldPersistTaps**? | `boolean`                                                                       | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **disableScrolling**?          | `boolean`                                                                       | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **scrollsToTop**?              | `boolean`                                                                       | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **disableBouncing**?           | `boolean`                                                                       | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **scrollIndicatorInsets**?     | `{top: number, left: number, bottom: number, right: number}`                    | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **onLayout**?                  | `(e: ViewOnLayoutEvent) => void`                                                | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **scrollEventThrottle**?       | `number`                                                                        | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **onScroll**?                  | `(scrollTop: number, scrollLeft: number) => void`                               | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **scrollXAnimatedValue**?      | `AnimatedValue`                                                                 | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |
| **scrollYAnimatedValue**?      | `AnimatedValue`                                                                 | <ul><li>Pass-through properties for scroll view</li></ul>                                                                                                                                                                                                                                                                                                                                                |

###


# WebView \*

This component displays HTML contents in an embedded browser control. You may have to specify sandbox settings depending on the source.

### Installation

{% hint style="info" %}
This component is not included by default, to use it import the following package:
{% endhint %}

{% tabs %}
{% tab title="NPM" %}

```bash
$ npm i react-ult-ext-webview
```

{% endtab %}

{% tab title="Yarn" %}

```
$ yarn add react-ult-ext-webview
```

{% endtab %}
{% endtabs %}

### Styles

* No specialized styles

### Props

| name | type                                       | description |
| ---- | ------------------------------------------ | ----------- |
|      |                                            |             |
|      |                                            |             |
|      | `'large' \| 'medium' \| 'small' \| 'tiny'` |             |
|      |                                            |             |

###


# App

This service provides core methods associated with the application. It also exposes events for low-memory conditions and activity state changes.


# Platform

This service provides information about the OS or runtime platform on which the app is running.


# International

This service provides interfaces related to globalization (g11n) and internationalization (i18n).


# Accessibility

This service provides methods and events related to accessibility. Sometimes it’s important to announce state changes in the app for visually-impaired users.


# Clipboard

This service provides access to the device’s clipboard.


# Storage

This service provides a simple key-based local storage mechanism. If you need more powerful options to persist data, consider using the database extension.


# Location

This service provides access to the device’s geolocation data.


# Linking

This service handles deep linking in both incoming and outgoing directions. Incoming deep links instruct the app to take actions requested by other apps.


# Alert

This service displays an OS-specific alert over the top of the current screen. The appearance of the alert is dictated by the underlying OS platform.


# Modal

This service displays a view that overlays all other views rendered by the app, preventing any direct user interaction with the overlaid views.


# Popup

This service is a collection of methods that allow the app to display a view that overlays a portion of the screen.


# StatusBar

This service provides control over the device status bar at the top of the screen on mobile platforms.


# UserInput

This service provides events that are triggered when specific user input events occur.


# UserInterface

This service provides a variety of UI-related methods.


# UserPresence

This service provides information about whether the user is currently present.


# Network \*

This service provides access to the device’s network data.


# Navigator \*

This service provides a way for the app to present a virtual stack of “cards”, allowing the user to push or pop those cards onto the stack in an animated manner.

### Props

| Name                | Type                                     | Description                                                          |
| ------------------- | ---------------------------------------- | -------------------------------------------------------------------- |
| cardStyle           | `ViewStyleRuleSet`                       | <ul><li>Style to apply to the card</li></ul>                         |
| renderScene         | `(route: NavigatorRoute) => JSX.Element` | <ul><li>Called to render the specified scene</li></ul>               |
| transitionCompleted | `() => void`                             | <ul><li>Called when a transition between cards is complete</li></ul> |


