diff --git a/packages/rn-tester/js/assets/hotdog.jpg b/packages/rn-tester/js/assets/hotdog.jpg new file mode 100644 index 00000000000..ecde10df8a0 Binary files /dev/null and b/packages/rn-tester/js/assets/hotdog.jpg differ diff --git a/packages/rn-tester/js/examples/Filter/FilterExample.js b/packages/rn-tester/js/examples/Filter/FilterExample.js new file mode 100644 index 00000000000..def59353501 --- /dev/null +++ b/packages/rn-tester/js/examples/Filter/FilterExample.js @@ -0,0 +1,188 @@ +/** + * 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 + */ + +'use strict'; + +import type {ViewStyleProp} from 'react-native/Libraries/StyleSheet/StyleSheet'; + +import React from 'react'; +import {Image, StyleSheet, Text, View} from 'react-native'; + +const hotdog = require('../../assets/hotdog.jpg'); + +type Props = $ReadOnly<{ + style: ViewStyleProp, +}>; + +function StaticViewAndImage(props: Props): React.Node { + return ( + <> + + + + + Hello world! + + + + + + Hello world! + + + + + + + + + ); +} + +function StaticViewAndImageWithState(props: Props): React.Node { + const [s, setS] = React.useState(true); + setTimeout(() => setS(!s), 5000); + + return ; +} + +const styles = StyleSheet.create({ + commonView: { + width: 150, + height: 150, + backgroundColor: '#275752', + }, + commonImage: { + width: 150, + height: 90, + }, + subview: { + width: 75, + height: 75, + backgroundColor: '#8d2b8f', + }, + subsubview: { + width: 38.5, + height: 38.5, + backgroundColor: '#32a840', + }, + container: { + flexDirection: 'row', + justifyContent: 'space-around', + }, +}); + +exports.title = 'Filter'; +exports.category = 'UI'; +exports.description = + 'A set of graphical effects that can be applied to a view.'; +exports.examples = [ + { + title: 'Brightness', + description: 'brightness(1.5)', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Opacity', + description: 'opacity(0.5)', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Contrast', + description: 'contrast(0.5)', + platform: 'android', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Sepia', + description: 'sepia(0.5)', + platform: 'android', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Grayscale', + description: 'grayscale(0.5)', + platform: 'android', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Saturate', + description: 'saturate(4)', + platform: 'android', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Hue Rotate', + description: 'hueRotate(-90deg)', + platform: 'android', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Invert', + description: 'invert(0.7)', + platform: 'android', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Blur', + description: 'blur(10)', + platform: 'android', + render(): React.Node { + return ; + }, + }, + { + title: 'Filters with state updates', + description: 'Turn brightness(1.5) on and off every 5 seconds', + render(): React.Node { + return ( + + ); + }, + }, +]; diff --git a/packages/rn-tester/js/utils/RNTesterList.android.js b/packages/rn-tester/js/utils/RNTesterList.android.js index c2a4d0751fe..f2ed4d9a090 100644 --- a/packages/rn-tester/js/utils/RNTesterList.android.js +++ b/packages/rn-tester/js/utils/RNTesterList.android.js @@ -306,6 +306,11 @@ const APIs: Array = ([ category: 'UI', module: require('../examples/Transform/TransformExample'), }, + { + key: 'FilterExample', + category: 'UI', + module: require('../examples/Filter/FilterExample'), + }, { key: 'VibrationExample', category: 'Basic', diff --git a/packages/rn-tester/js/utils/RNTesterList.ios.js b/packages/rn-tester/js/utils/RNTesterList.ios.js index df1b6021a5a..7c2ab0ce383 100644 --- a/packages/rn-tester/js/utils/RNTesterList.ios.js +++ b/packages/rn-tester/js/utils/RNTesterList.ios.js @@ -294,6 +294,10 @@ const APIs: Array = ([ key: 'TransformExample', module: require('../examples/Transform/TransformExample'), }, + { + key: 'FilterExample', + module: require('../examples/Filter/FilterExample'), + }, { key: 'TurboModuleExample', module: require('../examples/TurboModule/TurboModuleExample'),