diff --git a/packages/e2e-test-app-fabric/babel.config.js b/packages/e2e-test-app-fabric/babel.config.js index 839f62a25a7..6dd5138c683 100644 --- a/packages/e2e-test-app-fabric/babel.config.js +++ b/packages/e2e-test-app-fabric/babel.config.js @@ -1,3 +1,6 @@ module.exports = { extends: "@rnw-scripts/babel-react-native-config", + plugins: [ + "@react-native/babel-plugin-codegen" + ] }; \ No newline at end of file diff --git a/packages/e2e-test-app-fabric/jest.config.js b/packages/e2e-test-app-fabric/jest.config.js index 06d65f81854..3f702702053 100644 --- a/packages/e2e-test-app-fabric/jest.config.js +++ b/packages/e2e-test-app-fabric/jest.config.js @@ -23,10 +23,13 @@ module.exports = { roots: ['/test/'], // The test environment that will be used for testing - testEnvironment: '@react-native-windows/automation', + // This environment causes the app to launch and close after testing is complete. + // Temporarily disabling due to breaks in UIA implementation. + // disabled temporarily + // testEnvironment: '@react-native-windows/automation', // The pattern or patterns Jest uses to detect test files - testRegex: '.*\\.test\\.ts$', + testRegex: ['.*\\.test\\.ts$', '.*\\.test\\.js$'], // Default timeout of a test in milliseconds testTimeout: 70000, @@ -40,11 +43,11 @@ module.exports = { '^.+\\.[jt]sx?$': defaultTransform, }, - snapshotResolver: 'react-native-windows/jest-snapshot-resolver.js', + //snapshotResolver: 'react-native-windows/jest-snapshot-resolver.js', // An array of regexp pattern strings that are matched against all source file paths before transformation. // If the file path matches any of the patterns, it will not be transformed. - transformIgnorePatterns: ['jest-runner'], + transformIgnorePatterns: ['jest-runner', 'node_modules\\\\safe-buffer'], // Specifies the maximum number of workers the worker-pool will spawn for running tests. maxWorkers: 1, @@ -57,7 +60,23 @@ module.exports = { setupFilesAfterEnv: ['react-native-windows/jest/setup', './jest.setup.js'], testEnvironmentOptions: { - app: 'RNTesterApp', + app: `windows\\Debug\\RNTesterApp-Fabric.exe`, enableAutomationChannel: true, + winAppDriverBin: 'D:\\WindowsApplicationDriver\\WinAppDriver.exe', }, + + moduleFileExtensions: [ + 'js', + 'windows.js', + 'android.js', + 'mjs', + 'cjs', + 'jsx', + 'ts', + 'windows.ts', + 'tsx', + 'windows.tsx', + 'json', + 'node', + ], }; diff --git a/packages/e2e-test-app-fabric/jest.setup.js b/packages/e2e-test-app-fabric/jest.setup.js index a2141d74c08..6671f196eba 100644 --- a/packages/e2e-test-app-fabric/jest.setup.js +++ b/packages/e2e-test-app-fabric/jest.setup.js @@ -9,9 +9,13 @@ const fs = require('fs'); const path = require('path'); const sanitizeFilename = require('sanitize-filename'); -const {LogBox} = require('react-native'); +// disabled temporarily +//const {LogBox} = require('react-native'); const screenshotDir = './errorShots'; fs.mkdirSync(screenshotDir, {recursive: true}); -LogBox.ignoreAllLogs(true); +process.env.NODE_ENV = 'test'; + +// disabled temporarily +//LogBox.ignoreAllLogs(true); diff --git a/packages/e2e-test-app-fabric/metro.config.js b/packages/e2e-test-app-fabric/metro.config.js index b2496c3c066..a2170e0cd82 100644 --- a/packages/e2e-test-app-fabric/metro.config.js +++ b/packages/e2e-test-app-fabric/metro.config.js @@ -12,12 +12,10 @@ const path = require('path'); const rnwPath = fs.realpathSync( path.dirname(require.resolve('react-native-windows/package.json')), ); -console.log(rnwPath); const rnwTesterPath = fs.realpathSync( path.dirname(require.resolve('@react-native-windows/tester/package.json')), ); -console.log(rnwTesterPath); const devPackages = { 'react-native': path.normalize(rnwPath), diff --git a/packages/e2e-test-app-fabric/package.json b/packages/e2e-test-app-fabric/package.json index 9f8bdc8be24..2b4b50c7d83 100644 --- a/packages/e2e-test-app-fabric/package.json +++ b/packages/e2e-test-app-fabric/package.json @@ -8,7 +8,7 @@ "lint:fix": "rnw-scripts lint:fix", "watch": "rnw-scripts watch", "windows": "react-native run-windows", - "e2etest": "jest", + "e2etest": "react-native rnx-test --platform windows", "e2etest:updateSnapshots": "jest -u", "e2etest:debug": "jest --config ./jest.debug.config.js" }, @@ -29,13 +29,15 @@ "@babel/runtime": "^7.8.4", "@react-native-windows/automation": "^0.3.106", "@react-native-windows/automation-commands": "^0.1.126", + "@react-native/babel-plugin-codegen": "0.73.0", "@rnw-scripts/babel-node-config": "2.3.1", "@rnw-scripts/babel-react-native-config": "0.0.0", "@rnw-scripts/eslint-config": "1.2.2", "@rnw-scripts/just-task": "2.3.14", "@rnw-scripts/metro-dev-config": "0.0.0", "@rnw-scripts/ts-config": "2.0.5", - "@rnx-kit/jest-preset": "^0.1.0", + "@rnx-kit/cli": "^0.16.9", + "@rnx-kit/jest-preset": "^0.1.14", "@types/jest": "^29.2.2", "@types/node": "^18.0.0", "@types/react": "^18.0.18", diff --git a/packages/e2e-test-app-fabric/test/Helpers.ts b/packages/e2e-test-app-fabric/test/Helpers.ts new file mode 100644 index 00000000000..05e0901fd4d --- /dev/null +++ b/packages/e2e-test-app-fabric/test/Helpers.ts @@ -0,0 +1,35 @@ +/** + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * + * @format + */ + +import {AutomationClient} from '@react-native-windows/automation-channel'; + +declare global { + const automationClient: AutomationClient | undefined; +} + +type ErrorsResult = { + errors: string[]; +}; + +export async function verifyNoErrorLogs( + errorFilter?: (errors: string[]) => string[], +): Promise { + if (!automationClient) { + throw new Error('RPC client is not enabled'); + } + + const response = await automationClient.invoke('ListErrors', {}); + + if (response.type === 'error') { + throw new Error(response.message); + } + + const result = response.result as ErrorsResult; + + const errors = errorFilter ? errorFilter(result.errors) : result.errors; + expect(errors.join('\n')).toBeFalsy(); +} diff --git a/packages/e2e-test-app-fabric/test/RNTesterNavigation.ts b/packages/e2e-test-app-fabric/test/RNTesterNavigation.ts new file mode 100644 index 00000000000..10cf237c4fe --- /dev/null +++ b/packages/e2e-test-app-fabric/test/RNTesterNavigation.ts @@ -0,0 +1,46 @@ +/** + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * + * @format + */ + +import {app} from '@react-native-windows/automation'; + +/** + * Visit an example on the RNTester Components tab + */ +export async function goToComponentExample(example: string) { + //const componentsTabButton = await app.findElementByTestID('components-tab'); + //await componentsTabButton.click(); + await goToExample(example); +} + +/** + * Visit an example on the RNTester APIs tab + */ +export async function goToApiExample(example: string) { + const componentsTabButton = await app.findElementByTestID('apis-tab'); + await componentsTabButton.click(); + await goToExample(example); +} + +async function goToExample(example: string) { + // Filter the list down to the one test, to improve the stability of selectors + const searchBox = await app.findElementByTestID('explorer_search'); + await searchBox.setValue(regexEscape(example)); + + const exampleButton = await app.findElementByTestID(example); + await exampleButton.click(); + + // Make sure we've launched the example by waiting until the search box is + // no longer present, but make sure we haven't crashed by checking that nav + // buttons are still visible + await app.waitUntil(async () => !(await exampleButton.isDisplayed())); + const componentsTab = await app.findElementByTestID('components-tab'); + expect(await componentsTab.isDisplayed()).toBe(true); +} + +function regexEscape(str: string): string { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/snapshotPages.test.js.snap b/packages/e2e-test-app-fabric/test/__snapshots__/snapshotPages.test.js.snap new file mode 100644 index 00000000000..f44decdd340 --- /dev/null +++ b/packages/e2e-test-app-fabric/test/__snapshots__/snapshotPages.test.js.snap @@ -0,0 +1,80727 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Component Control 1`] = ``; + +exports[`snapshotAllPages Accessibility Windows 1`] = ` + + + The following has accessibilityLabel and accessibilityHint: + + + + The following has accessible and accessibilityLabel: + + + + The following has accessibilitySetSize, accessibilityPosInSet and accessibilityLabel: + + + +`; + +exports[`snapshotAllPages Accessibility Windows 2`] = ` + + + The following TouchableHighlight has accessibilityLabel, accessibilityHint, accessibilityRole, toolip: + + + + Blue + + + + Pressed + 0 + times + + +`; + +exports[`snapshotAllPages Accessibility Windows 3`] = ` + + + The following has HighContrast Event awareness: + + + + isHighContrast: + False + + + + + ButtonFace High Contrast Hex Value: + + + + + + ButtonText High Contrast Color Hex Value: + + + + + + GrayText High Contrast Color Hex Value: + + + + + + Highlight High Contrast Color Hex Value: + + + + + + HighlightText High Contrast Color Hex Value: + + + + + + Hotlight High Contrast Color Hex Value: + + + + + + Window High Contrast Color Hex Value: + + + + + + WindowText High Contrast Color Hex Value: + + + + +`; + +exports[`snapshotAllPages Accessibility Windows 4`] = ` + + + The following TouchableHighlight toggles accessibilityState.disabled for the View under it: + + + + Toggle + + + + + This View should be + + enabled + according to UIA + + + + The following list of TouchableHighlights toggles accessibilityState.selected when touched: + + + + + + + Unselected + + + + + + + Unselected + + + + + + + Unselected + + + + + + + The following TouchableHighlight cycles accessibilityState.checked through unchecked/checked/mixed for the View under it: + + + + Toggle + + + + + This View should be + + Unchecked + + according to UIA + + + + The following TouchableHighlight toggles the acessibilityState.busy for the View under it: + + + + Toggle + + + + + This View should be + Not Busy + + according to UIA + + + + The following TouchableHighlight toggles accessibilityState.expanded and accessibilityState.collapsed for the View under it: + + + + Toggle + + + + + This View should be + + Expanded + according to UIA + + + + The following View exposes accessibilityValue fields (min, max, now) + + + + Range value increment + + + + + The View's (accessibilityRole == adjustable, ie. Slider) properties should be the following according to UIA: Min- + + 5 + Max- + 125 + Now- + 10 + + + + The following View exposes the accessibilityValue.Text field + + + + The View's properties should be the following according to UIA: Text- + testText + + + +`; + +exports[`snapshotAllPages Accessibility Windows 5`] = ` + + + The following uses accessibilityRole: 'list', 'listitem', accessibilitySetSize, and accessibilityPosInSet. + + + + + + + + Item + 1 + + + + + + + Item + 2 + + + + + + + Item + 3 + + + + + + + + + The following does the same, but with Touchables. + + + + + + + Touchable + 1 + + + + + + + Touchable + 2 + + + + + + + Touchable + 3 + + + + + + + +`; + +exports[`snapshotAllPages ActivityIndicator 1`] = ` + +`; + +exports[`snapshotAllPages ActivityIndicator 2`] = ` + + + + +`; + +exports[`snapshotAllPages ActivityIndicator 3`] = ` + + + + + + +`; + +exports[`snapshotAllPages ActivityIndicator 4`] = ` + +`; + +exports[`snapshotAllPages ActivityIndicator 5`] = ` + + + + + + +`; + +exports[`snapshotAllPages ActivityIndicator 6`] = ` + +`; + +exports[`snapshotAllPages ActivityIndicator 7`] = ` + +`; + +exports[`snapshotAllPages ActivityIndicator 8`] = ` + +`; + +exports[`snapshotAllPages Alerts 1`] = ` + + + + + Tap to view alert + + + + +`; + +exports[`snapshotAllPages Alerts 2`] = ` + + + + + Tap to view alert + + + + +`; + +exports[`snapshotAllPages Alerts 3`] = ` + + + + + Tap to view alert + + + + +`; + +exports[`snapshotAllPages Alerts 4`] = ` + + + + + Tap to view alert + + + + +`; + +exports[`snapshotAllPages Alerts 5`] = ` + + + + + Tap to view alert + + + + +`; + +exports[`snapshotAllPages Alerts 6`] = ` + + + + + Tap to view alert + + + + +`; + +exports[`snapshotAllPages Alerts 7`] = ` + + + + + Tap to view alert + + + + +`; + +exports[`snapshotAllPages Alerts 8`] = ` + + + + Prompt value: + + + + + + + prompt with title & callback + + + + + + + prompt with title & custom buttons + + + + + + + prompt with title & custom keyboard + + + + + + + prompt with title, callback & default value + + + + + + + prompt with title, custom buttons, login/password & default value + + + + +`; + +exports[`snapshotAllPages Alerts 9`] = ` + + + + + plain-text + + + + + + + secure-text + + + + + + + login-password + + + + +`; + +exports[`snapshotAllPages Animated 1`] = ` + + + + + Use Native Driver + + + + + Selected Styles + + + + + + rotate + + + + + + + rotateX + + + + + + + rotateY + + + + + + + rotateZ + + + + + + + skewX + + + + + + + skewY + + + + + + + perspective + + + + + + + scale + + + + + + + scaleX + + + + + + + scaleY + + + + + + + translateX + + + + + + + translateY + + + + + + + + Apply Selected Transforms + + + + +`; + +exports[`snapshotAllPages Animated 2`] = ` + + + + + Use Native Driver + + + + + + + Press to animate + + + + + + + + + The + + + quick + + + brown + + + fox + + + jumps over the lazy dog + + + + +`; + +exports[`snapshotAllPages Animated 3`] = ` + + + + + Use Native Driver + + + + + + + Press to + Hide + + + + + + FadeInView + + + + +`; + +exports[`snapshotAllPages Animated 4`] = ` +[ + + + + Use Native Driver + + + + , + + + + + + Parallel + + + Starts a number of animations at the same time + + + + + + + + + + + + Start + + + + + Stop + + + + + Reset + + + + + + + + + Sequence + + + Starts the animations in order, waiting for each to complete before starting the next + + + + + + + + + + + + Start + + + + + Stop + + + + + Reset + + + + + + + + + Stagger + + + Starts animations in order and in parallel, but with successive delays + + + + + + + + + + + + Start + + + + + Stop + + + + + Reset + + + + + + + + + Delay + + + Starts an animation after a given delay + + + + + + + + + + + + Start + + + + + Stop + + + + + Reset + + + + + + + , +] +`; + +exports[`snapshotAllPages Animated 5`] = ` +[ + + + + Use Native Driver + + + + , + + + + + Predefined animations + + + + + + + Bounce + + + + Animate + + + + + + + + + + + + + Ease + + + + Animate + + + + + + + + + + + + + Elastic + + + + Animate + + + + + + + + + + + + Standard functions + + + + + + + Linear + + + + Animate + + + + + + + + + + + + + Quad + + + + Animate + + + + + + + + + + + + + Cubic + + + + Animate + + + + + + + + + + + + , +] +`; + +exports[`snapshotAllPages Animated 6`] = ` + + + + Note you cannot \`useNativeDriver\` for layout properties. + + + + + Press to Animate + + + + + Composite + + + + + Easing + + + + + Animations! + + + +`; + +exports[`snapshotAllPages Animated 7`] = ` + + + + + Use Native Driver + + + + + + + Press to Spin it! + + + + +`; + +exports[`snapshotAllPages Animated 8`] = ` +[ + + + + Use Native Driver + + + + , + + + + + + + + <- + + + + + Hide + + + + + Reset + + + + + -> + + + + , +] +`; + +exports[`snapshotAllPages Animated 9`] = ` + + + + + Use Native Driver + + + + + + + Press to Fling it! + + + + + Transforms! + + + +`; + +exports[`snapshotAllPages Animated 10`] = ` + + + + + Use Native Driver + + + + + + + Press to + Start + + + + + Looping! + + + +`; + +exports[`snapshotAllPages Animated 11`] = ` + + Checkout the Gratuitous Animation App! + +`; + +exports[`snapshotAllPages AppState 1`] = ``; + +exports[`snapshotAllPages AppState 2`] = ` + + + +`; + +exports[`snapshotAllPages AppState 3`] = ` + + + [] + + +`; + +exports[`snapshotAllPages AppState 4`] = ` + + + 0 + + +`; + +exports[`snapshotAllPages AppState 5`] = ` + + + [] + + +`; + +exports[`snapshotAllPages Border 1`] = ` + +`; + +exports[`snapshotAllPages Border 2`] = ` + +`; + +exports[`snapshotAllPages Border 3`] = ` + +`; + +exports[`snapshotAllPages Border 4`] = ` + +`; + +exports[`snapshotAllPages Border 5`] = ` + +`; + +exports[`snapshotAllPages Border 6`] = ` + +`; + +exports[`snapshotAllPages Border 7`] = ` + +`; + +exports[`snapshotAllPages Border 8`] = ` + + + +`; + +exports[`snapshotAllPages Border 9`] = ` + + + + + + +`; + +exports[`snapshotAllPages Border 10`] = ` + +`; + +exports[`snapshotAllPages Border 11`] = ` + +`; + +exports[`snapshotAllPages Border 12`] = ` + +`; + +exports[`snapshotAllPages Border 13`] = ` + +`; + +exports[`snapshotAllPages Border 14`] = ` + +`; + +exports[`snapshotAllPages Border 15`] = ` + +`; + +exports[`snapshotAllPages Border 16`] = ` + +`; + +exports[`snapshotAllPages Border 17`] = ` + +`; + +exports[`snapshotAllPages Button 1`] = ` + + + + + Submit Application + + + + +`; + +exports[`snapshotAllPages Button 2`] = ` + + + + + Cancel Application + + + + +`; + +exports[`snapshotAllPages Button 3`] = ` + + + + + + Cancel + + + + + + + + + Submit + + + + + +`; + +exports[`snapshotAllPages Button 4`] = ` + + + + + + Cancel + + + + + + + + + Save For Later + + + + + + + + + Submit + + + + + +`; + +exports[`snapshotAllPages Button 5`] = ` + + + + + Submit Application + + + + +`; + +exports[`snapshotAllPages Button 6`] = ` + + + + + Submit Application + + + + +`; + +exports[`snapshotAllPages Button 7`] = ` + + + + + Submit Application + + + + +`; + +exports[`snapshotAllPages Button 8`] = ` + + + + + Submit Application + + + + +`; + +exports[`snapshotAllPages Button 9`] = ` + + + + + + Default Button + + + + + + + + + Button with accessible=false + + + + + + + + + Button with focusable=false + + + + + + + + + Button with accessible=false and focusable=false + + + + + +`; + +exports[`snapshotAllPages Composition Bugs Example 1`] = ` + + + + Composition: + + + + + + + Value: + 0 + + + + + + UI Tick + : + + + + + + + Value: + 0 + + + + + + JavaScript + : + + + + + + + Value: + 0 + + + + +`; + +exports[`snapshotAllPages Composition Bugs Example 2`] = ` + + + + Composition: + + + + + + + + UI Tick + : + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Composition Bugs Example 3`] = ` + + + + Composition: + + + + + + + + UI Tick + : + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Composition Bugs Example 4`] = ` + + + + Composition: + + + + + + + + UI Tick + : + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Composition Bugs Example 5`] = ` + + + + Composition: + + + + + + + Final Value: + + + + + + UI Tick + : + + + + + + + Final Value: + + + + + + JavaScript + : + + + + + + + Final Value: + + + + +`; + +exports[`snapshotAllPages Composition Bugs Example 6`] = ` + + + + Composition: + + + + + + + + UI Tick + : + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Crash 1`] = ` + + + + + JS crash + + + + +`; + +exports[`snapshotAllPages DevSettings 1`] = ` + + + + + Add + + + + +`; + +exports[`snapshotAllPages DevSettings 2`] = ` + + + + + Reload + + + + +`; + +exports[`snapshotAllPages Dimensions 1`] = ` + + { + "fontScale": 2, + "height": 1334, + "scale": 2, + "width": 750 +} + +`; + +exports[`snapshotAllPages Dimensions 2`] = ` + + { + "fontScale": 2, + "height": 1334, + "scale": 2, + "width": 750 +} + +`; + +exports[`snapshotAllPages Dimensions 3`] = ` + + { + "fontScale": 2, + "height": 1334, + "scale": 2, + "width": 750 +} + +`; + +exports[`snapshotAllPages Display:none Style 1`] = ` + + + + + + + Display:none style with TextInput + + + + + + + toggle display:none TextInput + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Fast Path Texts 1`] = ` + + + Text without curly brackets + + +`; + +exports[`snapshotAllPages Fast Path Texts 2`] = ` + + + text within curly brackets + + +`; + +exports[`snapshotAllPages Fast Path Texts 3`] = ` + + + I am a string / I am a variable + + +`; + +exports[`snapshotAllPages Fast Path Texts 4`] = ` + + + + + + UPDATE STATE + + + + + + non state text: initial state text + + +`; + +exports[`snapshotAllPages Fast Path Texts 5`] = ` + + + + + + UPDATE STATE + + + + + + first string + + +`; + +exports[`snapshotAllPages Fast Path Texts 6`] = ` + + + I'm a + slowText + because my string interpolation needs to all be within a pair of curly brackets. + + + I'm + + a slow text because I'm nested with other + + + texts + + + +`; + +exports[`snapshotAllPages Fast Path Texts 7`] = ` + + + + + + UPDATE STATE + + + + + + +`; + +exports[`snapshotAllPages FlatList 1`] = ` + + + + Simple list of items + + + + + + + + + + + + + Virtualized + : + + + + + + Horizontal + : + + + + + + Fixed Height + : + + + + + + Log Viewable + : + + + + + + Inverted + : + + + + + + Empty + : + + + + + + Debug + : + + + + + + onPress Disabled + : + + + + + + Text Selectable + : + + + + + + Use FlatListItemComponent + : + + + + + + Is RTL + : + + + + + + Maintain content position + : + + + + + + + + + } + refreshing={false} + removeClippedSubviews={false} + renderItem={[Function]} + scrollEventThrottle={0.0001} + stickyHeaderIndices={[]} + style={{}} + viewabilityConfig={ + { + "minimumViewTime": 3000, + "viewAreaCoveragePercentThreshold": 100, + "waitForInteraction": true, + } + } + viewabilityConfigCallbackPairs={ + [ + { + "onViewableItemsChanged": [Function], + "viewabilityConfig": { + "minimumViewTime": 3000, + "viewAreaCoveragePercentThreshold": 100, + "waitForInteraction": true, + }, + }, + ] + } + > + + + + + + + LIST HEADER + + + + + + + + + + + + Item 550 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentu + + + + + + + + + + + Item 551 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret m + + + + + + + + + + + Item 552 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id + + + + + + + + + + + Item 553 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur + + + + + + + + + + + Item 554 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequu + + + + + + + + + + + Item 555 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, a + + + + + + + + + + + Item 556 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. Eu paulo sapientem vulputate est, vel an accusam intellegam i + + + + + + + + + + + Item 557 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, + + + + + + + + + + + Item 558 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. Eu paulo sapientem vulputa + + + + + + + + + + + Item 559 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. E + + + + + + + + + + + + LIST FOOTER + + + + + + + + + +`; + +exports[`snapshotAllPages FlatList 2`] = ` + + + + + + + + Test + + + + + + + + + + + + Fried Shrimps + + + + + + + Water + + + + + + + Coke + + + + + + + Beer + + + + + + + Cheesecake + + + + + + + Ice Cream + + + + + + +`; + +exports[`snapshotAllPages FlatList 3`] = ` + + + + + + + + Test + + + + + + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + Water + + + + + + + Coke + + + + + + + Beer + + + + + + + Cheesecake + + + + + + + +`; + +exports[`snapshotAllPages FlatList 4`] = ` +[ + + + Menu + + , + + + + contentInset top: 44 + + + + + + Toggle header size + + + + + + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + Water + + + + + + + Coke + + + + + + + Beer + + + + + + + Cheesecake + + + + + + + , +] +`; + +exports[`snapshotAllPages FlatList 5`] = ` + + + + inverted false + + + + + + Toggle true + + + + + + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + Water + + + + + + + Coke + + + + + + + Beer + + + + + + + Cheesecake + + + + + + + +`; + +exports[`snapshotAllPages FlatList 6`] = ` + + + + + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + Water + + + + + + + Coke + + + + + + + Beer + + + + + + + Cheesecake + + + + + + + +`; + +exports[`snapshotAllPages FlatList 7`] = ` + + + + + + + Pizza + + + + + Separator for leading Pizza and trailing undefined has not been pressed + + + + + + + Burger + + + + + Separator for leading Burger and trailing undefined has not been pressed + + + + + + + Risotto + + + + + Separator for leading Risotto and trailing undefined has not been pressed + + + + + + + French Fries + + + + + Separator for leading French Fries and trailing undefined has not been pressed + + + + + + + Onion Rings + + + + + Separator for leading Onion Rings and trailing undefined has not been pressed + + + + + + + Fried Shrimps + + + + + Separator for leading Fried Shrimps and trailing undefined has not been pressed + + + + + + + Water + + + + + Separator for leading Water and trailing undefined has not been pressed + + + + + + + Coke + + + + + Separator for leading Coke and trailing undefined has not been pressed + + + + + + + Beer + + + + + Separator for leading Beer and trailing undefined has not been pressed + + + + + + + Cheesecake + + + + + Separator for leading Cheesecake and trailing undefined has not been pressed + + + + + + + +`; + +exports[`snapshotAllPages FlatList 8`] = ` + + + + <FlatList> - MultiColumn + + + + + + + + numColumns: + + + + + + + Virtualized + : + + + + + + Fixed Height + : + + + + + + Log Viewable + : + + + + + + + + } + refreshing={false} + removeClippedSubviews={false} + renderItem={[Function]} + scrollEventThrottle={50} + stickyHeaderIndices={[]} + viewabilityConfigCallbackPairs={ + [ + { + "onViewableItemsChanged": [Function], + "viewabilityConfig": undefined, + }, + ] + } + > + + + + + + + LIST HEADER + + + + + + + + + + + + + Item 0 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. Eu paulo sa + + + + + + + + + + Item 1 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam cas + + + + + + + + + + + + + + Item 2 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. Eu paulo sapientem vulputate est, ve + + + + + + + + + + Item 3 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te me + + + + + + + + + + + + + + Item 4 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. Eu paulo sapientem vulputate est, vel an accusam intellegam i + + + + + + + + + + Item 5 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Se + + + + + + + + + + + + + + Item 6 + - + Lorem ipsum dolor sit amet + + + + + + + + + + Item 7 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In + + + + + + + + + + + + + + Item 8 + - + Lorem ipsum dolor sit amet, ius ad pertinax oporter + + + + + + + + + + Item 9 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur n + + + + + + + + + + + + + + Item 10 + - + Lorem ipsum dolor sit a + + + + + + + + + + Item 11 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrum + + + + + + + + + + + + + + Item 12 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi a + + + + + + + + + + Item 13 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur ne + + + + + + + + + + + + + + Item 14 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre + + + + + + + + + + Item 15 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. + + + + + + + + + + + + + + Item 16 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. Eu paulo sapientem vulputate est, vel an accusam intellegam inte + + + + + + + + + + Item 17 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an + + + + + + + + + + + + + + Item 18 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit referrentur. Te nam case ludus inciderint + + + + + + + + + + Item 19 + - + Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix civibus corrumpit ref + + + + + + + + + + + + + LIST FOOTER + + + + + + + + +`; + +exports[`snapshotAllPages FlatList 9`] = ` + + + + + + Sticky Pizza + + + + + + + Burger + + + + + + + Sticky Risotto + + + + + + + French Fries + + + + + + + Sticky Onion Rings + + + + + + + Fried Shrimps + + + + + + + Water + + + + + + + Coke + + + + + + + Beer + + + + + + + Cheesecake + + + + + + +`; + +exports[`snapshotAllPages FlatList 10`] = ` + + + + + Outer Viewable: + + + + + + + Outer Rendered: + + + + 0 (head) + + + + Inner Viewable: + + + + + + + Inner Rendered: + + + + + + + + + + Header + + + + + + + + +`; + +exports[`snapshotAllPages Flyout 1`] = ` + + + + Placement Options: + + + + + + + + + Open Flyout + + + + + + + + + + + Open Flyout without Target + + + + + + + + + + + Open Flyout with Offset + + + + + + + + Text Input to Anchor flyout to: + + + + + +`; + +exports[`snapshotAllPages Glyph UWP 1`] = ` + + + Glyph: default Accent color + + + + Glyph: red + + + + Multiple glyphs: red + + + + Multiple glyphs + + + +`; + +exports[`snapshotAllPages Keyboard 1`] = ` + + + + Keyboard is + + + closed + + + + + No events observed + + + +`; + +exports[`snapshotAllPages Keyboard 2`] = ` + + + + Keyboard is + + + closed + + + + + No events observed + + + +`; + +exports[`snapshotAllPages Keyboard 3`] = ` + + + No tab index, this item will be tabbed to last + + + + tabIndex default + + + + These 3 items should tab in the order of first, last, middle: + + + + + tabIndex 1 + + + + + tabIndex 3 + + + + + tabIndex 2 + + + + + Controls like Picker should also do the same tab in the order of first, last, middle: + + + + + + + +`; + +exports[`snapshotAllPages Keyboard Focus Example 1`] = ` + + + + Please select a item to set focus + + + + + + View accept focus + + + + + + + + Test Purpose: focus on TextInput, then timeout and blur on TextInput2, TextInput still keep focus + + + + + + Test Purpose: focus on TextInput2, then timeout and blur on TextInput2, TextInput2 lose focus + + + + Key + unknown + + + + + + + + Last focus event for TouchableHighlight: + + + + + + + Last focus event for TouchableOpacity: + + + + + Last focus event for TouchableWithoutFeedback: + + + + +`; + +exports[`snapshotAllPages Keyboard extension Example 1`] = ` + + + + + OnKeyDown Key and Code + + + + + + + + + OnKeyDownCapture Key and Code + + + + + + + + + + + OnKeyUp Key and Code + + + + + + + + + OnKeyUpCapture Key and Code + + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Layout - Flexbox 1`] = ` + + + + Layout + + + + + + + + Flex Direction + + + + + row + + + + + + + + + + row-reverse + + + + + + + + + + column + + + + + + + + + + column-reverse + + + + + + + + + + + top: 15, left: 160 + + + + + + + + Justify Content - Main Direction + + + + + flex-start + + + + + + + + + + center + + + + + + + + + + flex-end + + + + + + + + + + space-between + + + + + + + + + + space-around + + + + + + + + + + + + + + Align Items - Other Direction + + + + + flex-start + + + + + + + + + + + + + + + + + + + + + + center + + + + + + + + + + + + + + + + + + + + + + flex-end + + + + + + + + + + + + + + + + + + + + + + + + + + Flex Wrap + + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Layout Events 1`] = ` + + + layout events are called on mount and whenever layout is recalculated. Note that the layout event will typically be received + + + before + + the layout has updated on screen, especially when using layout animations. + + + Press here to change layout. + + + + + + ViewLayout: + + undefined + + + + + A simple piece of text. + + + + + Text w/h: + ? + / + ? + + Image x/y: + ? + / + ? + + + +`; + +exports[`snapshotAllPages LegacyControlStyleTest 1`] = ` + + + + + + + + + + + Show Round Border + + + + + +`; + +exports[`snapshotAllPages LegacyImageTest 1`] = ` + + + + + + + + + Show Border + + + + + + + + + Set image to RTL + + + + + +`; + +exports[`snapshotAllPages LegacyLoginTest 1`] = ` + + + + + + + + Show Password + + + + + + + LOGIN + + + + +`; + +exports[`snapshotAllPages LegacySelectableTextTest 1`] = ` + + + Pressed: + 0 + times. + + + Text before + + + click here + + + text after + + + + + + Toggle Selectable + + + + + + + + + Clear State + + + + + +`; + +exports[`snapshotAllPages LegacyTextHitTestTest 1`] = ` + + + Pressed: + 0 + times. + + + Nested + + + pressable + + + text: + + + Click here + + + + + + Nested text inside pressable text: + + + + Click here + + + + + Multiline pressable test: + + + Click here +or click here. + + + + Multiline pressable RTL text: + + + أحب اللغة +العربية + + + + RTL text in LTR flow direction: + + + أحب اللغة العربية + + + + RTL text in RTL flow direction: + + + أحب اللغة العربية + + + + LTR text in RTL flow direction: + + + Click here + + + + Bidirectional text in a single run: + + + أحب اللغة العربية hello + + + + Bidirectional text in separate runs: + + + أحب اللغة العربية + hello + + + + Add pressable inline text child: + + + Click to add + + + + + Click anywhere to toggle pressability: + + + Click here + + + + Wrapped text pressability: + + + + + abcdef + + + + + + + + Clear State + + + + + +`; + +exports[`snapshotAllPages LegacyTextInputTest 1`] = ` + + + + + + <Log Start> + + +`; + +exports[`snapshotAllPages Linking 1`] = ` + + + + + + Open + https://www.facebook.com + + + + + + + Open + http://www.facebook.com + + + + + + + Open + http://facebook.com + + + + + + + Open + fb://notifications + + + + + + + Open + geo:37.484847,-122.148386 + + + + + + + Open + tel:9876543210 + + + + + +`; + +exports[`snapshotAllPages Linking 2`] = ` + + + + + Open Settings + + + + +`; + +exports[`snapshotAllPages Mouse Click Events 1`] = ` + + + + Primary Pressed x + 0 + + + Auxiliary Pressed x + 0 + + + Secondary Pressed x + 0 + + + + + + + Clear state + + + + + + + I'm a view! + + + + + + + I'm a button! + + + + + +`; + +exports[`snapshotAllPages Mouse Events 1`] = ` + + + + + + Hoverable + + text + + + + + This is a TouchableHighlight + + + + + + + This is an overlay view + + + + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 1`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 2`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 3`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 4`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 5`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 6`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 7`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 8`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 9`] = ` + + + + Native: + + + + + + + + JavaScript + : + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 10`] = ` + + + + + + Value: + 0 + + +`; + +exports[`snapshotAllPages Native Animated Example 11`] = ` + + + +`; + +exports[`snapshotAllPages Native Animated Example 12`] = ` + + + + + + + Scroll me sideways! + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 13`] = ` + + + + Native: + + + + + + + + + JavaScript + : + + + + + + + +`; + +exports[`snapshotAllPages Native Animated Example 14`] = ` + + + + Force JS Stalls + + + + + + Track JS Stalls + + + + +`; + +exports[`snapshotAllPages PanResponder Sample 1`] = ` + + + + Basic gesture handling + + + + + + + + +`; + +exports[`snapshotAllPages Performance API Examples 1`] = ` + + + + performance.memory + + + + + + + + + Click to update memory info + + + + + + + jsHeapSizeLimit: undefined bytes + + + totalJSHeapSize: undefined bytes + + + usedJSHeapSize: undefined bytes + + + + + +`; + +exports[`snapshotAllPages Performance API Examples 2`] = ` + + + + performance.reactNativeStartupTiming + + + + + + + + + Click to update React startup timing + + + + + + + startTime: N/A ms + + + executeJavaScriptBundleEntryPointStart: N/A ms + + + executeJavaScriptBundleEntryPointEnd: N/A ms + + + endTime: N/A ms + + + + + +`; + +exports[`snapshotAllPages PlatformColor 1`] = ` + +`; + +exports[`snapshotAllPages PlatformColor 2`] = ` + + + + Unexpected Platform.OS: windows + + + + +`; + +exports[`snapshotAllPages PlatformColor 3`] = ` + + Not applicable on this platform + +`; + +exports[`snapshotAllPages PlatformColor 4`] = ` + + + + Unexpected Platform.OS: windows + + + + +`; + +exports[`snapshotAllPages Pointer Events 1`] = ` + + + + + + A: unspecified + + + + + + B: none + + + + + + C: unspecified + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Pointer Events 2`] = ` + + + + + + A: unspecified + + + + + + B: none + + + + + + C: unspecified + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Pointer Events 3`] = ` + + + + + + A: unspecified + + + + + + B: box-none + + + + + + C: unspecified + + + + + + + C: explicitly unspecified + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Pointer Events 4`] = ` + + + + + + A: unspecified + + + + + + B: box-none + + + + + + C: unspecified + + + + + + + C: explicitly unspecified + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Pointer Events 5`] = ` + + + + + + A: unspecified + + + + + + B: box-only + + + + + + C: unspecified + + + + + + + C: explicitly unspecified + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Pointer Events 6`] = ` + + + + + + A: unspecified + + + + + + B: box-only + + + + + + C: unspecified + + + + + + + C: explicitly unspecified + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Pointer Events 7`] = ` + + + + + + A: overflow: + visible + + + + + + B: overflowing + + + + + + + C: fully outside + + + + + + D: child of fully outside + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Pointer Events 8`] = ` + + + + + + A: overflow: + hidden + + + + + + B: overflowing + + + + + + + C: fully outside + + + + + + D: child of fully outside + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Popup 1`] = ` + + + The following tests popup Anchor + + + + Text Input to Anchor popup to: + + + + + + + + + + Open Popup + + + + + + +`; + +exports[`snapshotAllPages Popup 2`] = ` + + + + + + Toggle popup + + + + + +`; + +exports[`snapshotAllPages Popup 3`] = ` + + + + + + Toggle popup + + + + + +`; + +exports[`snapshotAllPages Pressable 1`] = ` +[ + + + + Press Me + + + , + + + , +] +`; + +exports[`snapshotAllPages Pressable 2`] = ` + + + + Press Me + + + +`; + +exports[`snapshotAllPages Pressable 3`] = ` + + + + + Press Me + + + + + +`; + +exports[`snapshotAllPages Pressable 4`] = ` + + + + + +`; + +exports[`snapshotAllPages Pressable 5`] = ` + + + + + + radius 30 + + + + + + + radius 150 + + + + + + + radius 70, with border + + + + + + + + with border, default color and radius + + + + + + + + + use foreground + + + +`; + +exports[`snapshotAllPages Pressable 6`] = ` +[ + + Text has built-in onPress handling + , + + + , +] +`; + +exports[`snapshotAllPages Pressable 7`] = ` + + + + + Press Me + + + + + +`; + +exports[`snapshotAllPages Pressable 8`] = ` + + + + 3D Touch is not available on this device + + + + + + Press Me + + + + +`; + +exports[`snapshotAllPages Pressable 9`] = ` + + + + + Press Outside This View + + + + + + + +`; + +exports[`snapshotAllPages Pressable 10`] = ` + + + + + + Native Methods Exist + + +`; + +exports[`snapshotAllPages Pressable 11`] = ` +[ + + + Disabled Pressable + + , + + + Enabled Pressable + + , +] +`; + +exports[`snapshotAllPages Pressable 12`] = ` + + + + Press Me + + + +`; + +exports[`snapshotAllPages Pressable 13`] = ` +[ + + + + Press Me + + + , + + + , + + + + Click to focus textbox + + + , +] +`; + +exports[`snapshotAllPages Pressable 14`] = ` +[ + + + + Press Me + + + + , + + + + defaultText + + , +] +`; + +exports[`snapshotAllPages Pressable 15`] = ` +[ + + + + Press Me + + + , + , +] +`; + +exports[`snapshotAllPages Pressable 16`] = ` + + + +`; + +exports[`snapshotAllPages Pressable 17`] = ` + + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Pressable 18`] = ` + + + + Pressable with accessible=true and focusable=true + + + + + Pressable with accessible=false + + + + + Pressable with focusable=false + + + + + Pressable with accessible=false and focusable=false + + + +`; + +exports[`snapshotAllPages Pressable 19`] = ` + + + + Pressable with ToolTip "Pressable" + + + +`; + +exports[`snapshotAllPages Pressable 20`] = ` + + + + Parent Pressable + + + + Child Pressable + + + + +`; + +exports[`snapshotAllPages Pressable 21`] = ` + + + View #1, front is visible, back is hidden. + + + + + Front + + + + + Back (You should not see this) + + + + + View #2, front is hidden, back is visible. + + + + + Front (You should not see this) + + + + + Back + + + + +`; + +exports[`snapshotAllPages RTLExample 1`] = ` + + + + Left-to-Right + + + + + forceRTL + + + + + + +`; + +exports[`snapshotAllPages RTLExample 2`] = ` + + + + + + LTR + + + + + + + + + + + + + Text Text Text + + + + + + + Button + + + + + + + + + + + + Text Text Text + + + + + + + Button + + + + + + +`; + +exports[`snapshotAllPages RTLExample 3`] = ` + + + + + + LTR + + + + + + + Left-to-Right language without text alignment. + + + من اليمين إلى اليسار اللغة دون محاذاة النص + + + מימין לשמאל השפה בלי יישור טקסט + + + +`; + +exports[`snapshotAllPages RTLExample 4`] = ` + + + + + + LTR + + + + + + + Left-to-Right language without text alignment. + + + من اليمين إلى اليسار اللغة دون محاذاة النص + + + מימין לשמאל השפה בלי יישור טקסט + + + +`; + +exports[`snapshotAllPages RTLExample 5`] = ` + + + + + + LTR + + + + + + + Left-to-Right language without text alignment. + + + من اليمين إلى اليسار اللغة دون محاذاة النص + + + מימין לשמאל השפה בלי יישור טקסט + + + +`; + +exports[`snapshotAllPages RTLExample 6`] = ` + + + + + + LTR + + + + + + + LRT or RTL TextInput. + + + + +`; + +exports[`snapshotAllPages RTLExample 7`] = ` + + + + + + LTR + + + + + + + + + Without directional meaning + + + + + + With directional meaning + + + + +`; + +exports[`snapshotAllPages RTLExample 8`] = ` + + + + + + LTR + + + + + + + + + + +`; + +exports[`snapshotAllPages RTLExample 9`] = ` + + + Styles + + + paddingStart: 50, + + + paddingEnd: 10 + + + + Demo: + + + The + teal + is padding. + + + + + + + + LTR + + + + + + + +`; + +exports[`snapshotAllPages RTLExample 10`] = ` + + + Styles + + + marginStart: 50, + + + marginEnd: 10 + + + + Demo: + + + The green is margin. + + + + + + + + LTR + + + + + + + +`; + +exports[`snapshotAllPages RTLExample 11`] = ` + + + Styles + + + start: 50 + + + + Demo: + + + The orange is position. + + + + + + + + LTR + + + + + + + + + Styles + + + end: 50 + + + + Demo: + + + The orange is position. + + + + + + + + LTR + + + + + + + +`; + +exports[`snapshotAllPages RTLExample 12`] = ` + + + Styles + + + borderStartWidth: 10, + + + borderEndWidth: 50 + + + + Demo: + + + + + + + + + LTR + + + + + + + + +`; + +exports[`snapshotAllPages RTLExample 13`] = ` + + + Styles + + + borderStartColor: 'red', + + + borderEndColor: 'green', + + + + Demo: + + + + + + + + + LTR + + + + + + + + +`; + +exports[`snapshotAllPages RTLExample 14`] = ` + + + Styles + + + borderTopStartRadius: 10, + + + borderTopEndRadius: 20, + + + borderBottomStartRadius: 30, + + + borderBottomEndRadius: 40 + + + + Demo: + + + + + + + + + LTR + + + + + + + + +`; + +exports[`snapshotAllPages RTLExample 15`] = ` + + + Styles + + + borderStartStartRadius: 10, + + + borderStartEndRadius: 20, + + + borderEndStartRadius: 30, + + + borderEndEndRadius: 40 + + + + Demo: + + + + + + + + + LTR + + + + + + + + +`; + +exports[`snapshotAllPages RTLExample 16`] = ` + + + Styles + + + borderStartColor: 'red', + + + borderEndColor: 'green', + + + borderStartWidth: 10, + + + borderEndWidth: 50, + + + borderTopStartRadius: 10, + + + borderTopEndRadius: 20, + + + borderBottomStartRadius: 30, + + + borderBottomEndRadius: 40 + + + + Demo: + + + + + + + + + LTR + + + + + + + + +`; + +exports[`snapshotAllPages ScrollView 1`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + Scroll to top + + + + + Scroll to bottom + + + + + Flash scroll indicators + + + +`; + +exports[`snapshotAllPages ScrollView 2`] = ` + + + + LTR Layout + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + Scroll to start + + + + + Scroll to end + + + + +`; + +exports[`snapshotAllPages ScrollView 3`] = ` + + + + RTL Layout + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + Scroll to start + + + + + Scroll to end + + + + +`; + +exports[`snapshotAllPages ScrollView 4`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + Scrolling enabled = true + + + + Disable Scrolling + + + + + Enable Scrolling + + + +`; + +exports[`snapshotAllPages ScrollView 5`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + + setContentContainerStyle + + + + + setContentInset + + + + +`; + +exports[`snapshotAllPages ScrollView 6`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + + Deceleration Rate: normal + + + + +`; + +exports[`snapshotAllPages ScrollView 7`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + + setDisableIntervalMomentum: false + + + + + setDisableScrollViewPanResponder: false + + + + +`; + +exports[`snapshotAllPages ScrollView 8`] = ` + + + + + STICKY HEADER + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + + invertStickyHeaders: false + + + + + Scroll to top + + + + + Scroll to bottom + + + + +`; + +exports[`snapshotAllPages ScrollView 9`] = ` + + + + + + Sticky Header 1 + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + Sticky Header 2 + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + Sticky Header 3 + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + + Scroll to top + + + + + Scroll to bottom + + + + +`; + +exports[`snapshotAllPages ScrollView 10`] = ` + + + + + + + + Press to change color + + + + + + + + + + + + + + + + + + + + scroll to top + + + + + + + + + scroll to bottom + + + + + + + +`; + +exports[`snapshotAllPages ScrollView 11`] = ` + + + + + + + Button + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + Keyboard Dismiss Mode + + + + + none + + + + + on-drag + + + + + Keyboard Should Persist taps + + + + + never + + + + + always + + + + + handled + + + + +`; + +exports[`snapshotAllPages ScrollView 12`] = ` + + + Content Size Changed: + original + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + Change Content Size + + + +`; + +exports[`snapshotAllPages ScrollView 13`] = ` + + + Scroll State: + none + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + +`; + +exports[`snapshotAllPages ScrollView 14`] = ` + + + onScroll: + none + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + +`; + +exports[`snapshotAllPages ScrollView 15`] = ` + + + } + style={ + [ + { + "backgroundColor": "#eeeeee", + "height": 300, + }, + { + "height": 200, + }, + ] + } + > + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + +`; + +exports[`snapshotAllPages ScrollView 16`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + removeClippedSubviews: false + + + +`; + +exports[`snapshotAllPages ScrollView 17`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + setScrollIndicatorInsets + + + + + showsHorizontalScrollIndicator: true + + + + + showsVerticalScrollIndicator: true + + + +`; + +exports[`snapshotAllPages ScrollView 18`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + + + snapToEnd: true + + + + + snapToStart: true + + + + + setSnapToInterval + + + + + reset snapToOffsets + + + +`; + +exports[`snapshotAllPages ScrollView 19`] = ` + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + +`; + +exports[`snapshotAllPages ScrollView 20`] = ` + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + + + + Add to top + + + + + Remove top + + + + + Change height top + + + + + + + Add to end + + + + + Remove end + + + + + Change height end + + + + +`; + +exports[`snapshotAllPages ScrollViewAnimated 1`] = ` + + + + + + + + Scroll me horizontally + + + + + + +`; + +exports[`snapshotAllPages ScrollViewSimpleExample 1`] = ` + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + Item 12 + + + + + Item 13 + + + + + Item 14 + + + + + Item 15 + + + + + Item 16 + + + + + Item 17 + + + + + Item 18 + + + + + Item 19 + + + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + Item 12 + + + + + Item 13 + + + + + Item 14 + + + + + Item 15 + + + + + Item 16 + + + + + Item 17 + + + + + Item 18 + + + + + Item 19 + + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + Item 12 + + + + + Item 13 + + + + + Item 14 + + + + + Item 15 + + + + + Item 16 + + + + + Item 17 + + + + + Item 18 + + + + + Item 19 + + + + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + Item 12 + + + + + Item 13 + + + + + Item 14 + + + + + Item 15 + + + + + Item 16 + + + + + Item 17 + + + + + Item 18 + + + + + Item 19 + + + + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + Item 12 + + + + + Item 13 + + + + + Item 14 + + + + + Item 15 + + + + + Item 16 + + + + + Item 17 + + + + + Item 18 + + + + + Item 19 + + + + + + + + + Item 0 + + + + + Item 1 + + + + + Item 2 + + + + + Item 3 + + + + + Item 4 + + + + + Item 5 + + + + + Item 6 + + + + + Item 7 + + + + + Item 8 + + + + + Item 9 + + + + + Item 10 + + + + + Item 11 + + + + + Item 12 + + + + + Item 13 + + + + + Item 14 + + + + + Item 15 + + + + + Item 16 + + + + + Item 17 + + + + + Item 18 + + + + + Item 19 + + + + + + +`; + +exports[`snapshotAllPages SectionList 1`] = ` +[ + + + Menu + + , + + + + contentInset top: 44 + + + + + + Toggle header size + + + + + + + + + + Main dishes + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + Sides + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + + , +] +`; + +exports[`snapshotAllPages SectionList 2`] = ` + + + + + + + + Test + + + + + + + + + + Main dishes + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + Sides + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + + +`; + +exports[`snapshotAllPages SectionList 3`] = ` + + + + + + + + + Main dishes + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + Sides + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + + +`; + +exports[`snapshotAllPages SectionList 4`] = ` + + + + + + Main dishes + + + + + + + Section separator for leading undefined and trailing Pizza has not been pressed + + + + + Pizza + + + + + separator for leading Pizza and trailing Burger has not been pressed + + + + + + + + + Burger + + + + + separator for leading Burger and trailing Risotto has not been pressed + + + + + + + + + Risotto + + + + + Section separator for leading Risotto and trailing undefined has not been pressed + + + + + + + + Sides + + + + + + + Section separator for leading undefined and trailing French Fries has not been pressed + + + + + French Fries + + + + + separator for leading French Fries and trailing Onion Rings has not been pressed + + + + + + + + + Onion Rings + + + + + separator for leading Onion Rings and trailing Fried Shrimps has not been pressed + + + + + + + + + Fried Shrimps + + + + + Section separator for leading Fried Shrimps and trailing undefined has not been pressed + + + + + + + + + +`; + +exports[`snapshotAllPages SectionList 5`] = ` + + + + stickySectionHeadersEnabled false + + + + + + Sticky On + + + + + + + + + + Main dishes + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + Sides + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + + +`; + +exports[`snapshotAllPages SectionList 6`] = ` + + + + inverted false + + + + + + Toggle true + + + + + + + + + + Main dishes + + + + + + Pizza + + + + + + + Burger + + + + + + + Risotto + + + + + + + Sides + + + + + + French Fries + + + + + + + Onion Rings + + + + + + + Fried Shrimps + + + + + + + + +`; + +exports[`snapshotAllPages SectionList 7`] = ` + + + + + + + + Virtualized + : + + + + + + Log Viewable + : + + + + + + Debug + : + + + + + + Inverted + : + + + + + + + + scroll to: + + + + + + + Top + + + + + + + + + + + 3rd Section + + + + + + + + + + + 6th Section + + + + + + + + + + + Out of Viewable Area (See warning) + + + + + + + + + + } + refreshing={false} + renderItem={[Function]} + scrollEventThrottle={0.0001} + stickyHeaderIndices={ + [ + 1, + 3, + 6, + 10, + ] + } + style={ + { + "backgroundColor": "white", + } + } + viewabilityConfig={ + { + "minimumViewTime": 3000, + "viewAreaCoveragePercentThreshold": 100, + "waitForInteraction": true, + } + } + > + + + + + + + LIST HEADER + + + + + + + + + SECTION HEADER: + empty section + + + + + + + + SECTION FOOTER: + empty section + + + + + + + + SECTION HEADER: + s1 + + + + + + + + + SECTION SEPARATOR + + + + + Item In Header Section + - + Section s1 + + + + + + SECTION SEPARATOR + + + + + + + + SECTION FOOTER: + s1 + + + + + + + + SECTION HEADER: + s2 + + + + + + + + + SECTION SEPARATOR + + + + + ITEM SEPARATOR + + + + + + + + + SECTION SEPARATOR + + + + + + + + SECTION FOOTER: + s2 + + + + + + + + SECTION HEADER: + 0 - 9 + + + + + + + + + + + LIST FOOTER + + + + + + + + +`; + +exports[`snapshotAllPages Share 1`] = ` + + + Native Experience + + + Our top priority for React Native is to match the expectations people have for each platform. This is why React Native renders to platform primitives. We value native look-and-feel over cross-platform consistency. For example, the TextInput in React Native renders to a UITextField on iOS. This ensures that integration with password managers and keyboard controls work out of the box. By using platform primitives, React Native apps are also able to stay up-to-date with design and behavior changes from new releases of Android and iOS. + + + + + + SHARE + + + + + +`; + +exports[`snapshotAllPages Share 2`] = ` + + + Massive Scale + + + Hundreds of screens in the Facebook app are implemented with React Native. The Facebook app is used by billions of people on a huge range of devices. This is why we invest in the most challenging problems at scale. Deploying React Native in our apps lets us identify problems that we wouldn’t see at a smaller scale. For example, Facebook focuses on improving performance across a broad spectrum of devices from the newest iPhone to many older generations of Android devices. This focus informs our architecture projects such as Hermes, Fabric, and TurboModules. + + + + + + SHARE + + + + + +`; + +exports[`snapshotAllPages Share 3`] = ` + + + action: + null + + + Create native apps + + + React Native combines the best parts of native development with React, a best-in-class JavaScript library for building user interfaces. + + + + + + SHARE + + + + + +`; + +exports[`snapshotAllPages SwipeableCard 1`] = ` +[ + + + + + + + + + Section # + 0 + + + + + + + + Section # + 1 + + + + + + + + Section # + 2 + + + + + + + + Section # + 3 + + + + + + + + Section # + 4 + + + + + + + + , + + + + + + + + + Section # + 0 + + + + + + + + Section # + 1 + + + + + + + + Section # + 2 + + + + + + + + Section # + 3 + + + + + + + + Section # + 4 + + + + + + + + , +] +`; + +exports[`snapshotAllPages Switch 1`] = ` + + + + + Off + + + + + + On + + + +`; + +exports[`snapshotAllPages Switch 2`] = ` + + + + + Off + + + + + + On + + + +`; + +exports[`snapshotAllPages Switch 3`] = ` + + + + + + Off + + + + + + + On + + + +`; + +exports[`snapshotAllPages Switch 4`] = ` + +`; + +exports[`snapshotAllPages Switch 5`] = ` + + + + +`; + +exports[`snapshotAllPages Switch 6`] = ` + + + +`; + +exports[`snapshotAllPages Switch 7`] = ` + + + +`; + +exports[`snapshotAllPages Switch 8`] = ` + + + + + + + + + + +`; + +exports[`snapshotAllPages Text 1`] = ` + + + + + + + textTransform + + + + + + + This + + text should be uppercased. + + + This TEXT SHOULD be lowercased. + + + This text should be CAPITALIZED. + + + Mixed: + + + uppercase + + + LoWeRcAsE + + + capitalize each word + + + + Should be "ABC": + + a + + b + + c + + + + + + Should be "XyZ": + + x + + y + + z + + + + + Should be "xYz": + + x + + y + + z + + + + + Click to toggle uppercase: + + + Hello + + + + + Click to change raw text: + + + Hello + World + + + + + + Click to toggle fast text on next line (should remain uppercase): + + + Howdy + + + + + + + + + Wrap + + + + + The text should wrap if it goes on multiple lines. See, this is going to the next line. + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus felis eget augue condimentum suscipit. Suspendisse hendrerit, libero aliquet malesuada tempor, urna nibh consectetur tellus, vitae efficitur quam erat non mi. Maecenas vitae eros sit amet quam vestibulum porta sed sit amet tellus. Fusce quis lectus congue, fringilla arcu id, luctus urna. Cras sagittis ornare mauris sit amet dictum. Vestibulum feugiat laoreet fringilla. Vivamus ac diam vehicula felis venenatis sagittis vitae ultrices elit. Curabitur libero augue, laoreet quis orci vitae, congue euismod massa. Aenean nec odio sed urna vehicula fermentum non a magna. Quisque ut commodo neque, eget eleifend odio. Sed sit amet lacinia sem. Suspendisse in metus in purus scelerisque vestibulum. Nam metus dui, efficitur nec metus non, tincidunt pharetra sapien. Praesent id convallis metus, ut malesuada arcu. Quisque quam libero, pharetra eu tellus ac, aliquam fringilla erat. Quisque tempus in lorem ac suscipit. + + + + + + + Padding + + + + + This text is indented by 10px padding on all sides. + + + + + + + Font Family + + + + + Sans-Serif + + + Sans-Serif Bold + + + Serif + + + Serif Bold + + + Monospace + + + Monospace Bold (After 5.0) + + + + + + + Android Material Design fonts + + + + + + + Roboto Regular + + + Roboto Italic + + + Roboto Bold + + + Roboto Bold Italic + + + Roboto Light + + + Roboto Light Italic + + + Roboto Thin (After 4.2) + + + Roboto Thin Italic (After 4.2) + + + Roboto Condensed + + + Roboto Condensed Italic + + + Roboto Condensed Bold + + + Roboto Condensed Bold Italic + + + Roboto Medium (After 5.0) + + + Roboto Medium Italic (After 5.0) + + + + + + + + + Custom Fonts + + + + + + + NotoSerif Regular + + + NotoSerif Bold Italic + + + NotoSerif Italic (Missing Font file) + + + + + + + + + Font Size + + + + + Size 23 + + + Size 8 + + + + + + + Color + + + + + Red color + + + Blue color + + + + + + + Font Weight + + + + + Move fast and be bold + + + Move fast and be bold + + + + + + + Font Style + + + + + Move fast and be bold + + + Move fast and be bold + + + + + + + Font Style and Weight + + + + + Move fast and be bold + + + + + + + Text Decoration + + + + + Solid underline + + + None textDecoration + + + Solid line-through + + + Both underline and line-through + + + Mixed text with + + + underline + + and + + + line-through + + + text nodes + + + + + + + Nested + + + + + (Normal text, + + (R)red + + (G)green + + (B)blue + + (C)cyan + + (M)magenta + + (Y)yellow + + (K)black + + + + + + + + + (and bold + + (and tiny bold italic blue + + (and tiny normal blue) + + ) + + ) + + ) + + + (Serif + + (Serif Bold Italic + + (Monospace Normal + + (Sans-Serif Bold + + (and Sans-Serif Normal) + + ) + + ) + + ) + + ) + + + + Entity Name + + + + + + + + Text Align + + + + + + auto (default) - english LTR + + + أحب اللغة العربية auto (default) - arabic RTL + + + left left left left left left left left left left left left left left left + + + center center center center center center center center center center center + + + right right right right right right right right right right right right right + + + + + + + + Unicode + + + + + + + 星际争霸是世界上最好的游戏。 + + + + + 星际争霸是世界上最好的游戏。 + + + + + 星际争霸是世界上最好的游戏。 + + + + + 星际争霸是世界上最好的游戏。星际争霸是世界上最好的游戏。星际争霸是世界上最好的游戏。星际争霸是世界上最好的游戏。 + + + + + + + + + Spaces + + + + + A + generated + + string + and some     spaces + + + + + + + Line Height + + + + + + Holisticly formulate inexpensive ideas before best-of-breed benefits. + + Continually + + expedite magnetic potentialities rather than client-focused interfaces. + + + Holisticly formulate inexpensive ideas before best-of-breed benefits. + + Continually + + expedite magnetic potentialities rather than client-focused interfaces. + + + + + + + + Letter Spacing + + + + + + letterSpacing = 0 + + + letterSpacing = 2 + + + letterSpacing = 9 + + + + With size and background color + + + + letterSpacing = -1 + + + [letterSpacing = 3] + + [Nested letterSpacing = 0] + + + [Nested letterSpacing = 6] + + + + + + + + + Empty Text + + + + + + + + + + Toggling Attributes + + + + + + Tap the controls below to change attributes. + + + + See how it will even work on + + + this nested text + + + + + + Toggle Weight + + (with highlight onPress) + + + Increase Size (suppressHighlighting true) + + + + + + + + backgroundColor new examples + + + + + + Outer pink + + + Outer + + red nested + + + + Outer + + + nested white on blue + + + + Outer pink + + nested red + + + + Outer on green + + + nested white on inherit green + + + + Outer orange on green + + + nested white on blue + + + + Outer orange + + + nested white on blue + + + + + nested orange inherit on blue + + + + Outer no_color + + + START_NESTED green + + + DEEPER_NESTED magenta on blue + + + END_NESTED + + + attributes. + + + Outer no_color + + + START_NESTED no_color + + + DEEPER_NESTED blue + + + END_NESTED + + + attributes. + + + Outer no_color + + + START_NESTED green + + DEEPER_NESTED inherit green + + + END_NESTED + + + attributes. + + + Outer red + + + START_NESTED inherit red + + DEEPER_NESTED inherit red + + + END_NESTED + + + attributes. + + + Outer red + + + START_NESTED green + + + DEEPER_NESTED blue + + + END_NESTED + + + attributes. + + + + + + + + backgroundColor attribute + + + + + Red background, + + + blue background, + + + inherited blue background, + + + nested green background. + + + + + + Same alpha as background, + + Inherited alpha from background, + + Reapply alpha + + + + + + + + + containerBackgroundColor attribute + + + + + + + + + Default containerBackgroundColor (inherited) + backgroundColor wash + + + containerBackgroundColor: 'transparent' + backgroundColor wash + + + + + + + numberOfLines attribute + + + + + 1 + + + Maximum of one line no matter now much I write here. If I keep writing it + ' + ll just truncate after one line. + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus felis eget augue condimentum suscipit. Suspendisse hendrerit, libero aliquet malesuada tempor, urna nibh consectetur tellus, vitae efficitur quam erat non mi. Maecenas vitae eros sit amet quam vestibulum porta sed sit amet tellus. Fusce quis lectus congue, fringilla arcu id, luctus urna. Cras sagittis ornare mauris sit amet dictum. Vestibulum feugiat laoreet fringilla. Vivamus ac diam vehicula felis venenatis sagittis vitae ultrices elit. Curabitur libero augue, laoreet quis orci vitae, congue euismod massa. Aenean nec odio sed urna vehicula fermentum non a magna. Quisque ut commodo neque, eget eleifend odio. Sed sit amet lacinia sem. Suspendisse in metus in purus scelerisque vestibulum. Nam metus dui, efficitur nec metus non, tincidunt pharetra sapien. Praesent id convallis metus, ut malesuada arcu. Quisque quam libero, pharetra eu tellus ac, aliquam fringilla erat. Quisque tempus in lorem ac suscipit. + + + 2 + + + Maximum of two lines no matter now much I write here. If I keep writing it + ' + ll just truncate after two lines. + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus felis eget augue condimentum suscipit. Suspendisse hendrerit, libero aliquet malesuada tempor, urna nibh consectetur tellus, vitae efficitur quam erat non mi. Maecenas vitae eros sit amet quam vestibulum porta sed sit amet tellus. Fusce quis lectus congue, fringilla arcu id, luctus urna. Cras sagittis ornare mauris sit amet dictum. Vestibulum feugiat laoreet fringilla. Vivamus ac diam vehicula felis venenatis sagittis vitae ultrices elit. Curabitur libero augue, laoreet quis orci vitae, congue euismod massa. Aenean nec odio sed urna vehicula fermentum non a magna. Quisque ut commodo neque, eget eleifend odio. Sed sit amet lacinia sem. Suspendisse in metus in purus scelerisque vestibulum. Nam metus dui, efficitur nec metus non, tincidunt pharetra sapien. Praesent id convallis metus, ut malesuada arcu. Quisque quam libero, pharetra eu tellus ac, aliquam fringilla erat. Quisque tempus in lorem ac suscipit. + + + (default) infinity + + + No maximum lines specified no matter now much I write here. If I keep writing it + ' + ll just keep going and going. + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus felis eget augue condimentum suscipit. Suspendisse hendrerit, libero aliquet malesuada tempor, urna nibh consectetur tellus, vitae efficitur quam erat non mi. Maecenas vitae eros sit amet quam vestibulum porta sed sit amet tellus. Fusce quis lectus congue, fringilla arcu id, luctus urna. Cras sagittis ornare mauris sit amet dictum. Vestibulum feugiat laoreet fringilla. Vivamus ac diam vehicula felis venenatis sagittis vitae ultrices elit. Curabitur libero augue, laoreet quis orci vitae, congue euismod massa. Aenean nec odio sed urna vehicula fermentum non a magna. Quisque ut commodo neque, eget eleifend odio. Sed sit amet lacinia sem. Suspendisse in metus in purus scelerisque vestibulum. Nam metus dui, efficitur nec metus non, tincidunt pharetra sapien. Praesent id convallis metus, ut malesuada arcu. Quisque quam libero, pharetra eu tellus ac, aliquam fringilla erat. Quisque tempus in lorem ac suscipit. + + + + + + + selectable attribute + + + + + This text is selectable if you click-and-hold, and will offer the native Android selection menus. + + + + + + + selectionColor attribute + + + + + This text will have a orange highlight on selection. + + + + + + + Inline images + + + + + This text contains an inline image + + + Neat, huh? + + + + + + + Text shadow + + + + + Demo text shadow + + + + + + + Ellipsize mode + + + + + + (default) tail + + + This very long text should be truncated with dots in the end. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus felis eget augue condimentum suscipit. Suspendisse hendrerit, libero aliquet malesuada tempor, urna nibh consectetur tellus, vitae efficitur quam erat non mi. Maecenas vitae eros sit amet quam vestibulum porta sed sit amet tellus. Fusce quis lectus congue, fringilla arcu id, luctus urna. Cras sagittis ornare mauris sit amet dictum. Vestibulum feugiat laoreet fringilla. Vivamus ac diam vehicula felis venenatis sagittis vitae ultrices elit. Curabitur libero augue, laoreet quis orci vitae, congue euismod massa. Aenean nec odio sed urna vehicula fermentum non a magna. Quisque ut commodo neque, eget eleifend odio. Sed sit amet lacinia sem. Suspendisse in metus in purus scelerisque vestibulum. Nam metus dui, efficitur nec metus non, tincidunt pharetra sapien. Praesent id convallis metus, ut malesuada arcu. Quisque quam libero, pharetra eu tellus ac, aliquam fringilla erat. Quisque tempus in lorem ac suscipit. + + + middle + + + This very long text should be truncated with dots in the middle. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus felis eget augue condimentum suscipit. Suspendisse hendrerit, libero aliquet malesuada tempor, urna nibh consectetur tellus, vitae efficitur quam erat non mi. Maecenas vitae eros sit amet quam vestibulum porta sed sit amet tellus. Fusce quis lectus congue, fringilla arcu id, luctus urna. Cras sagittis ornare mauris sit amet dictum. Vestibulum feugiat laoreet fringilla. Vivamus ac diam vehicula felis venenatis sagittis vitae ultrices elit. Curabitur libero augue, laoreet quis orci vitae, congue euismod massa. Aenean nec odio sed urna vehicula fermentum non a magna. Quisque ut commodo neque, eget eleifend odio. Sed sit amet lacinia sem. Suspendisse in metus in purus scelerisque vestibulum. Nam metus dui, efficitur nec metus non, tincidunt pharetra sapien. Praesent id convallis metus, ut malesuada arcu. Quisque quam libero, pharetra eu tellus ac, aliquam fringilla erat. Quisque tempus in lorem ac suscipit. + + + head + + + This very long text should be truncated with dots in the beginning. + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus felis eget augue condimentum suscipit. Suspendisse hendrerit, libero aliquet malesuada tempor, urna nibh consectetur tellus, vitae efficitur quam erat non mi. Maecenas vitae eros sit amet quam vestibulum porta sed sit amet tellus. Fusce quis lectus congue, fringilla arcu id, luctus urna. Cras sagittis ornare mauris sit amet dictum. Vestibulum feugiat laoreet fringilla. Vivamus ac diam vehicula felis venenatis sagittis vitae ultrices elit. Curabitur libero augue, laoreet quis orci vitae, congue euismod massa. Aenean nec odio sed urna vehicula fermentum non a magna. Quisque ut commodo neque, eget eleifend odio. Sed sit amet lacinia sem. Suspendisse in metus in purus scelerisque vestibulum. Nam metus dui, efficitur nec metus non, tincidunt pharetra sapien. Praesent id convallis metus, ut malesuada arcu. Quisque quam libero, pharetra eu tellus ac, aliquam fringilla erat. Quisque tempus in lorem ac suscipit. + + + clip + + + This very long text should be clipped and this will not be visible. + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus felis eget augue condimentum suscipit. Suspendisse hendrerit, libero aliquet malesuada tempor, urna nibh consectetur tellus, vitae efficitur quam erat non mi. Maecenas vitae eros sit amet quam vestibulum porta sed sit amet tellus. Fusce quis lectus congue, fringilla arcu id, luctus urna. Cras sagittis ornare mauris sit amet dictum. Vestibulum feugiat laoreet fringilla. Vivamus ac diam vehicula felis venenatis sagittis vitae ultrices elit. Curabitur libero augue, laoreet quis orci vitae, congue euismod massa. Aenean nec odio sed urna vehicula fermentum non a magna. Quisque ut commodo neque, eget eleifend odio. Sed sit amet lacinia sem. Suspendisse in metus in purus scelerisque vestibulum. Nam metus dui, efficitur nec metus non, tincidunt pharetra sapien. Praesent id convallis metus, ut malesuada arcu. Quisque quam libero, pharetra eu tellus ac, aliquam fringilla erat. Quisque tempus in lorem ac suscipit. + + + + + + + + Include Font Padding + + + + + + + Ey + + + Default + + + + + Ey + + + includeFontPadding: false + + + + + By default Android will put extra space above text to allow for upper-case accents or other ascenders. With some fonts, this can make text look slightly misaligned when centered vertically. + + + + + + + Text With Border + + + + + + Sample bordered text with default styling. + + + Some more bordered text + a tad of CSS. + + + + 1st nested - border specifcied but ignored. + + + + 2nd Inside text! + + + + + This text is + + + outlined + + + and laid out within the normal text run, so will wrap etc as normal text. + + + + + + + + Dynamic backgroundColor + + + + + + + + Toggle highlight on all text: + + + + + The quick brown fox jumped over the lazy dog. + + + + + + + + Customized Accessibility + + + + + + This text has customized accessibility. + + + + + + + + Font Variants + + + + + + Text with small-caps font variant. + + + Text with oldstyle-nums font variant. + + + Text with lining-nums font variant. + + + Text with tabular-nums font variant. + + + Text with proportional-nums font variant. + + + + + + + + Text with Advanced Borders + + + + + + This text has customized borders. + + + This text has customized borders. + + + This text has customized borders. + + + + + + + + Opacity + + + + + + This text has customized opacity. + + + This text has customized opacity. + + + This text has customized opacity. + + + This text has customized opacity. + + + This text has customized opacity. + + + This text has customized opacity. + + + This text has customized opacity. + + + This text has customized opacity. + + + This text has customized opacity. + + + This text has customized opacity. + + + + + + + + Height and Width + + + + + + This text has customized dimensions. + + + + + + + +`; + +exports[`snapshotAllPages TextInput 1`] = ` + +`; + +exports[`snapshotAllPages TextInput 2`] = ` + + + + 20 + + +`; + +exports[`snapshotAllPages TextInput 3`] = ` + + + +`; + +exports[`snapshotAllPages TextInput 4`] = ` + + + + + + + Clear + + + + + +`; + +exports[`snapshotAllPages TextInput 5`] = ` + + + + none + + + + + + + + sentences + + + + + + + + words + + + + + + + + characters + + + + + + +`; + +exports[`snapshotAllPages TextInput 6`] = ` + + + + true + + + + + + + + false + + + + + + +`; + +exports[`snapshotAllPages TextInput 7`] = ` + + + + default + + + + + + + + ascii-capable + + + + + + + + numbers-and-punctuation + + + + + + + + url + + + + + + + + number-pad + + + + + + + + phone-pad + + + + + + + + name-phone-pad + + + + + + + + email-address + + + + + + + + decimal-pad + + + + + + + + twitter + + + + + + + + web-search + + + + + + + + ascii-capable-number-pad + + + + + + + + numeric + + + + + + +`; + +exports[`snapshotAllPages TextInput 8`] = ` + + + + none + + + + + + + + text + + + + + + + + decimal + + + + + + + + numeric + + + + + + + + tel + + + + + + + + search + + + + + + + + email + + + + + + + + url + + + + + + +`; + +exports[`snapshotAllPages TextInput 9`] = ` + + + + + + + +`; + +exports[`snapshotAllPages TextInput 10`] = ` + + + + enter + + + + + + + + done + + + + + + + + go + + + + + + + + next + + + + + + + + previous + + + + + + + + search + + + + + + + + send + + + + + + +`; + +exports[`snapshotAllPages TextInput 11`] = ` + + + + + + + + + + + + + +`; + +exports[`snapshotAllPages TextInput 12`] = ` + + + + <No Event> + + + (prev: + <No Event> + ) + + + (prev2: + <No Event> + ) + + + (prev3: + <No Event> + ) + + +`; + +exports[`snapshotAllPages TextInput 13`] = ` + + + + + + + +`; + +exports[`snapshotAllPages TextInput 14`] = ` + + + + Hello + + + #World + + + + +`; + +exports[`snapshotAllPages TextInput 15`] = ` + + + + + + + + selection = + + {start:0,end:0} + + + Place at Start (0, 0) + + + Place at End ( + 29 + , + 29 + ) + + + Place at Random + + + Select All + + + Select Random + + + + + + + + + + selection = + + {start:0,end:0} + + + Place at Start (0, 0) + + + Place at End ( + 44 + , + 44 + ) + + + Place at Random + + + Select All + + + Select Random + + + + +`; + +exports[`snapshotAllPages TextInput 16`] = ` + + + + + + + + selection = + + {start:0,end:0} + + + Place at Start (0, 0) + + + Place at End ( + 42 + , + 42 + ) + + + Place at Random + + + Select All + + + Select Random + + + + + + + + + + selection = + + {start:0,end:0} + + + Place at Start (0, 0) + + + Place at End ( + 57 + , + 57 + ) + + + Place at Random + + + Select All + + + Select Random + + + + +`; + +exports[`snapshotAllPages TextInput 17`] = ` + +`; + +exports[`snapshotAllPages TextInput 18`] = ` + + + + Cycle + 1 + / + 6 + + + + + + + backgroundColor + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + + color + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + + fontFamily + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + + fontSize + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + + fontStyle + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + + fontWeight + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + + letterSpacing + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + + lineHeight + + + + + Hel + + + + + lo + + + + + Wor + + + + + ld! + + + + + + + textDecorationLine + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + + textShadow + + + + + He + + + ll + + + o, + + + + + + Wo + + + rl + + + d! + + + + + + +`; + +exports[`snapshotAllPages TextInput 19`] = ` + + + + + + + + + + Darker backgroundColor + + + + +`; + +exports[`snapshotAllPages TextInput 20`] = ` + + + + + + + + + + + + + + +`; + +exports[`snapshotAllPages TextInput 21`] = ` + +`; + +exports[`snapshotAllPages TextInput 22`] = ` + + + + + + +`; + +exports[`snapshotAllPages TextInput 23`] = ` + + + + +`; + +exports[`snapshotAllPages TextInput 24`] = ` + +`; + +exports[`snapshotAllPages TextInput 25`] = ` + + + + + + multiline with children, aligned bottom-right + + + +`; + +exports[`snapshotAllPages TextInput 26`] = ` + + + + + + +`; + +exports[`snapshotAllPages TextInput 27`] = ` + + + + + + +`; + +exports[`snapshotAllPages TextInput 28`] = ` + + + + Full width: + + + + Multiline: + + + + TextInput: + + + + small small small small small small + + + regular regular + + + huge huge huge huge huge + + + + Plain text value representation: + + + + Content Size: + {"width":0,"height":0} + + + +`; + +exports[`snapshotAllPages TextInput 29`] = ` + + + + + + +`; + +exports[`snapshotAllPages TextInput 30`] = ` + + + + + + + + + + + +`; + +exports[`snapshotAllPages TextInput 31`] = ` + + + + + +`; + +exports[`snapshotAllPages TextInput 32`] = ` + + + + Toggle padding + + +`; + +exports[`snapshotAllPages TextInput 33`] = ` + + + PressIn/PressOut message + + + +`; + +exports[`snapshotAllPages TextInput 34`] = ` + + + Default submit key (Enter): + + + + Custom submit key event (Shift + Enter), single-line: + + + + Custom submit key event (Shift + Enter), multi-line: + + + + Submit with Enter key, return key with Shift + Enter + + + +`; + +exports[`snapshotAllPages TextInput 35`] = ` +[ + + + some text to focus on + + + , + , +] +`; + +exports[`snapshotAllPages TextInput 36`] = ` +[ + + Spell Check Enabled: + , + , + , +] +`; + +exports[`snapshotAllPages TextInputs with key prop 1`] = ` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +exports[`snapshotAllPages Timers 1`] = ` + + + + Measure: + setTimeout + ( + fn, 0 + ) - + 0 + + + + + Measure: + setTimeout + ( + fn, 1 + ) - + 0 + + + + + Measure: + setTimeout + ( + fn, 100 + ) - + 0 + + + +`; + +exports[`snapshotAllPages Timers 2`] = ` + + + + Measure: + requestAnimationFrame + ( + fn + ) - + 0 + + + +`; + +exports[`snapshotAllPages Timers 3`] = ` + + + + + Run requestIdleCallback + + + + + Burn CPU inside of requestIdleCallback + + + + + Run requestIdleCallback with timeout option + + + + + Run background task + + + + + Stop background task + + + + - + + + +`; + +exports[`snapshotAllPages Timers 4`] = ` + + + + Measure: + setImmediate + ( + fn + ) - + 0 + + + +`; + +exports[`snapshotAllPages Timers 5`] = ` + + + + + Measure: + setInterval + ( + fn, 25 + ) - + 0 + + + + + Clear interval + + + + + + Unmount timer + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 1`] = ` + + + + + + + + + Tap Here For Custom Highlight! + + + + + + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 2`] = ` + + + + Tap Here For No Feedback! + + + + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 3`] = ` + + + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 4`] = ` + + + Underlay not visible + + +`; + +exports[`snapshotAllPages Touchable* and onPress 5`] = `null`; + +exports[`snapshotAllPages Touchable* and onPress 6`] = ` + + + This touchable is not focused. + + + This item still has focus, onBlur is not called + + +`; + +exports[`snapshotAllPages Touchable* and onPress 7`] = ` + + + Text has built-in onPress handling + + + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 8`] = ` + + + + + Press Me + + + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 9`] = ` + + + + + Press Me + + + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 10`] = ` + + + + 3D Touch is not available on this device + + + + + + Press Me + + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 11`] = ` + + + + + Press Outside This View + + + + + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 12`] = ` + + + + + + + TouchableHighlight: + Native Methods Exist + + + + + + + + TouchableOpacity: + Native Methods Exist + + + +`; + +exports[`snapshotAllPages Touchable* and onPress 13`] = `null`; + +exports[`snapshotAllPages Touchable* and onPress 14`] = ` + + + + Disabled TouchableOpacity + + + + + Enabled TouchableOpacity + + + + + Disabled TouchableHighlight + + + + + Enabled TouchableHighlight + + + + + Disabled TouchableWithoutFeedback + + + + + Enabled TouchableWithoutFeedback + + + +`; + +exports[`snapshotAllPages TransferProperties 1`] = ` + + + + This text should remain on the right after changing the radius + + + + + + + Change Border Radius + + + + + +`; + +exports[`snapshotAllPages TransferProperties 2`] = ` + + + + The zIndex should remain the same after changing the border radius + + + + ZIndex + 2 + + + + + ZIndex + 1 + + + + + ZIndex + 0 + + + + + ZIndex + -1 + + + + + + + + Change Border Radius + + + + + + + + + Change Sorting Order + + + + + +`; + +exports[`snapshotAllPages TransparentHitTestExample 1`] = ` + + + + HELLO! + + + + +`; + +exports[`snapshotAllPages View 1`] = ` + + + Blue background + + +`; + +exports[`snapshotAllPages View 2`] = ` + + + 5px blue border + + +`; + +exports[`snapshotAllPages View 3`] = ` + + + + 5px padding + + + + + 5px margin + + + + + Blue background + + + +`; + +exports[`snapshotAllPages View 4`] = ` + + + 5px blue border + + +`; + +exports[`snapshotAllPages View 5`] = ` + + + + Dashed border style + + + + + Dotted border style + + + +`; + +exports[`snapshotAllPages View 6`] = ` + + + + + + + + + + +`; + +exports[`snapshotAllPages View 7`] = ` + + + + + undefined + + + + + 5px margin + + + + + 5px margin and padding, + + + widthAutonomous=true + + + + +`; + +exports[`snapshotAllPages View 8`] = ` + + + + Opacity 0 + + + + + Opacity 0.1 + + + + + Opacity 0.3 + + + + + Opacity 0.5 + + + + + Opacity 0.7 + + + + + Opacity 0.9 + + + + + Opacity 1 + + + +`; + +exports[`snapshotAllPages View 9`] = ` + + + + Too much use of \`borderRadius\` (especially large radii) on anything which is scrolling may result in dropped frames. Use sparingly. + + + +`; + +exports[`snapshotAllPages View 10`] = ` + + + + Dashed border style + + + + + Dotted border style + + + +`; + +exports[`snapshotAllPages View 11`] = ` + + + Press to toggle \`display: none\` + + + + + + + + +`; + +exports[`snapshotAllPages View 12`] = ` + + + This Parent View has tooltip "Parent View" + + + + This view has tooltip "Child View 1" + + + + + This view has tooltip "Child View 2" + + + +`; + +exports[`snapshotAllPages View 13`] = ` + + + View #1, front is visible, back is hidden. + + + + + + Back (You should not see this) + + + + + View #2, front is hidden, back is visible. + + + + + + + + + + +`; + +exports[`snapshotAllPages View 14`] = ` + + + + + undefined + + + + + + + hidden + + + + + + + visible + + + + +`; + +exports[`snapshotAllPages View 15`] = ` + + + + Opacity 0 + + + + + Opacity 0.1 + + + + + Opacity 0.3 + + + + + Opacity 0.5 + + + + + Opacity 0.7 + + + + + Opacity 0.9 + + + + + Opacity 1 + + + +`; + +exports[`snapshotAllPages View 16`] = ` + + + Blobs + + + + + + + Same blobs, but their shared container have 0.5 opacity + + + Tap to + deactivate + + needsOffscreenAlphaCompositing + + + + + + +`; + +exports[`snapshotAllPages View 17`] = ` + + + Tap to flip sorting order + + + + ZIndex + 2 + + + + + ZIndex + 1 + + + + + ZIndex + 0 + + + + + ZIndex + -1 + + + +`; + +exports[`snapshotAllPages View 18`] = ` + + + Press to toggle \`display: none\` + + + + + + + + +`; + +exports[`snapshotAllPages View 19`] = ` + + + View #1, front is visible, back is hidden. + + + + + Front + + + + + Back (You should not see this) + + + + + View #2, front is hidden, back is visible. + + + + + Front (You should not see this) + + + + + Back + + + + +`; + +exports[`snapshotAllPages View 20`] = ` + + + Blue background + + +`; + +exports[`snapshotAllPages View 21`] = ` + + + + + + + + + + + + + +`; + +exports[`snapshotAllPages View 22`] = ` + + + + + inset 10 + + + + + + + insetBlock 5 + + + + + + + insetBlockEnd 5 + + + + + + + insetBlockStart 5 + + + + + + + insetInline 5 + + + + + + + insetInlineEnd 5 + + + + + + + insetInlineStart 5 + + + + +`; + +exports[`snapshotAllPages View 23`] = ` + + + A View with accessibility values. + + + Current Number of Accessibility Taps: + 0 + + + + This element should be hidden from accessibility. + + + +`; + +exports[`snapshotAllPages View 24`] = ` + +`; + +exports[`snapshotAllPages View 25`] = ` + +`; + +exports[`snapshotAllPages View 26`] = ` + + + + + borderBlockColor orange + + + + +`; + +exports[`snapshotAllPages View 27`] = ` + + + + + borderBlockColor orange + + + + + + + borderBlockStartColor purple + + + borderBlockEndColor green + + + + +`; + +exports[`snapshotAllPages View 28`] = ` + + + A View with a nativeID "native-id-view" + + +`; + +exports[`snapshotAllPages WebSocket 1`] = ` + + + + + To start the WS test server: + + + ./RNTester/js/examples/WebSocket/websocket_test_server.js + + + + + Current WebSocket state + + + (no value) + + + + + Last WebSocket event + + + (no value) + + + + + Last message received + + + (no value) + + + + + Last image received + + + + + + + Connect + + + + + Disconnect + + + + + + + + Send as text + + + + + Send as binary + + + + + + To start the HTTP test server: + + + ./RNTester/js/examples/WebSocket/http_test_server.js + + + + + + + Send HTTP request to set cookie + + + + + + - + + + + +`; + +exports[`snapshotAllPages XAML 1`] = ` + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +exports[`snapshotAllPages XMLHttpRequest 1`] = ` + + + + onreadystatechange handler + + + + + + onprogress handler + + + + + + download as arraybuffer + + + + + + + Download 7MB Text File + + + + + + onprogress: + 0 + / + 0 + + KB + + + +`; + +exports[`snapshotAllPages XMLHttpRequest 2`] = ` + + + + Upload 255 bytes as ... + + + + + + String + + + + + + + ArrayBuffer + + + + + + + Int8Array + + + + + + + Uint8Array + + + + + + + Uint8ClampedArray + + + + + + + Int16Array + + + + + + + Uint16Array + + + + + + + Int32Array + + + + + + + Uint32Array + + + + + + + Float32Array + + + + + + + Float64Array + + + + + + + DataView + + + + + + + + + + Upload + + + + + +`; + +exports[`snapshotAllPages XMLHttpRequest 3`] = ` + + + Edit URL to submit: + + + +`; + +exports[`snapshotAllPages XMLHttpRequest 4`] = ` + + + + + Get headers + + + + + +`; + +exports[`snapshotAllPages XMLHttpRequest 5`] = ` + + + + + Make Time Out Request + + + + + +`; + +exports[`snapshotAllPages XMLHttpRequest 6`] = ` + + + + + + Abort before response + + + + + + + + + Abort after response + + + + + +`; diff --git a/packages/e2e-test-app-fabric/test/snapshotPages.test.js b/packages/e2e-test-app-fabric/test/snapshotPages.test.js new file mode 100644 index 00000000000..92cc33a6be6 --- /dev/null +++ b/packages/e2e-test-app-fabric/test/snapshotPages.test.js @@ -0,0 +1,69 @@ +const React = require('react'); +import {create, act} from 'react-test-renderer'; +import {View} from 'react-native'; +jest.useFakeTimers(); + +type RNTesterExampleModule = { + title: string; + description: string; +}; + +type RNTesterModuleInfo = { + key: string; + module: RNTesterExampleModule; +}; + +type RNTesterList = { + APIs: RNTesterModuleInfo[]; + Components: RNTesterModuleInfo[]; +}; + +const testerList: RNTesterList = require('@react-native-windows/tester/js/utils/RNTesterList'); + +test('Component Control', () => { + let tree; + act(() => { + tree = create(); + }); + expect(tree.toJSON()).toMatchSnapshot(); +}); + +describe('snapshotAllPages', () => { + for (const component of testerList.Components) { + if (component.module.title == "New App Screen" || component.module.title == "Image"){ + // disable until errors are resolved + continue; + } + + test(component.module.title, () => { + for (const example of component.module.examples) { + const Example = example.render; + let tree; + act(() => { + tree = create(); + }); + expect(tree.toJSON()).toMatchSnapshot(); + } + }); + } + + for (const api of testerList.APIs) { + if (api.module.title === 'Transforms' || api.module.title === 'TurboModule' || api.module.title === 'Cxx TurboModule' || + api.module.title === 'Appearance' || api.module.title === 'AccessibilityInfo' || api.module.title === 'Accessibility' || + api.module.title === 'Invalid Props' || api.module.title === 'Animated - Gratuitous App'){ + // disable while these modules have not been implemented yet + continue; + } + + test(api.module.title, () => { + for (const example of api.module.examples) { + const Example = example.render; + let tree; + act(() => { + tree = create(); + }); + expect(tree.toJSON()).toMatchSnapshot(); + } + }); + } +}); diff --git a/packages/e2e-test-app-fabric/test/visitAllPages.test.ts b/packages/e2e-test-app-fabric/test/visitAllPages.test.ts new file mode 100644 index 00000000000..b09ddb2411e --- /dev/null +++ b/packages/e2e-test-app-fabric/test/visitAllPages.test.ts @@ -0,0 +1,13 @@ +/** + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * + * @format + */ +describe('visitAllPages', () => { + test('control', () => { + expect(true).toBe(true); + }); +}); + +export {}; diff --git a/packages/e2e-test-app-fabric/tsconfig.json b/packages/e2e-test-app-fabric/tsconfig.json index 3dd4a07382c..01ba8e955ef 100644 --- a/packages/e2e-test-app-fabric/tsconfig.json +++ b/packages/e2e-test-app-fabric/tsconfig.json @@ -5,7 +5,7 @@ }, "include": [ "app", - "test", "index.ts", + "test", "index.js", ], "exclude": [ "node_modules" diff --git a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric.sln b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric.sln index 86f1e9225ef..4feda32eaeb 100644 --- a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric.sln +++ b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric.sln @@ -25,6 +25,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Share EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactCommon", "..\..\..\vnext\ReactCommon\ReactCommon.vcxproj", "{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AutomationChannel", "..\..\..\node_modules\@react-native-windows\automation-channel\windows\AutomationChannel\AutomationChannel.vcxproj", "{C0A69310-6119-46DC-A6D6-0BAB7826DC92}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM64 = Debug|ARM64 @@ -117,6 +119,18 @@ Global {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32 {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32 {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Deploy.0 = Release|Win32 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Debug|ARM64.Build.0 = Debug|ARM64 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Debug|x64.ActiveCfg = Debug|x64 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Debug|x64.Build.0 = Debug|x64 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Debug|x86.ActiveCfg = Debug|Win32 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Debug|x86.Build.0 = Debug|Win32 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Release|ARM64.ActiveCfg = Release|ARM64 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Release|ARM64.Build.0 = Release|ARM64 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Release|x64.ActiveCfg = Release|x64 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Release|x64.Build.0 = Release|x64 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Release|x86.ActiveCfg = Release|Win32 + {C0A69310-6119-46DC-A6D6-0BAB7826DC92}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.cpp b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.cpp new file mode 100644 index 00000000000..14af20ba9ce --- /dev/null +++ b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.cpp @@ -0,0 +1,18 @@ +// AutolinkedNativeModules.g.cpp contents generated by "react-native autolink-windows" +// clang-format off +#include "pch.h" +#include "AutolinkedNativeModules.g.h" + +// Includes from @react-native-windows/automation-channel +#include + +namespace winrt::Microsoft::ReactNative +{ + +void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders) +{ + // IReactPackageProviders from @react-native-windows/automation-channel + packageProviders.Append(winrt::AutomationChannel::ReactPackageProvider()); +} + +} diff --git a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.props b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.props new file mode 100644 index 00000000000..aba33fd9286 --- /dev/null +++ b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.props @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.targets b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.targets new file mode 100644 index 00000000000..aa9e244030d --- /dev/null +++ b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/AutolinkedNativeModules.g.targets @@ -0,0 +1,10 @@ + + + + + + + {c0a69310-6119-46dc-a6d6-0bab7826dc92} + + + diff --git a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.cpp b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.cpp index 6597293233e..d711eb1c8d0 100644 --- a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.cpp +++ b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.cpp @@ -52,7 +52,7 @@ struct CompReactPackageProvider public: // IReactPackageProvider void CreatePackage(winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept { AddAttributedModules(packageBuilder, true); - packageBuilder.AddModule(L"DeviceInfo", winrt::Microsoft::ReactNative::MakeTurboModuleProvider()); + packageBuilder.AddTurboModule(L"DeviceInfo", winrt::Microsoft::ReactNative::MakeModuleProvider()); } }; @@ -191,7 +191,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_GETOBJECT: { if (lParam == UiaRootObjectId) { auto windowData = WindowData::GetFromWindow(hWnd); - if (!windowData->m_windowInited) + if (windowData == nullptr || !windowData->m_windowInited) break; auto hwndHost = windowData->m_CompositionHwndHost; diff --git a/yarn.lock b/yarn.lock index b28054f94da..467a5206509 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1414,6 +1414,116 @@ tar "^6.1.11" tar-stream "^2.1.4" +"@esbuild/android-arm64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.16.tgz#34f562abc0015933aabd41b3d50d8d3359e30155" + integrity sha512-wsCqSPqLz+6Ov+OM4EthU43DyYVVyfn15S4j1bJzylDpc1r1jZFFfJQNfDuT8SlgwuqpmpJXK4uPlHGw6ve7eA== + +"@esbuild/android-arm@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.16.tgz#ef6f9aa59a79a9b9330a2e73f7eb402c6630c267" + integrity sha512-gCHjjQmA8L0soklKbLKA6pgsLk1byULuHe94lkZDzcO3/Ta+bbeewJioEn1Fr7kgy9NWNFy/C+MrBwC6I/WCug== + +"@esbuild/android-x64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.16.tgz#ed7444cb17542932c67b15e20528686853239cfd" + integrity sha512-ldsTXolyA3eTQ1//4DS+E15xl0H/3DTRJaRL0/0PgkqDsI0fV/FlOtD+h0u/AUJr+eOTlZv4aC9gvfppo3C4sw== + +"@esbuild/darwin-arm64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.16.tgz#3c5a083e6e08a50f478fa243939989d86be1c6bf" + integrity sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw== + +"@esbuild/darwin-x64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.16.tgz#a8f3b61bee2807131cbe28eb164ad2b0333b59f5" + integrity sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA== + +"@esbuild/freebsd-arm64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.16.tgz#9bdbb3f0e5f0842b21c9b8602e70c106174ac24c" + integrity sha512-x35fCebhe9s979DGKbVAwXUOcTmCIE32AIqB9CB1GralMIvxdnMLAw5CnID17ipEw9/3MvDsusj/cspYt2ZLNQ== + +"@esbuild/freebsd-x64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.16.tgz#24f73956436495cc7a5a4bf06be6b661aea6a2c1" + integrity sha512-YM98f+PeNXF3GbxIJlUsj+McUWG1irguBHkszCIwfr3BXtXZsXo0vqybjUDFfu9a8Wr7uUD/YSmHib+EeGAFlg== + +"@esbuild/linux-arm64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.16.tgz#244569757f9cbd912f5a595a8ad8144f8c915f13" + integrity sha512-XIqhNUxJiuy+zsR77+H5Z2f7s4YRlriSJKtvx99nJuG5ATuJPjmZ9n0ANgnGlPCpXGSReFpgcJ7O3SMtzIFeiQ== + +"@esbuild/linux-arm@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.16.tgz#d63923c63af534032cc5ea0b2a0b3de10f8357f5" + integrity sha512-b5ABb+5Ha2C9JkeZXV+b+OruR1tJ33ePmv9ZwMeETSEKlmu/WJ45XTTG+l6a2KDsQtJJ66qo/hbSGBtk0XVLHw== + +"@esbuild/linux-ia32@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.16.tgz#a8825ccea6309f0bccfc5d87b43163ba804c2f20" + integrity sha512-no+pfEpwnRvIyH+txbBAWtjxPU9grslmTBfsmDndj7bnBmr55rOo/PfQmRfz7Qg9isswt1FP5hBbWb23fRWnow== + +"@esbuild/linux-loong64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.16.tgz#f530e820fc3c61cf2206155b994aeab53b6d25be" + integrity sha512-Zbnczs9ZXjmo0oZSS0zbNlJbcwKXa/fcNhYQjahDs4Xg18UumpXG/lwM2lcSvHS3mTrRyCYZvJbmzYc4laRI1g== + +"@esbuild/linux-mips64el@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.16.tgz#2d47ace539257896865d243641bd6716684a1e82" + integrity sha512-YMF7hih1HVR/hQVa/ot4UVffc5ZlrzEb3k2ip0nZr1w6fnYypll9td2qcoMLvd3o8j3y6EbJM3MyIcXIVzXvQQ== + +"@esbuild/linux-ppc64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.16.tgz#d6913e7e9be9e242a6a20402800141bdbe7009f7" + integrity sha512-Wkz++LZ29lDwUyTSEnzDaaP5OveOgTU69q9IyIw9WqLRxM4BjTBjz9un4G6TOvehWpf/J3gYVFN96TjGHrbcNQ== + +"@esbuild/linux-riscv64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.16.tgz#8f33b627389c8234fe61f4636c134f17fb1d9b09" + integrity sha512-LFMKZ30tk78/mUv1ygvIP+568bwf4oN6reG/uczXnz6SvFn4e2QUFpUpZY9iSJT6Qpgstrhef/nMykIXZtZWGQ== + +"@esbuild/linux-s390x@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.16.tgz#4d44c030f78962cf410f604f92fcc1505e4afdde" + integrity sha512-3ZC0BgyYHYKfZo3AV2/66TD/I9tlSBaW7eWTEIkrQQKfJIifKMMttXl9FrAg+UT0SGYsCRLI35Gwdmm96vlOjg== + +"@esbuild/linux-x64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.16.tgz#8846d00e16b1e93eb488c8b4dd51c946adfc236f" + integrity sha512-xu86B3647DihHJHv/wx3NCz2Dg1gjQ8bbf9cVYZzWKY+gsvxYmn/lnVlqDRazObc3UMwoHpUhNYaZset4X8IPA== + +"@esbuild/netbsd-x64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.16.tgz#6514a86bd07744f3100d2813ea2fb6520d53e72e" + integrity sha512-uVAgpimx9Ffw3xowtg/7qQPwHFx94yCje+DoBx+LNm2ePDpQXHrzE+Sb0Si2VBObYz+LcRps15cq+95YM7gkUw== + +"@esbuild/openbsd-x64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.16.tgz#ae67ce766d58aab6c0e6037f1a76f15df4a2a5fe" + integrity sha512-6OjCQM9wf7z8/MBi6BOWaTL2AS/SZudsZtBziXMtNI8r/U41AxS9x7jn0ATOwVy08OotwkPqGRMkpPR2wcTJXA== + +"@esbuild/sunos-x64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.16.tgz#998efe8a58374b7351ac710455051639a6ce6a05" + integrity sha512-ZoNkruFYJp9d1LbUYCh8awgQDvB9uOMZqlQ+gGEZR7v6C+N6u7vPr86c+Chih8niBR81Q/bHOSKGBK3brJyvkQ== + +"@esbuild/win32-arm64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.16.tgz#8de33682243508eef8d4de1816df2c05adad2b21" + integrity sha512-+j4anzQ9hrs+iqO+/wa8UE6TVkKua1pXUb0XWFOx0FiAj6R9INJ+WE//1/Xo6FG1vB5EpH3ko+XcgwiDXTxcdw== + +"@esbuild/win32-ia32@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.16.tgz#95c9f4274fb3ef9e449d464ffe3e3b7fa091503b" + integrity sha512-5PFPmq3sSKTp9cT9dzvI67WNfRZGvEVctcZa1KGjDDu4n3H8k59Inbk0du1fz0KrAbKKNpJbdFXQMDUz7BG4rQ== + +"@esbuild/win32-x64@0.18.16": + version "0.18.16" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.16.tgz#5be58d31d0120c68af8e38b702e6937ce764cd68" + integrity sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w== + "@eslint-community/eslint-utils@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz#a831e6e468b4b2b5ae42bf658bea015bf10bc518" @@ -2431,6 +2541,11 @@ resolved "https://registry.yarnpkg.com/@reactions/component/-/component-2.0.2.tgz#40f8c1c2c37baabe57a0c944edb9310dc1ec6642" integrity sha1-QPjBwsN7qr5XoMlE7bkxDcHsZkI= +"@rnx-kit/align-deps@^2.2.2": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@rnx-kit/align-deps/-/align-deps-2.2.4.tgz#3ed70da68276163ee9b362f1c625ccc4e17d364d" + integrity sha512-sLbQMBU6LvYesH6AsIHKsN6e90PU1JGyjzvZDXYX8VnxqgjmEkgqHF8/PFAKi0lP+OUzDZk6bmSo3cbhd6OqXg== + "@rnx-kit/babel-preset-metro-react-native@^1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@rnx-kit/babel-preset-metro-react-native/-/babel-preset-metro-react-native-1.1.4.tgz#7c526987208547614f7fc43ed6e001b183083dd7" @@ -2438,6 +2553,40 @@ dependencies: babel-plugin-const-enum "^1.0.0" +"@rnx-kit/cli@^0.16.9": + version "0.16.9" + resolved "https://registry.yarnpkg.com/@rnx-kit/cli/-/cli-0.16.9.tgz#69947223ebb12f75e0a349cb4ee61e9ffb846146" + integrity sha512-R93xEfLj/v6fclHBFmlfBW9zulDcFV6QnkWB3ypP2GJ5bJA8kEu7nXKybgfcV/wDRqOFVj40PcBaiGP1/30XOw== + dependencies: + "@rnx-kit/align-deps" "^2.2.2" + "@rnx-kit/config" "^0.6.2" + "@rnx-kit/console" "^1.0.11" + "@rnx-kit/metro-plugin-cyclic-dependencies-detector" "^1.1.1" + "@rnx-kit/metro-plugin-duplicates-checker" "^2.1.1" + "@rnx-kit/metro-plugin-typescript" "^0.4.1" + "@rnx-kit/metro-serializer" "^1.0.11" + "@rnx-kit/metro-serializer-esbuild" "^0.1.22" + "@rnx-kit/metro-service" "^3.0.4" + "@rnx-kit/third-party-notices" "^1.3.3" + "@rnx-kit/tools-language" "^2.0.0" + "@rnx-kit/tools-node" "^2.0.0" + "@rnx-kit/tools-react-native" "^1.3.1" + chalk "^4.1.0" + find-up "^5.0.0" + fs-extra "^10.0.0" + ora "^5.4.1" + qrcode "^1.5.0" + readline "^1.3.0" + +"@rnx-kit/config@^0.6.2", "@rnx-kit/config@^0.6.3": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@rnx-kit/config/-/config-0.6.4.tgz#b6f447e475cb4d3ad115f98512af6757cc642b27" + integrity sha512-/TEM41vFTU7O76MA6OjRNcGRvbYsiRon9ZOKaBQUomNfMVO9w1ts0Ax5SUC+q9ik7i4HDsjfwoMv3c+qmRq5+w== + dependencies: + "@rnx-kit/console" "^1.0.11" + "@rnx-kit/tools-node" "^2.0.0" + semver "^7.0.0" + "@rnx-kit/console@^1.0.0", "@rnx-kit/console@^1.0.11": version "1.0.11" resolved "https://registry.yarnpkg.com/@rnx-kit/console/-/console-1.0.11.tgz#63c9124080424fefb10252d6b3f6bd16e8f71529" @@ -2445,7 +2594,7 @@ dependencies: chalk "^4.1.0" -"@rnx-kit/jest-preset@^0.1.0": +"@rnx-kit/jest-preset@^0.1.0", "@rnx-kit/jest-preset@^0.1.14": version "0.1.14" resolved "https://registry.yarnpkg.com/@rnx-kit/jest-preset/-/jest-preset-0.1.14.tgz#f9fc2d5f813fc3c9b1fb74e192ec9a35ba5fff78" integrity sha512-gM/tz/VOdBWxF1n9prwnGbQUnFudt1eRqVrIZWRI5qikbKUEKyzK57iMjEGSZBIA+EpkOzEI+UOzKpW47zL0Yw== @@ -2465,7 +2614,15 @@ "@rnx-kit/tools-react-native" "^1.3.1" "@rnx-kit/tools-workspaces" "^0.1.3" -"@rnx-kit/metro-plugin-duplicates-checker@^2.1.0": +"@rnx-kit/metro-plugin-cyclic-dependencies-detector@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@rnx-kit/metro-plugin-cyclic-dependencies-detector/-/metro-plugin-cyclic-dependencies-detector-1.1.2.tgz#587dba02447d32c7a1e51e2469ff2ea0ce3bde10" + integrity sha512-NiAyZy8KRGo/+5F+Qdw0zTYJmEfcxpv1tjA83y3zenKCZyxL3IRDeI/moCBerxjU0usSGjEFraxJk9HklnV4jw== + dependencies: + "@rnx-kit/console" "^1.0.11" + "@rnx-kit/tools-node" "^2.0.0" + +"@rnx-kit/metro-plugin-duplicates-checker@^2.1.0", "@rnx-kit/metro-plugin-duplicates-checker@^2.1.1": version "2.1.2" resolved "https://registry.yarnpkg.com/@rnx-kit/metro-plugin-duplicates-checker/-/metro-plugin-duplicates-checker-2.1.2.tgz#3784525dd412ab9a1a900ff2be697107b5b28121" integrity sha512-77urwex95u8eHGpYJKnu6JVkT2WjB08Cg9qot4XbwM7y7WD0kLQcJrvCkqekQbtg6kolOyk6jCz84zNeyhyLqw== @@ -2473,6 +2630,32 @@ "@rnx-kit/console" "^1.0.11" "@rnx-kit/tools-node" "^2.0.0" +"@rnx-kit/metro-plugin-typescript@^0.4.1": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@rnx-kit/metro-plugin-typescript/-/metro-plugin-typescript-0.4.3.tgz#edd73c1afc0911a63c9371bba81766058ef4ac97" + integrity sha512-ehyHCHnGYlTFi7eAxAY/ZAZDzquOb/L/0LDq3asfbAQwTeF8M9+FQTCTk3R8O3gIAnoQVvhXzJ3pmD+iBiNAjg== + dependencies: + "@rnx-kit/config" "^0.6.3" + "@rnx-kit/console" "^1.0.0" + "@rnx-kit/tools-node" "^2.0.0" + "@rnx-kit/tools-react-native" "^1.3.1" + "@rnx-kit/typescript-service" "^1.5.6" + semver "^7.0.0" + typescript ">=4.7.0" + +"@rnx-kit/metro-serializer-esbuild@^0.1.22": + version "0.1.26" + resolved "https://registry.yarnpkg.com/@rnx-kit/metro-serializer-esbuild/-/metro-serializer-esbuild-0.1.26.tgz#2a4a5e2f5f1248f8f694069d934c0edc97979396" + integrity sha512-W0dCYRhmImgCtR4q/BZNiNj9GxHYhATI0+T6zGholkZSBsu/C0eUY8mX0w1QORYlFZRYMzbbnoDBiMr2wRge4A== + dependencies: + "@rnx-kit/console" "^1.0.11" + "@rnx-kit/tools-node" "^2.0.0" + "@rnx-kit/tools-react-native" "^1.3.1" + esbuild "^0.18.0" + esbuild-plugin-lodash "^1.2.0" + fast-glob "^3.2.7" + semver "^7.0.0" + "@rnx-kit/metro-serializer@^1.0.11": version "1.0.11" resolved "https://registry.yarnpkg.com/@rnx-kit/metro-serializer/-/metro-serializer-1.0.11.tgz#703a61c70dafa0e89253ad2df7f45f60eaac6bbb" @@ -2480,6 +2663,24 @@ dependencies: semver "^7.0.0" +"@rnx-kit/metro-service@^3.0.4": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@rnx-kit/metro-service/-/metro-service-3.0.5.tgz#c7e1259eaeebda00f14ba9f9fc154b9021ae4b61" + integrity sha512-te9JDNtkPbEROYuW+KbYHZ2yv3QTz4LqrITU34uRUEwCtUirDR6sxaaB+p4vUO3EuahWMQpTSCeVfLggCv0Kow== + dependencies: + "@rnx-kit/tools-language" "^2.0.0" + chalk "^4.1.0" + +"@rnx-kit/third-party-notices@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@rnx-kit/third-party-notices/-/third-party-notices-1.3.3.tgz#febc4609b32c95cabc00bd18546c2b96bcc89241" + integrity sha512-VPmrG0goSMlnlGa2aOFr4yzo6upT6KxqXeRSq5yPDnoSHuU4AeOPihWJHRw6Yw5PP+C629XbJnM5RcHEKhpZMg== + dependencies: + "@rnx-kit/console" "^1.0.11" + "@rnx-kit/tools-node" "^2.0.0" + spdx-expression-parse "^3.0.1" + yargs "^16.0.0" + "@rnx-kit/tools-language@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@rnx-kit/tools-language/-/tools-language-2.0.0.tgz#f6b12f9c7f1aa5245f2e6db4f03855a9a3d40add" @@ -2512,6 +2713,14 @@ read-yaml-file "^2.1.0" strip-json-comments "^3.1.1" +"@rnx-kit/typescript-service@^1.5.6": + version "1.5.6" + resolved "https://registry.yarnpkg.com/@rnx-kit/typescript-service/-/typescript-service-1.5.6.tgz#f1b608113316e21dc9998d70a5b1a44a8b6f1665" + integrity sha512-3Q1PpLI0oJ5XUZfr7lro72gWDBqWX6J7O6OHGibNtciE21ZaNCFLWbAzpabDz4NbZ7dcuYhr1j3JUCnNpJ7GAg== + dependencies: + "@rnx-kit/tools-node" "^2.0.0" + chalk "^4.1.0" + "@rushstack/node-core-library@3.45.3": version "3.45.3" resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.45.3.tgz#8db2befbbf23969e08d2bc69d5d91ba812c01640" @@ -5117,6 +5326,11 @@ diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +dijkstrajs@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" + integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== + dir-glob@^2.0.0, dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -5198,6 +5412,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +encode-utf8@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -5374,6 +5593,39 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.3" es6-symbol "^3.1.1" +esbuild-plugin-lodash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/esbuild-plugin-lodash/-/esbuild-plugin-lodash-1.2.0.tgz#6395b64cbb9b23a1bee3e37fbbdd98c50bd0b53a" + integrity sha512-8CyR67Z/VMvcJ4ABYYSaR2hhioeuoFVII1IsyPb6AwAKN57VQW8jFXyY27OwH4FGU3h3OVwwQ/GVNbo+RgpTGA== + +esbuild@^0.18.0: + version "0.18.16" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.16.tgz#bbeb058c556152bcbff4e8168e7c93020ccf09c3" + integrity sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ== + optionalDependencies: + "@esbuild/android-arm" "0.18.16" + "@esbuild/android-arm64" "0.18.16" + "@esbuild/android-x64" "0.18.16" + "@esbuild/darwin-arm64" "0.18.16" + "@esbuild/darwin-x64" "0.18.16" + "@esbuild/freebsd-arm64" "0.18.16" + "@esbuild/freebsd-x64" "0.18.16" + "@esbuild/linux-arm" "0.18.16" + "@esbuild/linux-arm64" "0.18.16" + "@esbuild/linux-ia32" "0.18.16" + "@esbuild/linux-loong64" "0.18.16" + "@esbuild/linux-mips64el" "0.18.16" + "@esbuild/linux-ppc64" "0.18.16" + "@esbuild/linux-riscv64" "0.18.16" + "@esbuild/linux-s390x" "0.18.16" + "@esbuild/linux-x64" "0.18.16" + "@esbuild/netbsd-x64" "0.18.16" + "@esbuild/openbsd-x64" "0.18.16" + "@esbuild/sunos-x64" "0.18.16" + "@esbuild/win32-arm64" "0.18.16" + "@esbuild/win32-ia32" "0.18.16" + "@esbuild/win32-x64" "0.18.16" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -10585,6 +10837,11 @@ please-upgrade-node@^3.2.0: dependencies: semver-compare "^1.0.0" +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -10751,6 +11008,16 @@ pure-rand@^6.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.0.tgz#701996ceefa253507923a0e864c17ab421c04a7c" integrity sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw== +qrcode@^1.5.0: + version "1.5.3" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" + integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== + dependencies: + dijkstrajs "^1.0.1" + encode-utf8 "^1.0.3" + pngjs "^5.0.0" + yargs "^15.3.1" + qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -11722,7 +11989,7 @@ spdx-exceptions@^2.1.0: resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.0: +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== @@ -12294,6 +12561,11 @@ typescript@5.0.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== +typescript@>=4.7.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + typescript@^4.4.3: version "4.8.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" @@ -12924,7 +13196,7 @@ yargs@^15.1.0, yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.1.0, yargs@^16.2.0: +yargs@^16.0.0, yargs@^16.1.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==