diff --git a/packages/rn-tester/js/examples/DisplayContents/DisplayContentsExample.js b/packages/rn-tester/js/examples/DisplayContents/DisplayContentsExample.js new file mode 100644 index 00000000000..754b2adab84 --- /dev/null +++ b/packages/rn-tester/js/examples/DisplayContents/DisplayContentsExample.js @@ -0,0 +1,221 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + * @flow strict-local + */ + +'use strict'; + +import type {RNTesterModule} from '../../types/RNTesterTypes'; + +import * as React from 'react'; +import {StyleSheet, TextInput, View, Text} from 'react-native'; + +const styles = StyleSheet.create({ + contents: { + display: 'contents', + }, + box: { + width: 200, + height: 100, + }, + wrap: { + flexWrap: 'wrap', + }, + tinyBox: { + width: 50, + height: 25, + }, + border1: { + borderWidth: 1, + borderColor: 'brown', + }, + border2: { + borderWidth: 1, + borderColor: 'magenta', + }, + border3: { + borderWidth: 1, + borderColor: 'green', + }, + row: { + flexDirection: 'row', + }, +}); + +export default ({ + title: 'Display: contents', + category: 'UI', + description: + 'Demonstrates various ways display: contents may be used in the tree', + examples: [ + { + title: 'Single display: contents node', + name: 'single-contents-node', + description: + 'Single display: contents node with flex-direction: row (should be ignored in layout)', + render: function (): React.Node { + return ( + + + + + + + ); + }, + }, + { + title: 'Multiple display: contents nodes', + name: 'multiple-contents-nodes', + description: + 'Three display: contents nodes with flex-direction: row (they should be ignored in layout)', + render: function (): React.Node { + return ( + + + + + + + + + + + + + + + + + ); + }, + }, + { + title: 'Nested display: contents nodes', + name: 'nested-contents-nodes', + description: + 'Single display: contents node with two nested display: contents nodes, each with flex-direction: row (they should be ignored in layout)', + render: function (): React.Node { + return ( + + + + + + + + + + ); + }, + }, + { + title: 'Leaf node with display: contents', + name: 'contents-leaf-node', + description: + 'Single display: contents leaf node (should be ignored in layout)', + render: function (): React.Node { + return ( + + + + ); + }, + }, + { + title: 'TextInput with display: contents', + name: 'contents-textinput', + description: + 'A TextInput with display: contents style (should behave as if display: none was set)', + render: function (): React.Node { + return ( + + + + Text1 + Text2 + + + ); + }, + }, + ], +}: RNTesterModule); diff --git a/packages/rn-tester/js/utils/RNTesterList.android.js b/packages/rn-tester/js/utils/RNTesterList.android.js index f30daae7bfc..5f531c5ded2 100644 --- a/packages/rn-tester/js/utils/RNTesterList.android.js +++ b/packages/rn-tester/js/utils/RNTesterList.android.js @@ -202,6 +202,12 @@ const APIs: Array = ([ category: 'UI', module: require('../examples/Dimensions/DimensionsExample'), }, + { + key: 'DisplayContentsExample', + category: 'UI', + module: require('../examples/DisplayContents/DisplayContentsExample') + .default, + }, // Only show the link for the example if the API is available. typeof IntersectionObserver === 'function' ? { diff --git a/packages/rn-tester/js/utils/RNTesterList.ios.js b/packages/rn-tester/js/utils/RNTesterList.ios.js index 554eb979098..cf06c62fa77 100644 --- a/packages/rn-tester/js/utils/RNTesterList.ios.js +++ b/packages/rn-tester/js/utils/RNTesterList.ios.js @@ -211,6 +211,12 @@ const APIs: Array = ([ key: 'Dimensions', module: require('../examples/Dimensions/DimensionsExample'), }, + { + key: 'DisplayContentsExample', + category: 'UI', + module: require('../examples/DisplayContents/DisplayContentsExample') + .default, + }, // Only show the link for the example if the API is available. typeof IntersectionObserver === 'function' ? {