diff --git a/README.md b/README.md index 93327b5adb..cf3905e580 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ This project is set up to use [jest](https://facebook.github.io/jest/) for tests This repository uses Appium to run UI tests. The tests live in `__device-tests__` and are written using Appium to run tests against simulators and real devices. To run these you'll need to check off a few things: * When running the tests, you'll need to ensure the Metro bundler (`npm run start`) is not running. -* [Appium CLI](https://appium.io/docs/en/about-appium/getting-started/) installed and available globally. We also recommend using [appium-doctor](https://github.com/appium/appium-doctor) to ensure all of Appium's dependencies are good to go. You don't have to worry about starting the server yourself, the tests handle starting the server on port 4723, just be sure that the port is free or feel free to change the port number in the test file. +* [Appium CLI](https://github.com/appium/appium/blob/master/docs/en/about-appium/getting-started.md) installed and available globally. We also recommend using [appium-doctor](https://github.com/appium/appium-doctor) to ensure all of Appium's dependencies are good to go. You don't have to worry about starting the server yourself, the tests handle starting the server on port 4723, just be sure that the port is free or feel free to change the port number in the test file. * For iOS a simulator should automatically launch but for Android you'll need to have an emulator *with at least platform version 8.0* fired up and running. Then, to run the UI tests on iOS: diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 13fed994c8..4e1d54bd40 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,6 +1,9 @@ Unreleased --- -* [*] fix: Native inner blocks merge where appropriate [https://github.com/wordpress-mobile/gutenberg-mobile/pull/5222] + +1.84.1 +--- +* [**] Native inner blocks merge where appropriate [https://github.com/wordpress-mobile/gutenberg-mobile/pull/5222] 1.84.0 --- diff --git a/bundle/ios/App.js b/bundle/ios/App.js index 35d4c2c883..49669b0b88 100644 --- a/bundle/ios/App.js +++ b/bundle/ios/App.js @@ -1343,7 +1343,7 @@ __d(function(e,t,o,i,l,n,a){l.exports={100:[],"Nested blocks will fill the width __d(function(e,t,o,i,l,s,a){l.exports={100:["100"],"Nested blocks will fill the width of this container. Toggle to constrain.":[],"You are currently in zoom-out mode.":[],"The Queen of Hearts.":[],"The Mad Hatter.":[],"The Cheshire Cat.":[],"The White Rabbit.":[],"Alice.":[],"Gather blocks in a container.":[],"Inner blocks use content width":[],Constrained:[],"Spacing Control":[],"Custom (%s)":[],"All sides":[],"Show label":[],"Embed a podcast player from Pocket Casts.":[],"66 / 33":[],"33 / 66":[],"Nested blocks use content width with options for full and wide widths.":[],"Copy block":[],"block title\x04Categories List":[],"Show empty categories":[],"block description\x04Gather blocks in a layout container.":[],"Link sides":[],"Unlink sides":[],"Quote citation":[],"Arrange blocks vertically.":[],Stack:[],"Arrange blocks horizontally.":[],Week:[],"Group by:":[],"single horizontal line\x04Row":[],"Alignment option\x04None":[],"Vertical alignment":[],"Align items bottom":[],"Align items center":[],"Align items top":[],Unwrap:[],"block description\x04Create a list item.":[],"block title\x04List item":[],"View Preview":[],"Largest size":[],"Smallest size":[],"%s link":[],"Preference activated - %s":[],"Preference deactivated - %s":[],"Draft saved.":[],"Set custom size":[],"Use size preset":[],"Indicates this palette is created by the user.\x04Custom":[],"Indicates this palette comes from the theme.\x04Custom":[],"Indicates this palette comes from WordPress.\x04Default":[],"Indicates this palette comes from the theme.\x04Theme":[],"%s applied.":[],"%s removed.":[],"Embed Wolfram notebook content.":[],"Allow to wrap to multiple lines":[],"block style label\x04Plain":[],"Embed Pinterest pins, boards, and profiles.":[],bookmark:[],"Show only top level categories":[],"https://wordpress.org/support/article/page-jumps/":[],Featured:[],Highlight:[],"You do not have permission to create Pages.":[],"Block spacing":[],"Max %s wide":[],"block description\x04Display content in multiple columns, with blocks added to each column.":[],"Minimum height":[],"block description\x04Create structured content in rows and columns to display information.":[],"Preload value\x04None":[],"noun; Audio block parameter\x04Preload":[],"Media item link option\x04None":[],Justification:[],"Loading options\u2026":[],"All gallery image sizes updated to: %s":[],"All gallery images updated to not open in new tab":[],"All gallery images updated to open in new tab":[],"All gallery image links updated to: %s":[],"If uploading to a gallery all files need to be image formats":[],Flow:[],Flex:[],"Name of the file\x04Armstrong_Small_Step":[],"No published posts found.":[],"Autoplay may cause usability issues for some users.":[],Radius:[],"Link radii":[],"Unlink radii":[],"Bottom right":[],"Bottom left":[],"Top right":[],"Top left":[],"block keyword\x04link":[],"block keyword\x04movie":[],"block description\x04Embed a video from your media library or upload a new one.":[],"block keyword\x04poem":[],"block keyword\x04poetry":[],"block description\x04Insert poetry. Use special spacing formats. Or quote song lyrics.":[],"block description\x04This block is deprecated. Please use the Columns block instead.":[],"block description\x04A cloud of your most used tags.":[],"block style label\x04Stripes":[],"block description\x04Add white space between blocks and customize its height.":[],"block style label\x04Pill Shape":[],"block style label\x04Logos Only":[],"block description\x04Display icons linking to your social media profiles or sites.":[],"block description\x04Display an icon linking to a social media profile or site.":[],"block description\x04Insert additional custom elements with a WordPress shortcode.":[],"block style label\x04Dots":[],"block style label\x04Wide Line":[],"block keyword\x04divider":[],"block keyword\x04hr":[],"block keyword\x04horizontal-line":[],"block description\x04Create a break between ideas or sections with a horizontal separator.":[],"block keyword\x04find":[],"block description\x04Help visitors find your content.":[],"block keyword\x04feed":[],"block keyword\x04atom":[],"block description\x04Display entries from any RSS or Atom feed.":[],"block keyword\x04cite":[],"block keyword\x04blockquote":[],"block description\x04Give special visual emphasis to a quote from your text.":[],"block description\x04Add text that respects your spacing and tabs, and also allows styling.":[],"block keyword\x04text":[],"block description\x04Start with the basic building block of all narrative.":[],"block keyword\x04pagination":[],"block keyword\x04next page":[],"block description\x04Separate your content into a multi-page experience.":[],"block keyword\x04read more":[],"block description\x04Content before this block will be shown in the excerpt on your archives page.":[],"block description\x04Your site doesn\u2019t include support for this block.":[],"block keyword\x04video":[],"block keyword\x04image":[],"block description\x04Set media and words side-by-side for a richer layout.":[],"block keyword\x04numbered list":[],"block keyword\x04ordered list":[],"block keyword\x04bullet list":[],"block description\x04Create a bulleted or numbered list.":[],"block keyword\x04recent posts":[],"block description\x04Display a list of your most recent posts.":[],"block keyword\x04recent comments":[],"block description\x04Display a list of your most recent comments.":[],"block style label\x04Rounded":[],"block style label\x04Default":[],"block keyword\x04picture":[],"block keyword\x04photo":[],"block keyword\x04img":[],"block description\x04Insert an image to make a visual statement.":[],"block keyword\x04embed":[],"block description\x04Add custom HTML code and preview it as you edit.":[],"block keyword\x04subtitle":[],"block keyword\x04title":[],"block keyword\x04section":[],"block keyword\x04row":[],"block keyword\x04wrapper":[],"block keyword\x04container":[],"block keyword\x04photos":[],"block keyword\x04images":[],"block description\x04Display multiple images in a rich gallery.":[],"block description\x04Use the classic WordPress editor.":[],"block keyword\x04download":[],"block keyword\x04pdf":[],"block keyword\x04document":[],"block description\x04Add a link to a downloadable file.":[],"block description\x04Add an image or video with a text overlay \u2014 great for headers.":[],"block description\x04A single column within a columns block.":[],"block description\x04Display code snippets that respect your spacing and tabs.":[],"block description\x04Display a list of all categories.":[],"block keyword\x04archive":[],"block keyword\x04posts":[],"block description\x04A calendar of your site\u2019s posts.":[],"block description\x04Prompt visitors to take action with a group of button-style links.":[],"block style label\x04Outline":[],"block style label\x04Fill":[],"block description\x04Prompt visitors to take action with a button-style link.":[],"block keyword\x04recording":[],"block keyword\x04podcast":[],"block keyword\x04sound":[],"block keyword\x04music":[],"block description\x04Embed a simple audio player.":[],"block description\x04Display a date archive of your posts.":[],"Points (pt)":[],"Picas (pc)":[],"Inches (in)":[],"Millimeters (mm)":[],"Centimeters (cm)":[],"x-height of the font (ex)":[],"Width of the zero (0) character (ch)":[],"Viewport largest dimension (vmax)":[],"Viewport smallest dimension (vmin)":[],"Percent (%)":[],Margin:[],"Customize the width for all elements that are assigned to the center or wide columns.":[],Wide:[],"Widget types":[],"Custom template created. You're in template mode now.":[],"Embed of %s.":[],"PDF embed":[],"Add citation":[],"Add quote":[],"Add caption":[],"Relative to root font size (rem)\x04rems":[],"Relative to parent font size (em)\x04ems":[],Border:[],"Your site does not have any posts, so there is nothing to display here at the moment.":[],"Block cannot be rendered inside itself.":["\ube14\ub85d\uc740 \uc790\uccb4\uc801\uc73c\ub85c \ub80c\ub354\ub9c1\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."],Indent:["\ub4e4\uc5ec\uc4f0\uae30"],Outdent:["\ub0b4\uc5b4\uc4f0\uae30"],Ordered:["\uc815\ub82c"],Unordered:["\ube44\uc815\ub82c"],"Space between items":["\uc544\uc774\ud15c \uac04 \uac04\uaca9"],"Add an anchor":["\uc575\ucee4 \ucd94\uac00"],Align:["\uc815\ub82c"],"block title\x04Social Icon":["\uc18c\uc15c \uc544\uc774\ucf58"],"block title\x04Social Icons":["\uc18c\uc15c \uc544\uc774\ucf58"],"block title\x04Tag Cloud":["\ud0dc\uadf8 \ud074\ub77c\uc6b0\ub4dc"],"block title\x04Video":["\ube44\ub514\uc624"],"block title\x04Verse":["\uc808"],"block title\x04Text Columns (deprecated)":["\ubb38\uc790 \uceec\ub7fc (\ub354 \uc774\uc0c1 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4)"],"block title\x04Table":["\ud0dc\uc774\ube14"],"block title\x04Spacer":["\uc5ec\ubc31 \ub3c4\uad6c"],"block title\x04Shortcode":["\uc1fc\ud2b8\ucf54\ub4dc"],"block title\x04Separator":["\uad6c\ubd84\uc790"],"block title\x04Group":["\uadf8\ub8f9"],"block title\x04Search":["\uac80\uc0c9\ud558\uae30"],"block title\x04RSS":["RSS"],"block title\x04Reusable block":[],"block title\x04Pullquote":["\ub0b4\ubd80 \uc778\uc6a9"],"block title\x04Preformatted":["\uc0ac\uc804 \uc11c\uc2dd\ud654"],"block title\x04Page Break":["\ud328\uc774\uc9c0 \ub098\ub214"],"block title\x04More":["\ub354 \ubcf4\uae30"],"block title\x04Unsupported":["\uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4"],"block title\x04List":["\ubaa9\ub85d"],"block title\x04Latest Posts":["\ucd5c\uc2e0 \uae00"],"block title\x04Latest Comments":["\ucd5c\uadfc \ub313\uae00"],"block title\x04Media & Text":["\ubbf8\ub514\uc5b4 & \ubb38\uc790"],"block title\x04Custom HTML":["\uc0ac\uc6a9\uc790 \uc815\uc758 HTML"],"block title\x04File":["\ud30c\uc77c"],"block title\x04Cover":["\ud45c\uc9c0"],"block title\x04Column":["\uceec\ub7fc"],"block title\x04Columns":["\uceec\ub7fc"],"block title\x04Code":["\ucf54\ub4dc"],"block title\x04Calendar":["\uce98\ub9b0\ub354"],"block title\x04Buttons":["\ubc84\ud2bc"],"block title\x04Button":["\ubc84\ud2bc"],"block title\x04Audio":["\uc624\ub514\uc624"],"block title\x04Archives":["\ubcf4\uad00\ud568"],"block title\x04Gallery":["\uac24\ub7ec\ub9ac"],"block title\x04Quote":["\uc778\uc6a9"],"block title\x04Heading":["\ud5e4\ub529"],"block title\x04Image":["\uc774\ubbf8\uc9c0"],"block title\x04Paragraph":["\ubb38\ub2e8"],"text direction\x04ltr":["\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c \uc4f0\uae30"],"Block vertical alignment setting\x04Align bottom":["\ud558\ub2e8\uc5d0 \uc815\ub82c\ud558\uae30"],"Block vertical alignment setting\x04Align middle":["\uc911\uac04\uc5d0 \uc815\ub82c\ud558\uae30"],"Block vertical alignment setting\x04Align top":["\uc0c1\ub2e8\uc5d0 \uc815\ub82c\ud558\uae30"],"Wood thrush singing in Central Park, NYC.":["\ub098\ubb34 \uac1c\ub625\uc9c0\ube60\uadc0\uac00 \ub274\uc695\uc2dc \uc13c\ud2b8\ub7f4 \uacf5\uc6d0\uc5d0\uc11c \ub178\ub798\ud558\ub294 \uc911\uc785\ub2c8\ub2e4."],"Write verse\u2026":["\uc808 \uc4f0\uae30\u2026"],"Verse text":["\uc808 \ubb38\uc790"],"Column %d text":["%d\uceec\ub7fc \ubb38\uc790"],"Table caption text":["\ud0dc\uc774\ube14 \ucea1\uc158 \ubb38\uc790"],"Footer cell text":["\ud478\ud130 \uc140 \ubb38\uc790"],"Body cell text":["\ubcf8\ubb38 \uc140 \ubb38\uc790"],"Header cell text":["\ud5e4\ub354 \uc140 \ubb38\uc790"],"Pullquote citation text":["\uc778\uc6a9\uad6c \ub0b4\ubd80 \uc778\uc6a9 \ubb38\uc790"],"Pullquote text":["\ub0b4\ubd80 \uc778\uc6a9 \ubb38\uc790"],"Preformatted text":["\uc0ac\uc804 \uc11c\uc2dd\ud654 \ubb38\uc790"],"List text":["\ubaa9\ub85d \ubb38\uc790"],Vertical:["\uc218\uc9c1"],Horizontal:["\uc218\ud3c9"],"Heading text":["\ud5e4\ub529 \ubb38\uc790"],"Editing template. Changes made here affect all posts and pages that use the template.":["\ud15c\ud50c\ub9bf\uc744 \ud3b8\uc9d1\ud558\ub294 \uc911\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c \ub9cc\ub4e0 \ubcc0\uacbd\uc0ac\ud56d\uc740 \ud15c\ud50c\ub9bf\uc744 \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub4e0 \uae00\uacfc \ud328\uc774\uc9c0\uc5d0 \uc601\ud5a5\uc774 \uc788\uc2b5\ub2c8\ub2e4."],"%1$s %2$s":["%1$s %2$s"],Themes:["\ud14c\ub9c8"],"Viewport height (vh)":["\ubdf0\ud3ec\ud2b8 \ub192\uc774 (vh)"],"Viewport width (vw)":["\ubdf0\ud3ec\ud2b8 \ub113\uc774 (vw)"],"Relative to root font size (rem)":["\ub8e8\ud2b8 \uae00\uaf34 \ud06c\uae30\uc5d0 \ube44\ub840 (rem)"],"Relative to parent font size (em)":["\uc0c1\uc704 \uae00\uaf34 \ud06c\uae30\uc5d0 \ube44\ub840 (em)"],"Pixels (px)":["\ud53d\uc140 (px)"],"Percentage (%)":["\ubc31\ubd84\uc728 (%)"],"Button width":["\ubc84\ud2bc \ub113\uc774"],"Remove blocks":["\ube14\ub85d \uc81c\uac70\ud558\uae30"],"Button inside":[],"Button outside":[],"No button":[],Radial:["\ubc29\uc0ac\ud615"],Linear:["\uc120\ud615"],"Add link to featured image":["\ud2b9\uc131 \uc774\ubbf8\uc9c0\uc5d0 \ub9c1\ud06c \ucd94\uac00\ud558\uae30"],"Find out more":["\ub354 \uc54c\uc544\ubcf4\uae30"],"Insert column after":["\ub4a4\uc5d0 \uceec\ub7fc \uc0bd\uc785\ud558\uae30"],"Insert column before":["\uc55e\uc5d0 \uceec\ub7fc \uc0bd\uc785\ud558\uae30"],"Insert row after":["\ub4a4\uc5d0 \ud589 \uc0bd\uc785\ud558\uae30"],"Insert row before":["\uc55e\uc5d0 \ud589 \uc0bd\uc785\ud558\uae30"],"Contact us":["\ubb38\uc758\ud558\uae30"],Base:["\uae30\ubcf8"],"Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.":["\ud0ed \ud0a4 \ub610\ub294 \ud654\uc0b4\ud45c \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc0c8 \uc704\uce58\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4. \uc67c\ucabd\uacfc \uc624\ub978\ucabd \ud654\uc0b4\ud45c \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc911\ucca9 \uc218\uc900 \uc0ac\uc774\uc5d0\uc11c \uc774\ub3d9\ud569\ub2c8\ub2e4. \uc704\uce58\ub97c \uc120\ud0dd\ud588\uc73c\uba74 \uc5d4\ud130 \ub610\ub294 \uc2a4\ud328\uc774\uc2a4 \ud0a4\ub97c \ub20c\ub7ec \ube14\ub85d\uc744 \uc774\ub3d9\ud569\ub2c8\ub2e4."],Mixed:["\ud63c\ud569"],Right:["\uc624\ub978\ucabd"],Left:["\uc67c\ucabd"],Bottom:["\ud558\ub2e8"],Top:["\uc0c1\ub2e8"],"You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.":["\ud604\uc7ac \ud0d0\uc0c9 \ubaa8\ub4dc\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud0ed \ud0a4\uc640 \ud654\uc0b4\ud45c \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ube14\ub85d\uc744 \ud0d0\uc0c9\ud569\ub2c8\ub2e4. \uc67c\ucabd\uacfc \uc624\ub978\ucabd \ud654\uc0b4\ud45c \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc911\ucca9 \uc218\uc900 \uc0ac\uc774\ub97c \uc774\ub3d9\ud569\ub2c8\ub2e4. \ud0d0\uc0c9 \ubaa8\ub4dc\ub97c \uc885\ub8cc\ud558\uace0 \uc120\ud0dd\ud55c \ube14\ub85d\uc744 \ud3b8\uc9d1\ud558\ub824\uba74 \uc5d4\ud130 \ud0a4\ub97c \ub204\ub974\uc138\uc694."],Orientation:[],Design:["\ub514\uc790\uc778"],Text:["\ubb38\uc790"],"Widget areas":["\uc704\uc82f \uc601\uc5ed"],"Number of tags":[],White:["\ud770\uc0c9"],Black:["\uac80\uc815"],"Browser default":["\ube0c\ub77c\uc6b0\uc800 \uae30\ubcf8 \uc124\uc815"],"%1$s Block. Row %2$d":["%1$s \ube14\ub85d\uc785\ub2c8\ub2e4. \ud589 %2$d"],Typography:["\uc11c\uccb4"],Content:["\ucf58\ud150\uce20"],"Menu Location":["\uba54\ub274 \uc704\uce58"],Menu:["\uba54\ub274"],"25 / 50 / 25":["25 / 50 / 25"],"33 / 33 / 33":["33 / 33 / 33"],"50 / 50":["50 / 50"],User:["\uc0ac\uc6a9\uc790"],"Post Type":["\uae00 \uc720\ud615"],Site:["\uc0ac\uc774\ud2b8"],"Media file":["\ubbf8\ub514\uc5b4 \ud30c\uc77c"],"Change heading level":["\ud5e4\ub529 \uc218\uc900 \ubc14\uafb8\uae30"],survey:["\uc124\ubb38\uc870\uc0ac"],social:["\uc18c\uc15c"],"Global Styles":["\uc804\uccb4 \uc2a4\ud0c0\uc77c"],"Social Icon":["\uc18c\uc15c \uc544\uc774\ucf58"],"block keyword\x04links":[],"Display featured image":["\ud2b9\uc131 \uc774\ubbf8\uc9c0 \ubcf4\uc774\uae30"],"Featured image settings":["\ud2b9\uc131 \uc774\ubbf8\uc9c0 \uc124\uc815"],"Embed a TikTok video.":["\ud2f1\ud1a1 \ube44\ub514\uc624\ub97c \uc784\ubca0\ub4dc\ud569\ub2c8\ub2e4."],Solid:["\ub2e8\uc77c"],Angle:["\uac01\ub3c4"],"%s Block":["%s \ube14\ub85d"],"%1$s Block. %2$s":["%1$s \ube14\ub85d\uc785\ub2c8\ub2e4. %2$s"],"%1$s Block. Column %2$d":["%1$s \ube14\ub85d\uc785\ub2c8\ub2e4. %2$d\uceec\ub7fc\uc785\ub2c8\ub2e4"],"%1$s Block. Column %2$d. %3$s":["%1$s \ube14\ub85d\uc785\ub2c8\ub2e4. %2$d\uceec\ub7fc\uc785\ub2c8\ub2e4. %3$s"],"%1$s Block. Row %2$d. %3$s":["%1$s \ube14\ub85d\uc785\ub2c8\ub2e4. %2$d\ud589\uc785\ub2c8\ub2e4. %3$s"],Theme:["\ud14c\ub9c8"],"Footer label":["\ud478\ud130 \ub798\uc774\ube14"],"Header label":["\ud5e4\ub354 \ub798\uc774\ube14"],"Level %1$s. %2$s":["\uc218\uc900 %1$s\uc785\ub2c8\ub2e4. %2$s"],"Level %s. Empty.":["\uc218\uc900 %s\uc785\ub2c8\ub2e4. \ube44\uc5c8\uc2b5\ub2c8\ub2e4."],Empty:["\ube44\uc5c8\uc2b5\ub2c8\ub2e4"],"Link label":["\ub9c1\ud06c \ub798\uc774\ube14"],"Matt Mullenweg":["\uba54\ud2b8 \ubb90\ub80c\ubca0\uadf8"],"EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;":["\uc678\uc804, \uc81c\ub098\ub450 - \ud76c\ubbf8\ud55c \uc0c8\ubcbd - 1940 (\ubbf8\ub2c8\uc5b4\ucc98)\n\uba40\ub9ac\uc11c \uc544\uc8fc \uc791\uc740 \ucc3d\ubb38\uc774 \ubc1d\uac8c \ube5b\ub0a9\ub2c8\ub2e4.\n\uc774 \uc8fc\ubcc0\uc740 \uac70\uc758 \uc644\uc804\ud788 \uac80\uc740 \ud654\uba74\uc785\ub2c8\ub2e4. \uc774\uc81c \uce74\uba54\ub77c\uac00 \ud504\ub808\uc784\uc5d0\uc788\ub294 \uc6b0\ud45c\uc5d0 \uac00\uae4c\uc6b4 \ucc3d\ucabd\uc73c\ub85c \ucc9c\ucc9c\ud788 \uc774\ub3d9\ud558\uba74 \ub2e4\ub978 \ud615\ud0dc\uac00 \ub098\ud0c0\ub0a9\ub2c8\ub2e4;"],"Suspendisse commodo neque lacus, a dictum orci interdum et.":["Suspendisse commodo neque lacus, a dictum orci interdum et."],"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.":["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis."],Background:[],"Image size":["\uc774\ubbf8\uc9c0 \ud06c\uae30"],Replace:["\uad50\uccb4\ud558\uae30"],"You are currently in edit mode. To return to the navigation mode, press Escape.":["\ud604\uc7ac \ud3b8\uc9d1 \ubaa8\ub4dc\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud0d0\uc0c9 \ubaa8\ub4dc\ub85c \ub3cc\uc544\uac00\ub824\uba74, Esc\ub97c \ub204\ub974\uc138\uc694."],"You are probably offline.":["\uc624\ud504\ub77c\uc778 \uc0c1\ud0dc\uc778 \uac83 \uac19\uc2b5\ub2c8\ub2e4."],"Justify items right":["\ud56d\ubaa9 \uc624\ub978\ucabd \ub9de\ucd94\uae30"],"Justify items center":["\ud56d\ubaa9 \uac00\uc6b4\ub370 \ub9de\ucd94\uae30"],"Justify items left":["\ud56d\ubaa9 \uc67c\ucabd \ub9de\ucd94\uae30"],"Change items justification":["\ud56d\ubaa9 \uc591\ucabd \ub9de\ucda4\uc73c\ub85c \ubc14\uafb8\uae30"],"// A \u201cblock\u201d is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );":[],"Add link":[],podcast:["\ud31f\uce90\uc2a4\ud2b8"],"WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river.":["\uc704\ub300\ud55c \uc2e0 \ud310, \uadf8\ub294 \ubb34\uc5c7\uc744\ud558\uace0 \uc788\uc5c8\ub294\uac00, \n\uac15\uac00\uc758 \uac08\ub300 \uc544\ub798\uc5d0 \uc788\uc5c8\ub098?\n\ud30c\uba78 \ud655\uc0b0\uacfc \uc0b0\ub780\uc744 \uae08\uc9c0\ud558\uc600\uace0,\n\uc5fc\uc18c \ubc1c\uad7d\uc73c\ub85c \ubb3c\uc744 \ud280\uae30\uace0 \ub178\ub97c \uc800\uc5c8\uace0,\n\uadf8\ub9ac\uace0 \uac15 \uc704\uc5d0 \uc7a0\uc790\ub9ac\uc640 \ud568\uaed8\n \ub5a0 \ub2e4\ub2c8\ub294 \ud669\uae08 \ubc31\ud569\uc744 \ubd80\uc218\uc5c8\ub2e4."],"Menu Item":["\uba54\ub274 \ud56d\ubaa9"],"Generic label for block inserter button\x04Add block":["\ube14\ub85d \ucd94\uac00\ud558\uae30"],"Site Title":["\uc0ac\uc774\ud2b8 \uc81c\ubaa9"],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["\ubbf8\ub514\uc5b4 \uc5c5\ub85c\ub4dc\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \uc0ac\uc9c4\uc774\ub098 \ud070 \uc774\ubbf8\uc9c0\ub77c\uba74, \uc774\ubbf8\uc9c0\uc758 \ubc30\uc728\uc744 \uc870\uc815\ud558\uac70\ub098 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uae30 \ubc14\ub78d\ub2c8\ub2e4."],Midnight:["\ud55c\ubc24\uc911"],"Electric grass":["\uc804\uae30 \uc794\ub514"],"Pale ocean":["\uc605\uc740 \ubc14\ub2e4\uc0c9"],"Luminous dusk":["\ube5b\ub098\ub294 \ud669\ud63c\uc0c9"],"Blush bordeaux":["\ubd89\uc73c\uc2a4\ub984\ud55c \ubcf4\ub974\ub3c4"],"Blush light purple":["\ubd89\uc73c\uc2a4\ub984\ud55c \ubc1d\uc740 \ubcf4\ub77c\uc0c9"],"Cool to warm spectrum":["\ucc28\uac00\uc6c0\uc5d0\uc11c \ub530\ub73b\ud568\uc73c\ub85c \uc2a4\ud329\ud2b8\ub7fc"],"Very light gray to cyan bluish gray":["\ub9e4\uc6b0 \ubc1d\uc740 \ud68c\uc0c9\uc5d0\uc11c \uccad\ub85d \ud478\ub974\uc2a4\ub984\ud55c \ud68c\uc0c9\uc73c\ub85c"],"Luminous vivid orange to vivid red":["\uc57c\uad11\uc758 \uc120\uba85\ud55c \uc8fc\ud669\uc0c9\uc5d0\uc11c \uc120\uba85\ud55c \ube68\uac04\uc0c9\uc73c\ub85c"],"Luminous vivid amber to luminous vivid orange":["\ube5b\ub098\uace0 \uc120\uba85\ud55c \ud638\ubc15\uc0c9\uc5d0\uc11c \ube5b\ub098\uace0 \uc120\uba85\ud55c \uc8fc\ud669\uc0c9\uc73c\ub85c"],"Light green cyan to vivid green cyan":["\ubc1d\uc740 \ub179\uccad\ub85d\uc5d0\uc11c \uc120\uba85\ud55c \ub179\uccad\ub85d\uc0c9\uc73c\ub85c"],"Vivid cyan blue to vivid purple":["\uc120\uba85\ud55c \uccad\ub85d \ud30c\ub780\uc0c9\uc5d0\uc11c \uc120\uba85\ud55c \ubcf4\ub77c\uc0c9\uc73c\ub85c"],"December 6, 2018":["2018\ub144 12\uc6d4 6\uc77c"],"February 21, 2019":["2019\ub144 2\uc6d4 21\uc77c"],"May 7, 2019":["2019\ub144 5\uc6d4 7\uc77c"],"Release Date":["\ucd9c\uc2dc\uc77c"],"Jazz Musician":["\uc7ac\uc988 \ubba4\uc9c0\uc158"],Version:["\ubc84\uc804"],"Six.":["\uc5ec\uc12f\uc785\ub2c8\ub2e4."],"Five.":["\ub2e4\uc12f\uc785\ub2c8\ub2e4."],"Four.":["\ub137\uc785\ub2c8\ub2e4."],"Three.":["3"],"Two.":["\ub458\uc785\ub2c8\ub2e4."],"One.":["\ud558\ub098\uc785\ub2c8\ub2e4."],"One of the hardest things to do in technology is disrupt yourself.":["\uae30\uc220\uc5d0\uc11c \uac00\uc7a5 \uc5b4\ub824\uc6b4 \uac83\ub4e4 \uc911 \ud558\ub098\ub294 \uc790\uc2e0\uc758 \ubc29\ud574\uc785\ub2c8\ub2e4."],"\u2014 Kobayashi Issa (\u4e00\u8336)":["\u2014 \uace0\ubc14\uc57c\uc2dc \uc774\uc0ac (\u4e00\u8336)"],"The wren
Earns his living
Noiselessly.":["\uad74\ub69d\uc0c8\uac00
\uc0b6\uc744 \uc601\uc704\ud558\ub294 \uac83\uc740
\ubb34\uc18c\uc74c\uc785\ub2c8\ub2e4."],"Welcome to the wonderful world of blocks\u2026":["\uc548\ub155\ud558\uc138\uc694, \ube14\ub85d\uc758 \uc138\uacc4\uc5d0 \uc628 \uac83\uc744 \ud658\uc601\ud569\ub2c8\ub2e4\u2026"],Dimensions:["\ud06c\uae30"],"Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim.":["Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim."],"Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit.":["Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit."],"Call to Action":["\uc561\uc158 \ud638\ucd9c"],"In quoting others, we cite ourselves.":["\ub2e4\ub978 \uc0ac\ub78c\uc758 \ub9d0\uc744 \uc778\uc6a9\ud560 \ub54c, \uc6b0\ub9ac\ub294 \uc6b0\ub9ac \uc790\uc2e0\uc744 \uc778\uc6a9\ud55c\ub2e4."],"Mont Blanc appears\u2014still, snowy, and serene.":["\ubabd\ube14\ub791 \uc0b0\uc774 \ubcf4\uc785\ub2c8\ub2e4. \uace0\uc694\ud558\uace0, \ud3c9\ud654\ub85c\uc6b4, \ub208\uc73c\ub85c \ub4a4\ub36e\ud78c \uc0b0."],"In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.":["\ub77c \ub9cc\ucc60\ub77c\ub294 \ub3d9\ub124\uc5d0, \uc774\ub984\uc744 \ubd80\ub974\uace0 \uc2f6\uc740 \ub9c8\uc74c\ub9c8\uc800 \uc5c6\ub294 \uc774\ub984\uc774\uc9c0\ub9cc, \ucc3d \uc218\ub0a9\ud568\uc5d0 \ucc3d, \ub0a1\uc740 \ub465\uadfc\ubc29\ud328, \uc9c0\ubc29\uc774 \uc5c6\ub294 \uc9d0\ub9d0, \ucd94\uc801\uc6a9 \uac1c\ub97c \ubcf4\uc720\ud558\uace0 \uc788\ub294 \ud55c \uc2e0\uc0ac\uac00 \uc0b4\uace0 \uc788\uc5c8\ub2e4."],Add:["\ucd94\uac00\ud558\uae30"],"Attachment page":["\ucca8\ubd80 \ud328\uc774\uc9c0"],"Border radius":["\ub465\uadfc \ud14c\ub450\ub9ac"],"Reverse list numbering":["\ub4a4\uc9d1\ud78c \ubaa9\ub85d \uc22b\uc790 \ub9e4\uae30\uae30"],"Start value":["\uc2dc\uc791 \uac12"],"Ordered list settings":["\uc21c\uc11c \uc788\ub294 \ubaa9\ub85d \uc124\uc815"],"Clear Media":["\ubbf8\ub514\uc5b4 \uc9c0\uc6b0\uae30"],"Change column alignment":["\uceec\ub7fc \uc815\ub82c \ubc29\uc2dd \ubc14\uafb8\uae30"],"Align column right":["\uceec\ub7fc \uc624\ub978\ucabd \uc815\ub82c\ud558\uae30"],"Align column center":["\uceec\ub7fc \uc911\uc559 \uc815\ub82c\ud558\uae30"],"Align column left":["\uceec\ub7fc \uc67c\ucabd \uc815\ub82c\ud558\uae30"],Color:["\uc0c9\uc0c1"],"Vivid purple":["\uac15\ub82c\ud55c \ubcf4\ub77c\uc0c9"],Custom:["\uc0ac\uc6a9\uc790 \uc815\uc758"],"Learn more about anchors":["\uc575\ucee4\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694"],"Enter a word or two \u2014 without spaces \u2014 to make a unique web address just for this block, called an \u201canchor.\u201d Then, you\u2019ll be able to link directly to this section of your page.":[],"Open in new tab":["\uc0c8 \ud0ed\uc5d0\uc11c \uc5f4\uae30"],"Learn more about embeds":["\uc784\ubca0\ub4dc\uc5d0 \ub300\ud574\uc11c \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30"],"https://wordpress.org/support/article/embeds/":["https://wordpress.org/support/article/embeds/"],"Three columns; wide center column":["3\uceec\ub7fc, \ub113\uc740 \uc911\uc559 \uceec\ub7fc"],"Three columns; equal split":["3\uceec\ub7fc; \uac19\uc740 \uac04\uaca9"],"Two columns; two-thirds, one-third split":["2\uceec\ub7fc; 2/3 - 1/3 \uac04\uaca9"],"Two columns; one-third, two-thirds split":["2\uceec\ub7fc; 1/3 - 2/3 \uac04\uaca9"],"Two columns; equal split":["2\uceec\ub7fc; \uac19\uc740 \uac04\uaca9"],"Create Table":["\ud45c \ub9cc\ub4e4\uae30"],"Insert a table for sharing data.":["\ub300\uc774\ud130 \uacf5\uc720\uc6a9 \ud0dc\uc774\ube14\uc744 \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Block rendered as empty.":["\ube14\ub85d\uc744 \ube48 \uac83\uc73c\ub85c \ub80c\ub354\ud588\uc2b5\ub2c8\ub2e4."],"Footer section":["\ud478\ud130 \uc601\uc5ed"],"Header section":["\ud5e4\ub354 \uc601\uc5ed"],"Sorting and filtering":["\uc815\ub82c\uacfc \ud544\ud130"],"Post meta settings":["\uae00 \uba54\ud0c0 \uc124\uc815"],"Post content settings":["\uae00 \ucf58\ud150\uce20 \uc124\uc815"],"Column settings":["\uceec\ub7fc \uc124\uc815"],"This color combination may be hard for people to read.":["\uc774 \uc0c9\uc0c1 \uc870\ud569\uc744 \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uac00\ub3c5\uc131\uc774 \ub5a8\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4."],Group:["\uadf8\ub8f9"],"Crop image to fill entire column":["\uc804\uccb4 \uceec\ub7fc\uc5d0 \ub9de\uac8c \uc774\ubbf8\uc9c0 \uc790\ub974\uae30"],"Play inline":["\uc778\ub77c\uc778 \uc7ac\uc0dd\ud558\uae30"],"Add a block":["\ube14\ub85d \ucd94\uac00\ud558\uae30"],"Block vertical alignment setting label\x04Change vertical alignment":["\uc218\uc9c1 \uc815\ub82c \ubc14\uafb8\uae30"],Taxonomy:["\ud14d\uc18c\ub178\ubbf8"],"- Select -":["- \uc120\ud0dd -"],Default:["\uae30\ubcf8"],Search:["\uac80\uc0c9\ud558\uae30"],"Optional placeholder\u2026":["\uc120\ud0dd\uc801 \uc790\ub8cc\ud45c\uc2dc\uc790\u2026"],"Add label\u2026":["\ub798\uc774\ube14 \ucd94\uac00\ud558\uae30\u2026"],Calendar:["\ub2ec\ub825"],"block style\x04Default":["\uae30\ubcf8"],Back:["\ub4a4\ub85c"],"Max number of words in excerpt":["\uc694\uc57d\uc5d0 \ub4e4\uc5b4\uac08 \ucd5c\ub300 \ub2e8\uc5b4\uc218"],"Display excerpt":["\uc694\uc57d \ubcf4\uc774\uae30"],"Display date":["\ub0a0\uc9dc \ubcf4\uc774\uae30"],"Display author":["\uae00\uc4f4\uc774 \ubcf4\uc774\uae30"],"Edit RSS URL":["RSS URL \ud3b8\uc9d1\ud558\uae30"],"Embed Amazon Kindle content.":["\uc544\ub9c8\uc874 \ud0a8\ub4e4 \ucf58\ud150\uce20\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4."],ebook:["\uc804\uc790\ucc45"],"Embed Crowdsignal (formerly Polldaddy) content.":["Crowdsignal(\uc774\uc804 \ud3f4\ub300\ub514) \ucf58\ud150\uce20\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4."],"Warning: the link has been inserted but may have errors. Please test it.":["\uc8fc\uc758: \ub9c1\ud06c\ub97c \ucd94\uac00\ud588\uc9c0\ub9cc \uc624\ub958\uac00 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc2dc\ud5d8\ud558\uae30 \ubc14\ub78d\ub2c8\ub2e4."],"%s block selected.":["%s\uac1c\uc758 \ube14\ub85d\uc744 \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4."],Thumbnail:["\uc378\ub124\uc77c"],"Full Size":["\uc804\uccb4 \ud06c\uae30"],"Align text right":["\ubb38\uc790 \uc6b0\uce21 \uc815\ub82c\ud558\uae30"],"Align text center":["\ubb38\uc790 \uac00\uc6b4\ub370 \uc815\ub82c\ud558\uae30"],"Align text left":["\ubb38\uc790 \uc88c\uce21 \uc815\ub82c\ud558\uae30"],"Drag images, upload new ones or select files from your library.":["\uc774\ubbf8\uc9c0\ub97c \ub04c\uc5b4, \uc0c8 \uac83\uc744 \uc5c5\ub85c\ub4dc\ud558\uac70\ub098 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \ud30c\uc77c\uc744 \uc120\ud0dd\ud558\uc138\uc694."],"font size name\x04Huge":["\ub9e4\uc6b0 \ud07c"],"font size name\x04Large":["\ud07c"],"font size name\x04Medium":["\uc911\uac04"],"font size name\x04Small":["\uc791\uc74c"],"font size name\x04Normal":["\ubcf4\ud1b5"],"button label\x04Download":["\ub2e4\uc6b4\ub85c\ub4dc\ud558\uae30"],"block title\x04Embed":["\uc784\ubca0\ub4dc"],"block title\x04Classic":["\uace0\uc804"],"Link edited.":["\ub9c1\ud06c\ub97c \uc218\uc815\ud588\uc2b5\ub2c8\ub2e4."],"Link removed.":["\ub9c1\ud06c\ub97c \uc81c\uac70\ud588\uc2b5\ub2c8\ub2e4."],Media:["\ubbf8\ub514\uc5b4"],"block description\x04Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\xe1zar":[],"block description\x04Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":[],"Resize for smaller devices":["\uc18c\ud615 \uc7a5\uce58\uc6a9\uc73c\ub85c \ud06c\uae30 \uc870\uc815\ud558\uae30"],"This embed may not preserve its aspect ratio when the browser is resized.":["\uc774 \uc0bd\uc785 \ub0b4\uc6a9\uc740 \ube0c\ub77c\uc6b0\uc800 \ud06c\uae30\ub97c \uc870\uc815\ud560 \ub54c \ud654\uba74 \ube44\uc728\uc744 \uc720\uc9c0\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."],"This embed will preserve its aspect ratio when the browser is resized.":["\uc774 \uc0bd\uc785 \ub0b4\uc6a9\uc740 \ube0c\ub77c\uc6b0\uc800 \ud06c\uae30\ub97c \uc870\uc815\ud560 \ub54c \ud654\uba74 \ube44\uc728\uc744 \uc720\uc9c0\ud569\ub2c8\ub2e4."],"Embed an Animoto video.":["\uc544\ub2c8\ubaa8\ud1a0 \ube44\ub514\uc624\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a Vimeo video.":["\ube44\uba54\uc624 \ube44\ub514\uc624\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Flickr content.":["\ud50c\ub9ac\ucee4 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Spotify content.":["\uc2a4\ud30c\ud2f0\ud30c\uc774 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed SoundCloud content.":["\uc0ac\uc6b4\ub4dc\ud074\ub77c\uc6b0\ub4dc \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a WordPress post.":["\uc6cc\ub4dc\ud504\ub808\uc2a4 \uae00\uc744 \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a WordPress.tv video.":["\uc6cc\ub4dc\ud504\ub808\uc2a4.tv \ube44\ub514\uc624\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a VideoPress video.":["\ube44\ub514\uc624\ud504\ub808\uc2a4 \ube44\ub514\uc624\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a Tumblr post.":["\ud140\ube14\ub7ec \uae00\uc744 \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a TED video.":["\ud14c\ub4dc \ube44\ub514\uc624\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Speaker Deck content.":["\uc2a4\ud53c\ucee4 \ub371 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a YouTube video.":["\uc720\ud29c\ube0c \ube44\ub514\uc624\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed SmugMug content.":["\uc2a4\uba38\uadf8\uba38\uadf8 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Slideshare content.":["\uc2ac\ub77c\uc774\ub4dc\uc250\uc5b4 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Scribd content.":["\uc2a4\ud06c\ub9ac\ube0c\ub4dc \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Screencast content.":["\uc2a4\ud06c\ub9b0\uce90\uc2a4\ud2b8 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed ReverbNation content.":["\ub9ac\ubc84\ube0c\ub0b4\uc774\uc158 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a Reddit thread.":["\ub808\ub527 \uc2a4\ub808\ub4dc\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Mixcloud content.":["\ubbf9\uc2a4\ud074\ub77c\uc6b0\ub4dc \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a tweet.":["\ud2b8\uc717\uc744 \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Kickstarter content.":["\ud0a5\uc2a4\ud0c0\ud130 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Issuu content.":["\uc774\uc218 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Imgur content.":["\uc784\uad6c\ub974 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed a Dailymotion video.":["\ub300\uc77c\ub9ac\ubaa8\uc158 \ube44\ub514\uc624\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed CollegeHumor content.":["\uceec\ub9ac\uc9c0\ud734\uba38 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Embed Cloudup content.":["\ud074\ub77c\uc6b0\ub4dc\uc5c5 \ucf58\ud150\uce20\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4."],"Insert from URL":["URL\uc5d0\uc11c \uc0bd\uc785\ud558\uae30"],Year:["\uc5f0\ub3c4"],Day:["\uc77c"],Month:["\ub2ec"],"Media area":["\ubbf8\ub514\uc5b4 \uc601\uc5ed"],"Show media on right":["\uc624\ub978\ucabd\uc5d0 \ubbf8\ub514\uc5b4 \ubcf4\uc5ec\uc8fc\uae30"],"Show media on left":["\uc67c\ucabd\uc5d0 \ubbf8\ub514\uc5b4 \ubcf4\uc5ec\uc8fc\uae30"],Cover:["\ud45c\uc9c0"],HTML:["HTML"],"Write HTML\u2026":["HTML \uc791\uc131\u2026"],"Media settings":["\ubbf8\ub514\uc5b4 \uc124\uc815"],Overlay:["\uc624\ubc84\ub798\uc774"],Backtick:["\ubc31\ud2f1"],Period:["\ub9c8\uce68\ud45c"],Comma:["\uc27c\ud45c"],"Change alignment":["\uc815\ub82c \ubcc0\uacbd\ud558\uae30"],"Change text alignment":["\ubcf8\ubb38 \uc815\ub82c \ubcc0\uacbd\ud558\uae30"],"Row count":["\ud589 \uc218"],"Column count":["\uceec\ub7fc \uc218"],"block description\x04Create and save content to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":[],"Code is Poetry":["\ucf54\ub4dc\ub294 \uc2dc\ub2e4"],"Untitled Reusable block":[],Reusable:["\ub2e4\uc2dc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4"],"The response is not a valid JSON response.":["\uc751\ub2f5\uc774 \uc720\ud6a8\ud55c JSON \uc751\ub2f5\uc774 \uc544\ub2d9\ub2c8\ub2e4."],Muted:["\uc74c\uc18c\uac70"],"Display avatar":["\uc544\ubc14\ud0c0 \ubcf4\uc774\uae30"],"Number of comments":["\ub313\uae00 \uc218"],Auto:["\uc790\ub3d9"],Preload:["\ubbf8\ub9ac \uc62c\ub9bc"],"Cyan bluish gray":["\uccad\ub85d \ud478\ub974\uc2a4\ub984\ud55c \ud68c\uc0c9"],"Vivid cyan blue":["\uc120\uba85\ud55c \uccad\ub85d \ud30c\ub780\uc0c9"],"Pale cyan blue":["\uc605\uc740 \uccad\ub85d \ud30c\ub780\uc0c9"],"Vivid green cyan":["\uc120\uba85\ud55c \ucd08\ub85d \uccad\ub85d\uc0c9"],"Light green cyan":["\ubc1d\uc740 \ucd08\ub85d \uccad\ub85d\uc0c9"],"Luminous vivid amber":["\ube5b\ub098\uace0 \uc120\uba85\ud55c \ud638\ubc15\uc0c9"],"Luminous vivid orange":["\ube5b\ub098\uace0 \uc120\uba85\ud55c \uc8fc\ud669\uc0c9"],"Vivid red":["\uc120\uba85\ud55c \ube68\uac04\uc0c9"],"Pale pink":["\uc605\uc740 \ubd84\ud64d\uc0c9"],"Show download button":["\ub2e4\uc6b4\ub85c\ub4dc \ubc84\ud2bc \ubcf4\uc774\uae30"],"Link to":["\ub9c1\ud06c\ud558\uae30"],File:["\ud30c\uc77c"],Loop:["\uc5f0\uc18d\uc7ac\uc0dd"],Autoplay:["\uc790\ub3d9 \uc2e4\ud589"],"Playback controls":["\uc2e4\ud589 \uc81c\uc5b4"],"Replace image":["\uc774\ubbf8\uc9c0 \uad50\uccb4\ud558\uae30"],"View the autosave":["\uc790\ub3d9\uc800\uc7a5 \ubcf4\uae30"],"There is an autosave of this post that is more recent than the version below.":["\uc774 \uae00\uc740 \uc544\ub798 \ubc84\uc804\ubcf4\ub2e4 \ucd5c\uc2e0\uc758 \uc790\ub3d9\uc800\uc7a5 \ubc84\uc804\uc774 \uc788\uc2b5\ub2c8\ub2e4."],"Enter URL here\u2026":["\uc5ec\uae30\uc5d0 URL\uc744 \uc785\ub825\ud558\uc138\uc694\u2026"],"Pin to toolbar":["\ub3c4\uad6c \ubaa8\uc74c\uc5d0 \uace0\uc815\ud558\uae30"],"Unpin from toolbar":["\ub3c4\uad6c\ubaa8\uc74c\uc5d0\uc11c \uc81c\uac70\ud558\uae30"],"Fixed width table cells":["\uace0\uc815 \ud3ed \ud0dc\uc774\ube14 \uc140"],"block description\x04Add a block that displays content pulled from other sites, like Twitter or YouTube.":[],"Error loading block: %s":["\ube14\ub85d \ub85c\ub974\ud558\ub294 \uc911 \uc624\ub958: %s"],"Close plugin":["\ud50c\ub7ec\uadf8\uc778 \ub2eb\uae30"],"Link settings":["\ub9c1\ud06c \uc124\uc815"],"Page break":["\ud328\uc774\uc9c0 \ub098\ub204\uae30"],Height:["\ub192\uc774"],Width:["\ub113\uc774"],"Thumbnails are not cropped.":["\uc378\ub124\uc77c\uc744 \uc790\ub974\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4."],"Thumbnails are cropped to align.":["\uc815\ub82c\uc744 \uc704\ud574 \uc378\ub124\uc77c\uc744 \uc798\ub790\uc2b5\ub2c8\ub2e4."],"Code editor selected":["\ucf54\ub4dc \ud3b8\uc9d1\uae30\ub97c \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4"],"Visual editor selected":["\ube44\uc8fc\uc5bc \ud3b8\uc9d1\uae30\ub97c \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4"],Plugins:["\ud50c\ub7ec\uadf8\uc778"],"Trashing failed":["\ud734\uc9c0\ud1b5\uc5d0 \ubc84\ub9ac\uae30\ub97c \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4"],"Updating failed.":["\uc5c5\ub370\uc774\ud2b8\ub97c \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4."],"Scheduling failed.":["\uc608\uc57d\uc744 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4."],"Publishing failed.":["\uacf5\uac1c\ub97c \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4."],Embeds:["\uc784\ubca0\ub4dc"],Blocks:["\ube14\ub85d"],Undo:["\uc2e4\ud589 \ucde8\uc18c\ud558\uae30"],Redo:["\ub2e4\uc2dc \uc2e4\ud589\ud558\uae30"],"Convert to regular blocks":["\uc77c\ubc18 \ube14\ub85d\uc73c\ub85c \uc804\ud658\ud558\uae30"],"More options":["\ucd94\uac00 \uc635\uc158"],Remove:["\uc81c\uac70\ud558\uae30"],"Copied!":["\ubcf5\uc0ac\ud588\uc2b5\ub2c8\ub2e4!"],Settings:["\uc124\uc815"],Reset:["\ucd08\uae30\ud654\ud558\uae30"],"An unknown error occurred.":["\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4."],"No results.":["\uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4."],"%d result found, use up and down arrow keys to navigate.":["%d \uacb0\uacfc\ub97c \ucc3e\uc558\uc2b5\ub2c8\ub2e4. \uc704 \uc544\ub798\ub85c \uc774\ub3d9\ud558\ub824\uba74 \ud654\uc0b4\ud45c \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc138\uc694."],"(no title)":["(\uc81c\ubaa9\uc774 \uc5c6\uc2b5\ub2c8\ub2e4)"],URL:["URL"],Close:["\ub2eb\uae30"],"Edit link":["\ub9c1\ud06c \ud3b8\uc9d1\ud558\uae30"],Link:["\ub9c1\ud06c"],Strikethrough:["\ucde8\uc18c\uc120"],Italic:["\uc774\ud0e4\ub9ad"],Bold:["\uad75\uac8c"],"Remove link":["\ub9c1\ud06c \uc81c\uac70\ud558\uae30"],"Number of items":["\ud56d\ubaa9 \uc218"],All:["\ubaa8\ub450"],Category:["\uce74\ud14c\uace0\ub9ac"],"Z \u2192 A":["Z \u2192 A"],"A \u2192 Z":["A \u2192 Z"],"Oldest to newest":["\uc624\ub798\ub41c \uac83\uc5d0\uc11c \uc0c8\ub85c\uc6b4 \uac83"],"Newest to oldest":["\uc0c8\ub85c\uc6b4 \uac83\uc5d0\uc11c \uc624\ub798\ub41c \uac83"],"Order by":["\uc815\ub82c\uae30\uc900"],Video:["\ube44\ub514\uc624"],"New Column":["\uc0c8 \uceec\ub7fc"],"Delete column":["\uceec\ub7fc \uc9c0\uc6b0\uae30"],"Delete row":["\ud589 \uc9c0\uc6b0\uae30"],"Edit table":["\ud0dc\uc774\ube14 \ud3b8\uc9d1\ud558\uae30"],Table:["\ud0dc\uc774\ube14"],Shortcode:["\uc1fc\ud2b8\ucf54\ub4dc"],"Write preformatted text\u2026":["\uc0ac\uc804 \ud615\uc2dd\ud654\ud55c \ubb38\uc790 \uc4f0\uae30\u2026"],"Read more":["\ub354 \ubcf4\uae30"],"Indent list item":["\ubaa9\ub85d \ud56d\ubaa9 \ub4e4\uc5ec\uc4f0\uae30"],"Outdent list item":["\ubaa9\ub85d \ud56d\ubaa9 \ub0b4\uc5b4\uc4f0\uae30"],"Convert to ordered list":["\uc21c\uc11c\uc788\ub294 \ubaa9\ub85d\uc73c\ub85c \uc804\ud658\ud558\uae30"],"Convert to unordered list":["\uc21c\uc11c\uc5c6\ub294 \ubaa9\ub85d\uc73c\ub85c \uc804\ud658\ud558\uae30"],List:["\ubaa9\ub85d"],"Display post date":["\ubc1c\ud589\uc77c \ubcf4\uc774\uae30"],"Grid view":["\uaca9\uc790 \ubcf4\uae30"],"List view":["\ubaa9\ub85d \ubcf4\uae30"],Size:["\ud06c\uae30"],Image:["\uc774\ubbf8\uc9c0"],Preview:["\ubbf8\ub9ac\ubcf4\uae30"],Heading:["\ud5e4\ub529\uc694\uc18c"],"Heading %d":["\ud5e4\ub529 %d"],"Heading settings":["\ud5e4\ub529 \uc124\uc815"],None:["\uc5c6\uc2b5\ub2c8\ub2e4"],"Media File":["\ubbf8\ub514\uc5b4 \ud30c\uc77c"],"Attachment Page":["\ud328\uc774\uc9c0 \ucca8\ubd80\ud558\uae30"],"Crop images":["\uc774\ubbf8\uc9c0 \uc790\ub974\uae30"],Gallery:["\uac24\ub7ec\ub9ac"],audio:["\uc624\ub514\uc624"],music:["\uc74c\uc545"],image:["\uc774\ubbf8\uc9c0"],blog:["\ube14\ub85c\uadf8"],post:["\uae00"],"Embedded content from %s":["%s(\uc73c)\ub85c\ubd80\ud130 \uc784\ubca0\ub4dc\ud55c \ucf58\ud150\uce20"],"Write title\u2026":["\uc81c\ubaa9 \uc4f0\uae30\u2026"],"Fixed background":["\uace0\uc815 \ubc30\uacbd"],"Edit image":["\uc774\ubbf8\uc9c0 \ud3b8\uc9d1\ud558\uae30"],"%1$s (%2$s)":["%1$s (%2$s)"],Code:["\ucf54\ub4dc"],"Write code\u2026":["\ucf54\ub4dc \uc4f0\uae30\u2026"],Categories:["\uce74\ud14c\uace0\ub9ac"],"Show hierarchy":["\uacc4\uce35 \ubcf4\uc774\uae30"],"Show post counts":["\uae00 \uc218 \ubcf4\uc774\uae30"],"Display as dropdown":["\ub4dc\ub78d\ub2e4\uc6b4\uc73c\ub85c \ubcf4\uc774\uae30"],"Add text\u2026":["\ubb38\uc790 \ucd94\uac00\ud558\uae30\u2026"],Apply:["\uc801\uc6a9\ud558\uae30"],"Text color":[],"Block has been deleted or is unavailable.":["\ube14\ub85d\uc744 \uc0ad\uc81c\ud588\uac70\ub098 \uac00\ub2a5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."],"Reusable blocks":["\ub2e4\uc2dc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ube14\ub85d"],Cancel:["\ucde8\uc18c\ud558\uae30"],Edit:["\ud3b8\uc9d1\ud558\uae30"],"Use URL":["URL \uc0ac\uc6a9\ud558\uae30"],Audio:["\uc624\ub514\uc624"],"HTML anchor":["HTML \uc575\ucee4"],"Full width":["\uc804\uccb4 \ud3ed"],"Wide width":["\ub113\uc740 \ud3ed"],Widgets:["\uc704\uc82f"],"Align right":["\uc6b0\uce21 \uc815\ub82c\ud558\uae30"],"Align center":["\uc911\uc559 \uc815\ub82c\ud558\uae30"],"Align left":["\uc67c\ucabd \uc815\ub82c\ud558\uae30"],"Add title":["\uc81c\ubaa9 \ucd94\uac00\ud558\uae30"],Comment:["\ub313\uae00"],Metadata:["\uba54\ud0c0\uc790\ub8cc"],"Select Category":["\uce74\ud14c\uace0\ub9ac \uc120\ud0dd\ud558\uae30"],"(Untitled)":["(\uc81c\ubaa9\uc774 \uc5c6\uc2b5\ub2c8\ub2e4)"]}},1337,[]); __d(function(e,t,i,n,o,r,l){o.exports={100:["100"],"Nested blocks will fill the width of this container. Toggle to constrain.":[],"You are currently in zoom-out mode.":[],"The Queen of Hearts.":[],"The Mad Hatter.":[],"The Cheshire Cat.":[],"The White Rabbit.":[],"Alice.":[],"Gather blocks in a container.":[],"Inner blocks use content width":[],Constrained:[],"Spacing Control":[],"Custom (%s)":[],"All sides":["Alle kanter"],"Show label":["Vis etikett"],"Embed a podcast player from Pocket Casts.":[],"66 / 33":["66 / 33"],"33 / 66":["33 / 66"],"Nested blocks use content width with options for full and wide widths.":[],"Copy block":["Kopier blokk"],"block title\x04Categories List":["Kategoriliste"],"Show empty categories":[],"block description\x04Gather blocks in a layout container.":["Samle blokker i en oppsettsbeholder."],"Link sides":["Koble sider"],"Unlink sides":["Frakoble sider"],"Quote citation":["Sitatkilde"],"Arrange blocks vertically.":[],Stack:["Stabel"],"Arrange blocks horizontally.":[],Week:["Uke"],"Group by:":["Grupper etter:"],"single horizontal line\x04Row":["Rad"],"Alignment option\x04None":["Ingen"],"Vertical alignment":["Vertikal justering"],"Align items bottom":["Juster elementer mot bunnen"],"Align items center":["Juster elementer mot midten"],"Align items top":["Juster elementer mot toppen"],Unwrap:["Pakk ut"],"block description\x04Create a list item.":["Opprett listeelement"],"block title\x04List item":["Listeelement"],"View Preview":["Se forh\xe5ndsvisning"],"Largest size":["St\xf8rste st\xf8rrelse"],"Smallest size":["Minste st\xf8rrelse"],"%s link":["%s-lenke"],"Preference activated - %s":[],"Preference deactivated - %s":[],"Draft saved.":["Kladd lagret."],"Set custom size":["Tilpasset st\xf8rrelse"],"Use size preset":[],"Indicates this palette is created by the user.\x04Custom":["Tilpasset"],"Indicates this palette comes from the theme.\x04Custom":["Tilpasset"],"Indicates this palette comes from WordPress.\x04Default":["Standard"],"Indicates this palette comes from the theme.\x04Theme":["Tema"],"%s applied.":["%s brukt."],"%s removed.":["%s fjernet."],"Embed Wolfram notebook content.":[],"Allow to wrap to multiple lines":["Tillat \xe5 deles p\xe5 flere linjer"],"block style label\x04Plain":["Flat"],"Embed Pinterest pins, boards, and profiles.":["Bygg inn oppslag, tavler og profiler fra Pinterest."],bookmark:["bokmerke"],"Show only top level categories":["Vis bare toppniv\xe5kategorier"],"https://wordpress.org/support/article/page-jumps/":["https://wordpress.org/support/article/page-jumps/"],Featured:["Fremhevet"],Highlight:["Uthev"],"You do not have permission to create Pages.":[],"Block spacing":["Blokkavstand"],"Max %s wide":["Maks. %s bred"],"block description\x04Display content in multiple columns, with blocks added to each column.":["Vis innhold i flere kolonner med blokker lagt til i hver kolonne."],"Minimum height":["Maksimal h\xf8yde"],"block description\x04Create structured content in rows and columns to display information.":["Opprett strukturert innhold i rader og kolonner for \xe5 vise informasjon."],"Preload value\x04None":["Ingen"],"noun; Audio block parameter\x04Preload":["Last inn p\xe5 forh\xe5nd"],"Media item link option\x04None":["Ingen"],Justification:["Justering"],"Loading options\u2026":["Laster innstillinger..."],"All gallery image sizes updated to: %s":["Alle galleribildenes st\xf8rrelse oppdatert til: %s"],"All gallery images updated to not open in new tab":["Alle galleribildene oppdatert til ikke \xe5 \xe5pnes i ny fane"],"All gallery images updated to open in new tab":["Alle galleribildene oppdatert til \xe5 \xe5pnes i ny fane"],"All gallery image links updated to: %s":["Alle galleribildelenkene oppdatert til: %s"],"If uploading to a gallery all files need to be image formats":["Om du laster opp til et galleri m\xe5 alle filene v\xe6re bildeformater."],Flow:["Flyt"],Flex:["Fleks"],"Name of the file\x04Armstrong_Small_Step":["Armstrong_Lite_skritt"],"No published posts found.":["Ingen publiserte innlegg funnet."],"Autoplay may cause usability issues for some users.":["Autoavspill kan skape problemer med brukervennlighet for enkelte."],Radius:["Radius"],"Link radii":[],"Unlink radii":[],"Bottom right":["Bunn h\xf8yre"],"Bottom left":["Bunn venstre"],"Top right":["Topp h\xf8yre"],"Top left":["Topp venstre"],"block keyword\x04link":["lenke"],"block keyword\x04movie":["film"],"block description\x04Embed a video from your media library or upload a new one.":["Bygg inn en video fra ditt mediabibliotek eller last opp en ny."],"block keyword\x04poem":["dikt"],"block keyword\x04poetry":["poesi"],"block description\x04Insert poetry. Use special spacing formats. Or quote song lyrics.":["Sett inn lyrikk. Bruk spesielle formater for mellomrom. Eller siter fra en sangtekst."],"block description\x04This block is deprecated. Please use the Columns block instead.":["Denne blokken er foreldet. Vennligst bruk blokken Kolonner i stedet."],"block description\x04A cloud of your most used tags.":["En sky med dine mest brukte stikkord."],"block style label\x04Stripes":["Striper"],"block description\x04Add white space between blocks and customize its height.":["Legg til mellomrom mellom blokker og tilpass dens h\xf8yde."],"block style label\x04Pill Shape":["Pilleform"],"block style label\x04Logos Only":["Kun logoer"],"block description\x04Display icons linking to your social media profiles or sites.":["Vis ikoner som lenker til dine sosiale mediaprofiler eller nettsteder."],"block description\x04Display an icon linking to a social media profile or site.":["Vis et ikon som lenker til en profil i sosiale medier eller et nettsted."],"block description\x04Insert additional custom elements with a WordPress shortcode.":["Sett inn flere tilpassede elementer med en WordPress-kortkode."],"block style label\x04Dots":["Prikker"],"block style label\x04Wide Line":["Bred linje"],"block keyword\x04divider":["skille"],"block keyword\x04hr":["hr"],"block keyword\x04horizontal-line":["horisontal linje"],"block description\x04Create a break between ideas or sections with a horizontal separator.":["Lag et opphold mellom ideer eller seksjoner med et horisontalt skille."],"block keyword\x04find":["finn"],"block description\x04Help visitors find your content.":["Hjelp bes\xf8kende finne ditt innhold."],"block keyword\x04feed":["str\xf8m"],"block keyword\x04atom":["atom"],"block description\x04Display entries from any RSS or Atom feed.":["Vis oppf\xf8ringer fra enhver RSS- eller Atom-str\xf8m."],"block keyword\x04cite":["sitering"],"block keyword\x04blockquote":["blokksitat"],"block description\x04Give special visual emphasis to a quote from your text.":["Legg p\xe5 spesiell visuell vektlegging til et sitat i teksten din. "],"block description\x04Add text that respects your spacing and tabs, and also allows styling.":["Legg til tekst som respekterer dine avstander og tabuleringer, og dessuten tillater styling."],"block keyword\x04text":["tekst"],"block description\x04Start with the basic building block of all narrative.":["Start med grunnleggende byggeblokken for enhver fortelling."],"block keyword\x04pagination":["paginering"],"block keyword\x04next page":["neste side"],"block description\x04Separate your content into a multi-page experience.":["Del opp innholdet ditt til en flerside-opplevelse."],"block keyword\x04read more":["les mer"],"block description\x04Content before this block will be shown in the excerpt on your archives page.":["Innhold foran denne blokken vil bli vist som utdrag p\xe5 dine arkivsider."],"block description\x04Your site doesn\u2019t include support for this block.":["Ditt nettsted har ikke st\xf8tte for denne blokken."],"block keyword\x04video":["video"],"block keyword\x04image":["bilde"],"block description\x04Set media and words side-by-side for a richer layout.":["Plasser media og ord side om side for en rikere utforming."],"block keyword\x04numbered list":["nummerert liste"],"block keyword\x04ordered list":["sortert liste"],"block keyword\x04bullet list":["punktliste"],"block description\x04Create a bulleted or numbered list.":["Lag en punktliste eller en nummerert liste."],"block keyword\x04recent posts":["nylige innlegg"],"block description\x04Display a list of your most recent posts.":["Vis en liste med dine siste innlegg."],"block keyword\x04recent comments":["nylige kommentarer"],"block description\x04Display a list of your most recent comments.":["Vis en liste over dine siste kommentarer."],"block style label\x04Rounded":["Avrundet"],"block style label\x04Default":["Standard"],"block keyword\x04picture":["bilde"],"block keyword\x04photo":["foto"],"block keyword\x04img":["img"],"block description\x04Insert an image to make a visual statement.":["Sett inn et bilde for \xe5 skape et visuelt uttrykk."],"block keyword\x04embed":["innbygging"],"block description\x04Add custom HTML code and preview it as you edit.":["Leg til tilpasset HTML-kode og forh\xe5ndsvis mens du redigerer."],"block keyword\x04subtitle":["undertittel"],"block keyword\x04title":["tittel"],"block keyword\x04section":["seksjon"],"block keyword\x04row":["rad"],"block keyword\x04wrapper":["innpakning"],"block keyword\x04container":["beholder"],"block keyword\x04photos":["fotografier"],"block keyword\x04images":["bilder"],"block description\x04Display multiple images in a rich gallery.":["Vis flere bilder i et rikt galleri."],"block description\x04Use the classic WordPress editor.":["Bruk det klassiske redigeringsverkt\xf8yet i WordPress."],"block keyword\x04download":["nedlasting"],"block keyword\x04pdf":["pdf"],"block keyword\x04document":["dokument"],"block description\x04Add a link to a downloadable file.":["Legg til en lenke til en nedlastbar fil."],"block description\x04Add an image or video with a text overlay \u2014 great for headers.":["Legg til et bilde eller en video med tekst-overlegg \u2013 flott for overskrifter."],"block description\x04A single column within a columns block.":["En enkelt kolonne innenfor en kolonneblokk."],"block description\x04Display code snippets that respect your spacing and tabs.":["Vis kodesnutter som respekterer dine mellomrom og tabuleringer."],"block description\x04Display a list of all categories.":["Vis en liste over alle kategorier."],"block keyword\x04archive":["arkiv"],"block keyword\x04posts":["innlegg"],"block description\x04A calendar of your site\u2019s posts.":["En kalender med innlegg fra ditt nettsted."],"block description\x04Prompt visitors to take action with a group of button-style links.":["Oppfordre bes\xf8kende til \xe5 utf\xf8re noe ved hjelp av knappeliknende lenker."],"block style label\x04Outline":["Omriss"],"block style label\x04Fill":["Fyll"],"block description\x04Prompt visitors to take action with a button-style link.":["Be bes\xf8kende gj\xf8re en handling via en lenke med knappestil."],"block keyword\x04recording":["opptak"],"block keyword\x04podcast":["podkast"],"block keyword\x04sound":["lyd"],"block keyword\x04music":["musikk"],"block description\x04Embed a simple audio player.":["Bygg inn en enkel lydavspiller."],"block description\x04Display a date archive of your posts.":["Vis et m\xe5nedsvis arkiv over dine innlegg."],"Points (pt)":["Punkter (pt)"],"Picas (pc)":[],"Inches (in)":["Tommer (in)"],"Millimeters (mm)":["Millimeter (mm)"],"Centimeters (cm)":["Centimeter (cm)"],"x-height of the font (ex)":[],"Width of the zero (0) character (ch)":[],"Viewport largest dimension (vmax)":[],"Viewport smallest dimension (vmin)":[],"Percent (%)":["Prosent (%)"],Margin:["Avstand"],"Customize the width for all elements that are assigned to the center or wide columns.":[],Wide:["Bred"],"Widget types":["Widget-typer"],"Custom template created. You're in template mode now.":["Tilpasset mal opprettet. Du er i malmodus n\xe5."],"Embed of %s.":["Innbygging av %s"],"PDF embed":["PDF-innbygging"],"Add citation":["Legg til sitering"],"Add quote":["Legg til sitat"],"Add caption":["Legg til undertekst"],"Relative to root font size (rem)\x04rems":["rem"],"Relative to parent font size (em)\x04ems":["em"],Border:["Kantlinje"],"Your site does not have any posts, so there is nothing to display here at the moment.":["Ditt nettsted har ingen innlegg s\xe5 det er for \xf8yeblikket intet \xe5 vise her."],"Block cannot be rendered inside itself.":["Blokk kan ikke vises inne i seg selv."],Indent:["Innrykk"],Outdent:["Utrykk"],Ordered:["Sortert"],Unordered:["Usortert"],"Space between items":["Mellomrom mellom elementer"],"Add an anchor":["Legg til et anker"],Align:["Juster"],"block title\x04Social Icon":["Sosialt ikon"],"block title\x04Social Icons":["Sosiale ikoner"],"block title\x04Tag Cloud":["Stikkordsky"],"block title\x04Video":["Video"],"block title\x04Verse":["Vers"],"block title\x04Text Columns (deprecated)":["Tekst-kolonner (foreldet)"],"block title\x04Table":["Tabell"],"block title\x04Spacer":["Avstandsholder"],"block title\x04Shortcode":["Kortkode"],"block title\x04Separator":["Skille"],"block title\x04Group":["Gruppe"],"block title\x04Search":["S\xf8k"],"block title\x04RSS":["RSS"],"block title\x04Reusable block":["Gjenbrukbar blokk"],"block title\x04Pullquote":["Uttrekksitat"],"block title\x04Preformatted":["Forh\xe5ndsformatert"],"block title\x04Page Break":["Sideskille"],"block title\x04More":["Mer"],"block title\x04Unsupported":["Ikke st\xf8ttet"],"block title\x04List":["Liste"],"block title\x04Latest Posts":["Siste innlegg"],"block title\x04Latest Comments":["Siste kommentarer"],"block title\x04Media & Text":["Media og tekst"],"block title\x04Custom HTML":["Tilpasset HTML"],"block title\x04File":["Fil"],"block title\x04Cover":["Omslag"],"block title\x04Column":["Kolonne"],"block title\x04Columns":["Kolonner"],"block title\x04Code":["Kode"],"block title\x04Calendar":["Kalender"],"block title\x04Buttons":["Knapper"],"block title\x04Button":["Knapp"],"block title\x04Audio":["Lyd"],"block title\x04Archives":["Arkiver"],"block title\x04Gallery":["Galleri"],"block title\x04Quote":["Sitat"],"block title\x04Heading":["Overskrift"],"block title\x04Image":["Bilde"],"block title\x04Paragraph":["Avsnitt"],"text direction\x04ltr":["ltr"],"Block vertical alignment setting\x04Align bottom":["Juster bunn"],"Block vertical alignment setting\x04Align middle":["Juster midten"],"Block vertical alignment setting\x04Align top":["Juster topp"],"Wood thrush singing in Central Park, NYC.":["Flekkskogtrost som synger i Central Park, NYC."],"Write verse\u2026":["Skriv vers..."],"Verse text":["Tekst p\xe5 vers"],"Column %d text":["Tekst for kolonne %d"],"Table caption text":["Tabellbeskrivelsestekst"],"Footer cell text":["Tekst for bunncelle"],"Body cell text":["Tekst for br\xf8dtekstcelle"],"Header cell text":["Tekst for sidetopp"],"Pullquote citation text":["Sitatreferanse-tekst"],"Pullquote text":["Tekst for uttrekkssitat"],"Preformatted text":["Forh\xe5ndsformatert tekst"],"List text":["Listetekst"],Vertical:["Vertikal"],Horizontal:["Horisontal"],"Heading text":["Tekst for overskrift"],"Editing template. Changes made here affect all posts and pages that use the template.":["Redigerer mal. Endringer gjort her p\xe5virker alle innlegg og sider som bruker denne malen."],"%1$s %2$s":["%1$s %2$s"],Themes:["Temaer"],"Viewport height (vh)":["H\xf8yde p\xe5 visningsrute (vh)"],"Viewport width (vw)":["Bredde p\xe5 visningsrute (vw)"],"Relative to root font size (rem)":["Relativt til rotens skriftst\xf8rrelse (rem)"],"Relative to parent font size (em)":["Relativ til foreldrens skriftst\xf8rrelse (em)"],"Pixels (px)":["Piksler (px)"],"Percentage (%)":["Prosent (%)"],"Button width":["Knappebredde"],"Remove blocks":["Fjern blokker"],"Button inside":["Knapp p\xe5 innsiden"],"Button outside":["Knapp p\xe5 utsiden"],"No button":["Ingen knapp"],Radial:["Radiell"],Linear:["Line\xe6r"],"Add link to featured image":["Legg til lenke p\xe5 fremhevet bilde"],"Find out more":["Finn ut mer"],"Insert column after":["Sett inn kolonne etter"],"Insert column before":["Sett inn kolonne foran"],"Insert row after":["Sett inn rad etter"],"Insert row before":["Sett inn rad foran"],"Contact us":["Kontakt oss"],Base:["Base"],"Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.":["Bruk Tab-tasten og piltastene for \xe5 velge en ny blokkplassering. Bruk venstre og h\xf8yre piltast for \xe5 flytte mellom niv\xe5er. N\xe5r en plassering er valgt flytter du blokken ved \xe5 trykke enter eller mellomrom."],Mixed:["Blandet"],Right:["H\xf8yre"],Left:["Venstre"],Bottom:["Bunn"],Top:["Topp"],"You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.":["Du er i navigeringsmodus. Naviger mellom blokker med tab-tasten og piltastene. Bruk venstre og h\xf8yre piltast for \xe5 flytte mellom niv\xe5er. For \xe5 g\xe5 ut av navigeringsmodus og redigere den valgte blokken, trykk enter."],Orientation:["Retning"],Design:["Utforming"],Text:["Tekst"],"Widget areas":["Widgetomr\xe5der"],"Number of tags":["Antall stikkord"],White:["Hvit"],Black:["Svart"],"Browser default":["Nettleserstandard"],"%1$s Block. Row %2$d":["%1$s blokk. Rad %2$d"],Typography:["Typografi"],Content:["Innhold"],"Menu Location":["Menyplassering"],Menu:["Meny"],"25 / 50 / 25":["25 / 50 / 25"],"33 / 33 / 33":["33 / 33 / 33"],"50 / 50":["50 / 50"],User:["Bruker"],"Post Type":["Innholdstype"],Site:["Netttsted"],"Media file":["Mediefil"],"Change heading level":["Endre niv\xe5 for overskrift"],survey:["unders\xf8kelse"],social:["sosialt"],"Global Styles":["Globale stiler"],"Social Icon":["Sosialt ikon"],"block keyword\x04links":["lenker"],"Display featured image":["Vis fremhevet bilde"],"Featured image settings":["Innstillinger for fremhevet bilde"],"Embed a TikTok video.":["Bygg inn en video fra TikTok."],Solid:["Heltrukken"],Angle:["Vinkel"],"%s Block":["%s blokk"],"%1$s Block. %2$s":["%1$s Blokk. %2$s"],"%1$s Block. Column %2$d":["%1$s blokk. Kolonne %2$d"],"%1$s Block. Column %2$d. %3$s":["%1$s Blokk. Kolonne %2$d. %3$s"],"%1$s Block. Row %2$d. %3$s":["%1$s Blokk. Rad %2$d. %3$s"],Theme:["Tema"],"Footer label":["Etikett for sidebunn"],"Header label":["Etikett for sidehode"],"Level %1$s. %2$s":["Niv\xe5 %1$s. %2$s"],"Level %s. Empty.":["Niv\xe5 %s. Tom."],Empty:["Tom"],"Link label":["Lenkeetikett"],"Matt Mullenweg":["Matt Mullenweg"],"EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;":[],"Suspendisse commodo neque lacus, a dictum orci interdum et.":["Suspendisse commodo neque lacus, a dictum orci interdum et."],"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.":["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis."],Background:["Bakgrunn"],"Image size":["Bildest\xf8rrelse"],Replace:["Erstatt"],"You are currently in edit mode. To return to the navigation mode, press Escape.":["Du er n\xe5 i redigeringsmodus. For \xe5 g\xe5 tilbake til navigasjonsmodus, trykk Escape."],"You are probably offline.":["Du er trolig frakoblet nettet."],"Justify items right":["Just\xe9r elementer mot h\xf8yre"],"Justify items center":["Just\xe9r elementer mot midten"],"Justify items left":["Just\xe9r elementer mot venstre"],"Change items justification":["Endre justering av elementer"],"// A \u201cblock\u201d is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );":[],"Add link":["Legg til lenke"],podcast:["podkast"],"WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river.":["Du m\xe5 ikke sitte trygt i ditt hjem\n\tog si: Det er s\xf8rgelig, stakkars dem!\nDu m\xe5 ikke t\xe5le s\xe5 inderlig vel\nden urett som ikke rammer dig selv!\nJeg roper med siste pust av min stemme:\n\tDu har ikke lov til \xe5 g\xe5 der og glemme!"],"Menu Item":["Menyelement"],"Generic label for block inserter button\x04Add block":["Legg til blokk"],"Site Title":["Nettstedstittel"],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Medieopplasting mislyktes. Om dette er en fotografi elelr stort bilde, vennligst skaler det ned og fors\xf8k igjen."],Midnight:["Midnatt"],"Electric grass":["Elektrisk gress"],"Pale ocean":["Blekt hav"],"Luminous dusk":["Lysende skumring"],"Blush bordeaux":["R\xf8dlig bordeaux"],"Blush light purple":["R\xf8dlig lyselilla"],"Cool to warm spectrum":["Kaldt til varmt spektrum"],"Very light gray to cyan bluish gray":["Veldig lysegr\xe5 til bl\xe5lig cyan-gr\xe5"],"Luminous vivid orange to vivid red":["Lysende, levende oransje til levende r\xf8d"],"Luminous vivid amber to luminous vivid orange":["Lysende, levende rav til lysende, levende oransje"],"Light green cyan to vivid green cyan":["Lysegr\xf8nn cyan til levende gr\xf8nn cyan"],"Vivid cyan blue to vivid purple":["Levende cyan bl\xe5 til levende lilla"],"December 6, 2018":["6. desember 2018"],"February 21, 2019":["21. februar 2019"],"May 7, 2019":["7. mai 2019"],"Release Date":["Utgivelsesdato"],"Jazz Musician":["Jazzmusiker"],Version:["Versjon"],"Six.":["Seks."],"Five.":["Fem."],"Four.":["Fire."],"Three.":["Tre."],"Two.":["To."],"One.":["\xc9n."],"One of the hardest things to do in technology is disrupt yourself.":["Noe av det vanskeligste \xe5 gj\xf8re i teknologi er \xe5 forstyrre deg selv."],"\u2014 Kobayashi Issa (\u4e00\u8336)":["\u2014 Kobayashi Issa (\u4e00\u8336)"],"The wren
Earns his living
Noiselessly.":["Gjerdesmetten
Tjener til livet
Lydl\xf8st."],"Welcome to the wonderful world of blocks\u2026":["Velkommen til blokkenes vidunderlige verden..."],Dimensions:["Dimensjoner"],"Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim.":["Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim."],"Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit.":["Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit."],"Call to Action":["Handlingsdriver"],"In quoting others, we cite ourselves.":["Ved \xe5 sitere andre, refererer vi til oss selv."],"Mont Blanc appears\u2014still, snowy, and serene.":["Mont Blanc dukker opp\u2014rolig, sn\xf8rik og fredelig."],"In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.":["I en landsby La Mancha, hvis navn jeg ikke har lyst til \xe5 huske, bodde det for ikke lenge siden en av disse herrene som holder en lanse i lansestativ, et gammelt skjold, en mager hakke og en greyhound i oppl\xe6ring."],Add:["Legg til"],"Attachment page":["Vedleggsside"],"Border radius":["Kantradius"],"Reverse list numbering":["Baklengs listenummerering"],"Start value":["Startverdi"],"Ordered list settings":["Innstillinger for sortert liste"],"Clear Media":["Fjern media"],"Change column alignment":["Endre kolonnejustering"],"Align column right":["H\xf8yrejuster kolonne"],"Align column center":["Midtstill kolonne"],"Align column left":["Venstrejuster kolonne"],Color:["Farge"],"Vivid purple":["Levende lilla"],Custom:["Tilpasset"],"Learn more about anchors":["L\xe6r mer om ankere"],"Enter a word or two \u2014 without spaces \u2014 to make a unique web address just for this block, called an \u201canchor.\u201d Then, you\u2019ll be able to link directly to this section of your page.":["Oppgi et ord eller to \u2014\xa0uten mellomrom \u2014\xa0for \xe5 lage en unik nettadresse bare for denne overskriften, kalt et \u201canker.\u201d S\xe5 kan du lenke direkte til denne seksjonen p\xe5 siden."],"Open in new tab":["\xc5pne i ny fane"],"Learn more about embeds":["L\xe6r mer om innbygginger"],"https://wordpress.org/support/article/embeds/":["https://wordpress.org/support/article/embeds/"],"Three columns; wide center column":["Tre kolonner; bred midtkolonne"],"Three columns; equal split":["Tre kolonner; fordelt likt"],"Two columns; two-thirds, one-third split":["To kolonner; fordelt to tredeler, en tredel"],"Two columns; one-third, two-thirds split":["To kolonner; fordelt \xe9n tredel, to tredeler"],"Two columns; equal split":["To kolonner; fordelt likt"],"Create Table":["Lag tabell"],"Insert a table for sharing data.":["Sett inn en tabell for \xe5 dele data."],"Block rendered as empty.":["Blokken er gjengitt som tom."],"Footer section":["Sidebunnseksjon"],"Header section":["Sidehodeseksjon"],"Sorting and filtering":["Sortering og filtrering"],"Post meta settings":["Innstillinger for innleggsmeta"],"Post content settings":["Innstillinger for innhold i innlegg"],"Column settings":["Kolonneinnstillinger"],"This color combination may be hard for people to read.":["Denne fargekombinasjonen kan v\xe6re vanskelig \xe5 lese for folk."],Group:["Gruppe"],"Crop image to fill entire column":["Beskj\xe6r bildet til \xe5 fylle hele kolonnen"],"Play inline":["Spill inline"],"Add a block":["Legg til en blokk"],"Block vertical alignment setting label\x04Change vertical alignment":["Endre vertikal jjustering"],Taxonomy:["Taksonomi"],"- Select -":["- Velg -"],Default:["Standard"],Search:["S\xf8k"],"Optional placeholder\u2026":["Valgfri plassholder..."],"Add label\u2026":["Legg til etikett"],Calendar:["Kalender"],"block style\x04Default":["Standard"],Back:["Tilbake"],"Max number of words in excerpt":["Maksimalt antall ord i utdrag"],"Display excerpt":["Vis utdrag"],"Display date":["Vis dato"],"Display author":["Vis forfatter"],"Edit RSS URL":["Rediger RSS-URL"],"Embed Amazon Kindle content.":["Bygg inn innhold fra Amazon Kundle"],ebook:["ebok"],"Embed Crowdsignal (formerly Polldaddy) content.":["Bygg inn innhold fra Crowdsignal (tidligere Polldaddy)"],"Warning: the link has been inserted but may have errors. Please test it.":["Advarsel: Lenken er satt inn, men kan ha feil. Vennligst test den."],"%s block selected.":["%s blokk valgt.","%s blokker valgt."],Thumbnail:["Miniatyrbilde"],"Full Size":["Full st\xf8rrelse"],"Align text right":["H\xf8yrejuster tekst"],"Align text center":["Midtstill tekst"],"Align text left":["Venstrejuster tekst"],"Drag images, upload new ones or select files from your library.":["Dra bilder, last opp nye eller velg filer fra ditt bibliotek."],"font size name\x04Huge":["Diger"],"font size name\x04Large":["Stor"],"font size name\x04Medium":["Middels"],"font size name\x04Small":["Liten"],"font size name\x04Normal":["Normal"],"button label\x04Download":["Last ned"],"block title\x04Embed":["Innbygging"],"block title\x04Classic":["Klassisk"],"Link edited.":["Lenke redigert."],"Link removed.":["Lenke fjernet."],Media:["Media"],"block description\x04Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\xe1zar":["Gi sitert tekst visuell utheving. \"In quoting others, we cite ourselves.\" – Julio Cort\xe1zar"],"block description\x04Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":["Introduser nye seksjoner og organiser innhold for \xe5 hjelpe bes\xf8kende (og s\xf8kemotorer) forst\xe5 strukturen p\xe5 ditt innhold."],"Resize for smaller devices":["Endre st\xf8rrelse for mindre enheter"],"This embed may not preserve its aspect ratio when the browser is resized.":["Denne innbyggingen beholder kanskje ikke sitt st\xf8rrelsesforhold n\xe5r st\xf8rrelsen p\xe5 nettleservinduet endres."],"This embed will preserve its aspect ratio when the browser is resized.":["Denne beholder sitt st\xf8rrelsesforhold n\xe5r st\xf8rrelsen p\xe5 nettleservinduet endres."],"Embed an Animoto video.":["Bygg inn innhold fra Animoto."],"Embed a Vimeo video.":["Bygg inn en video fra Vimeo."],"Embed Flickr content.":["Bygg inn innhold fra Flickr."],"Embed Spotify content.":["Bygg inn innhold fra Spotify."],"Embed SoundCloud content.":["Bygg inn innhold fra SoundCloud."],"Embed a WordPress post.":["Bygg inn et innlegg fra WordPress."],"Embed a WordPress.tv video.":["Bygg inn en video fra WordPress.tv."],"Embed a VideoPress video.":["Bygg inn en video fra VideoPress."],"Embed a Tumblr post.":["Bygg inn innlegg fra Tumblr."],"Embed a TED video.":["Bygg inn en video fra TED."],"Embed Speaker Deck content.":["Bygg inn innhold fra Speaker Deck."],"Embed a YouTube video.":["Bygg inn en video fra YouTube."],"Embed SmugMug content.":["Bygg inn innhold fra SmugMug."],"Embed Slideshare content.":["Bygg inn innhold fra Slideshare."],"Embed Scribd content.":["Bygg inn innhold fra Scribd."],"Embed Screencast content.":["Bygg inn innhold fra Screencast."],"Embed ReverbNation content.":["Bygg inn innhold fra ReverbNation."],"Embed a Reddit thread.":["Bygg inn en tr\xe5d fra Reddit."],"Embed Mixcloud content.":["Bygg inn innhold fra Mixcloud."],"Embed a tweet.":["Bygg inn en tweet."],"Embed Kickstarter content.":["Bygg inn innhold fra Kickstarter."],"Embed Issuu content.":["Bygg inn innhold fra Issuu."],"Embed Imgur content.":["Bygg inn innhold fra Imgur."],"Embed a Dailymotion video.":["Bygg inn en video fra Dailymotion."],"Embed CollegeHumor content.":["Bygg inn innhold fra CollegeHumor."],"Embed Cloudup content.":["Bygg inn innhold fra Cloudup."],"Insert from URL":["Sett inn fra URL"],Year:["\xc5r"],Day:["Dag"],Month:["M\xe5ned"],"Media area":["Omr\xe5de for media"],"Show media on right":["Vis media til h\xf8yre"],"Show media on left":["Vis media til venstre"],Cover:["Omslag"],HTML:["HTML"],"Write HTML\u2026":["Skriv HTML..."],"Media settings":["Innstillinger for media"],Overlay:["Overlegg"],Backtick:["Baklengs apostrof"],Period:["Punktum"],Comma:["Komma"],"Change alignment":["Endre justering"],"Change text alignment":["Endre tekstjustering"],"Row count":["Antall rader"],"Column count":["Antall kolonner"],"block description\x04Create and save content to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":["Skap og lagre innhold for \xe5 gjenbruke den over hele nettstedet ditt. Oppdater blokken og endringene gjenspeiles p\xe5 alle steder den er brukt."],"Code is Poetry":["Kode er poesi"],"Untitled Reusable block":["Gjenbrukbar blokk uten tittel"],Reusable:["Gjenbrukbar"],"The response is not a valid JSON response.":["Responsen var ikke en gyldig JSON-respons."],Muted:["Dempet"],"Display avatar":["Vis avatar"],"Number of comments":["Antall kommentarer"],Auto:["Auto"],Preload:["Last inn p\xe5 forh\xe5nd"],"Cyan bluish gray":["Cyan-bl\xe5aktig gr\xe5"],"Vivid cyan blue":["Levende cyan-bl\xe5"],"Pale cyan blue":["Blek cyanbl\xe5"],"Vivid green cyan":["Levende cyan-gr\xf8nn"],"Light green cyan":["Lys cyan-gr\xf8nn"],"Luminous vivid amber":["Lysende levaktig rav"],"Luminous vivid orange":["Lysende livaktig oransje"],"Vivid red":["Livaktig r\xf8d"],"Pale pink":["Blek rosa"],"Show download button":["Vis nedlastingsknapp"],"Link to":["Lenke til"],File:["Fil"],Loop:["L\xf8kke"],Autoplay:["Automatisk avspilling"],"Playback controls":["Kontrollknapper for avspilling"],"Replace image":["Erstatt bilde"],"View the autosave":["Vis autolagringen"],"There is an autosave of this post that is more recent than the version below.":["Det er en automatisk lagret versjon av dette innlegget som er nyere enn versjonen nedenfor."],"Enter URL here\u2026":["Skriv inn URL her..."],"Pin to toolbar":["Fest til verkt\xf8ylinjen"],"Unpin from toolbar":["Fjern fra verkt\xf8ylinjen"],"Fixed width table cells":["Tabell-celler med fast bredde"],"block description\x04Add a block that displays content pulled from other sites, like Twitter or YouTube.":["Legg til en blokk som viser innhold hentet fra andre nettsteder, som Twitter eller YouTube."],"Error loading block: %s":["Feil vedl lasting av blokk: %s"],"Close plugin":["Lukk utvidelse"],"Link settings":["Innstillinger for lenker"],"Page break":["SIdeskift"],Height:["H\xf8yde"],Width:["Bredde"],"Thumbnails are not cropped.":["Miniatyrbilder er ikke besk\xe5ret."],"Thumbnails are cropped to align.":["Miniatyrbilder er besk\xe5ret for \xe5 passe inn."],"Code editor selected":["Kode-redigering valgt"],"Visual editor selected":["Visuell redigerinf valgt"],Plugins:["Utvidelser"],"Trashing failed":["Kasting feilet"],"Updating failed.":["Oppdatering mislyktes."],"Scheduling failed.":["Planlegging mislyktes."],"Publishing failed.":["Publisering mislyktes."],Embeds:["Innbygningselementer"],Blocks:["Blokker"],Undo:["Angre"],Redo:["Gj\xf8r igjen"],"Convert to regular blocks":["Konverter til vanlige blokker"],"More options":["Flere alternativer"],Remove:["Fjern"],"Copied!":["Kopiert!"],Settings:["Innstillinger"],Reset:["Tilbakestill"],"An unknown error occurred.":["En ukjent feil har oppst\xe5tt."],"No results.":["Ingen treff."],"%d result found, use up and down arrow keys to navigate.":["%d resultat funnet. Bruk piltastene for \xe5 navigere.","%d resultater funnet. Bruk piltastene for \xe5 navigere."],"(no title)":["(ingen overskrift)"],URL:["URL"],Close:["Lukk"],"Edit link":["Rediger lenke"],Link:["Lenke"],Strikethrough:["Gjennomstreking"],Italic:["Kursiv"],Bold:["Uthevet"],"Remove link":["Fjern lenke"],"Number of items":["Antall elementer"],All:["Alle"],Category:["Kategori"],"Z \u2192 A":["\xc5 \t A"],"A \u2192 Z":["A \t \xc5"],"Oldest to newest":["Eldste til nyeste"],"Newest to oldest":["Nyeste til eldste"],"Order by":["Sorter etter"],Video:["Video"],"New Column":["Ny kolonne"],"Delete column":["Slett kolonne"],"Delete row":["Slett rad"],"Edit table":["Rediger tabell"],Table:["Tabell"],Shortcode:["Kortkode"],"Write preformatted text\u2026":["Skriv forh\xe5ndsformatert tekst..."],"Read more":["Les mer"],"Indent list item":["Element i innrykksliste"],"Outdent list item":["Element i utrykksliste"],"Convert to ordered list":["Konverter til ordnet liste"],"Convert to unordered list":["Konverter til uordnet liste"],List:["Liste"],"Display post date":["Vis innleggsdato"],"Grid view":["Rutenettvisning"],"List view":["Listevisning"],Size:["St\xf8rrelse"],Image:["Bilde"],Preview:["Forh\xe5ndsvisning"],Heading:["Overskrift"],"Heading %d":["Overskrift %s"],"Heading settings":["Overskriftinnstillinger"],None:["Ingen"],"Media File":["Mediefil"],"Attachment Page":["Vedleggside"],"Crop images":["Beskj\xe6r bilder"],Gallery:["Galleri"],audio:["audio"],music:["musikk"],image:["bilde"],blog:["blogg"],post:["innlegg"],"Embedded content from %s":["Innbygget innhold fra %s"],"Write title\u2026":["Skriv tittel..."],"Fixed background":["Festet bakgrunn"],"Edit image":["Rediger bilde"],"%1$s (%2$s)":["%1$s (%2$s)"],Code:["Kode"],"Write code\u2026":["Skriv kode..."],Categories:["Kategorier"],"Show hierarchy":["Vis hierarki"],"Show post counts":["Vi antall innlegg"],"Display as dropdown":["Vis som rullegardinmeny"],"Add text\u2026":["Legg til tekst..."],Apply:["Bruk"],"Text color":["Tekstfarge"],"Block has been deleted or is unavailable.":["Blokken har blitt slettet eller er utilgjengelig."],"Reusable blocks":["Gjenbrukbar blokk"],Cancel:["Avbryt"],Edit:["Rediger"],"Use URL":["Bruk URL"],Audio:["Audio"],"HTML anchor":["HTML-anker"],"Full width":["Full bredde"],"Wide width":["Bred bredde"],Widgets:["Widgeter"],"Align right":["H\xf8yrejuster"],"Align center":["Midtjuster"],"Align left":["Venstrejuster"],"Add title":["Legg til tittel"],Comment:["Kommentar"],Metadata:["Metadata"],"Select Category":["Velg kategori"],"(Untitled)":["(Uten tittel)"]}},1338,[]); __d(function(e,t,n,o,i,a,l){i.exports={100:["100"],"Nested blocks will fill the width of this container. Toggle to constrain.":["Geneste blokken vullen de breedte van deze container. Toggle om te beperken."],"You are currently in zoom-out mode.":["Je staat momenteel in de uitzoom modus."],"The Queen of Hearts.":["De Hartenkoningin."],"The Mad Hatter.":["De gekke hoedenmaker."],"The Cheshire Cat.":["De Cheshire Cat."],"The White Rabbit.":["Het witte konijn."],"Alice.":["Alice."],"Gather blocks in a container.":["Verzamel blokken in een container."],"Inner blocks use content width":["Binnenste blokken gebruiken inhoud breedte"],Constrained:["Beperkt"],"Spacing Control":["Afstand besturing"],"Custom (%s)":["Aangepast (%s)"],"All sides":["Alle kanten"],"Show label":["Toon label"],"Embed a podcast player from Pocket Casts.":["Een podcast speler van Pocket Casts insluiten."],"66 / 33":["66/33"],"33 / 66":["33/66"],"Nested blocks use content width with options for full and wide widths.":["Geneste blokken gebruiken de inhoud breedte met opties voor volledige en brede breedtes."],"Copy block":["Kopieer blok","Kopieer blokken"],"block title\x04Categories List":["Categorie\xebn lijst"],"Show empty categories":["Toon lege categorie\xebn"],"block description\x04Gather blocks in a layout container.":["Verzamel blokken in een lay-out container."],"Link sides":["Kanten linken"],"Unlink sides":["Kanten ontlinken"],"Quote citation":["Citeer citaat"],"Arrange blocks vertically.":["Blokken verticaal schikken."],Stack:["Stapelen"],"Arrange blocks horizontally.":["Blokken horizontaal schikken."],Week:["Week"],"Group by:":["Groeperen per:"],"single horizontal line\x04Row":["Rij"],"Alignment option\x04None":["Geen"],"Vertical alignment":["Verticale uitlijning"],"Align items bottom":["Items onderaan uitlijnen"],"Align items center":["Items centraal uitlijnen"],"Align items top":["Items bovenaan uitlijnen"],Unwrap:["Ontstapelen"],"block description\x04Create a list item.":["Maak een lijst item."],"block title\x04List item":["Lijst item"],"View Preview":["Voorbeeld bekijken"],"Largest size":["Grootste grootte"],"Smallest size":["Kleinste grootte"],"%s link":["%s link"],"Preference activated - %s":["Voorkeur geactiveerd - %s"],"Preference deactivated - %s":["Voorkeur gedeactiveerd - %s"],"Draft saved.":["Concept opgeslagen."],"Set custom size":["Aangepaste grootte instellen"],"Use size preset":["Gebruik grootte voorinstelling"],"Indicates this palette is created by the user.\x04Custom":["Aangepast"],"Indicates this palette comes from the theme.\x04Custom":["Aangepast"],"Indicates this palette comes from WordPress.\x04Default":["Standaard"],"Indicates this palette comes from the theme.\x04Theme":["Thema"],"%s applied.":["%s toegepast."],"%s removed.":["%s verwijderd."],"Embed Wolfram notebook content.":["Insluiten Wolfram notebook inhoud."],"Allow to wrap to multiple lines":["Sta toe om naar meerdere regels te splitsen"],"block style label\x04Plain":["Zonder opmaak"],"Embed Pinterest pins, boards, and profiles.":["Pinterest pins, borden en profielen insluiten."],bookmark:["bladwijzer"],"Show only top level categories":["Toon alleen top level categorie\xebn"],"https://wordpress.org/support/article/page-jumps/":["https://wordpress.org/support/article/page-jumps/"],Featured:["Uitgelicht"],Highlight:["Markeer"],"You do not have permission to create Pages.":["Je hebt geen toestemming om pagina's te maken."],"Block spacing":["Blokafstand"],"Max %s wide":["Max %s breed"],"block description\x04Display content in multiple columns, with blocks added to each column.":["Geef inhoud weer in meerdere kolommen, met blokken toegevoegd aan elke kolom."],"Minimum height":["Minimale hoogte"],"block description\x04Create structured content in rows and columns to display information.":["Maak gestructureerde inhoud in rijen en kolommen om informatie weer te geven."],"Preload value\x04None":["Geen"],"noun; Audio block parameter\x04Preload":["Vooraf laden"],"Media item link option\x04None":["Geen"],Justification:["Uitlijning"],"Loading options\u2026":["Opties laden.."],"All gallery image sizes updated to: %s":["Alle galerij afbeelding grootten ge\xfcpdatet naar: %s"],"All gallery images updated to not open in new tab":["Alle galerijafbeeldingen ge\xfcpdatet zodat ze niet in een nieuwe tab openen"],"All gallery images updated to open in new tab":["Alle galerijafbeeldingen ge\xfcpdatet om in nieuwe tab te openen"],"All gallery image links updated to: %s":["Alle links naar galerijafbeeldingen ge\xfcpdatet naar: %s"],"If uploading to a gallery all files need to be image formats":["Als je uploadt naar een galerij moeten alle bestanden een afbeelding format hebben"],Flow:["Flow"],Flex:["Flex"],"Name of the file\x04Armstrong_Small_Step":["Armstrong_Small_Step"],"No published posts found.":["Geen gepubliceerde berichten gevonden."],"Autoplay may cause usability issues for some users.":["Autoplay kan voor sommige gebruikers bruikbaarheidsproblemen veroorzaken."],Radius:["Straal"],"Link radii":["Radii linken"],"Unlink radii":["Radii loskoppelen"],"Bottom right":["Rechtsonder"],"Bottom left":["Links onder"],"Top right":["Rechtsboven"],"Top left":["Linksboven"],"block keyword\x04link":["link"],"block keyword\x04movie":["film"],"block description\x04Embed a video from your media library or upload a new one.":["Een video uit je mediabibliotheek insluiten of upload een nieuwe."],"block keyword\x04poem":["gedicht"],"block keyword\x04poetry":["po\xebzie"],"block description\x04Insert poetry. Use special spacing formats. Or quote song lyrics.":["Voeg po\xebzie toe. Gebruik speciale ruimte-indelingen. Of citeer muziekteksten."],"block description\x04This block is deprecated. Please use the Columns block instead.":["Dit blok is verouderd. Gebruik in plaats hiervan het kolommenblok."],"block description\x04A cloud of your most used tags.":["Een wolk van je meest gebruikte tags."],"block style label\x04Stripes":["Strepen"],"block description\x04Add white space between blocks and customize its height.":["Voeg ruimte toe tussen blokken en pas zijn hoogte aan."],"block style label\x04Pill Shape":["Pilvorm"],"block style label\x04Logos Only":["Alleen logo's"],"block description\x04Display icons linking to your social media profiles or sites.":["Toon pictogrammen die linken naar je socialmediaprofielen of sites."],"block description\x04Display an icon linking to a social media profile or site.":["Toon een pictogram dat linkt naar een socialmediaprofiel of site."],"block description\x04Insert additional custom elements with a WordPress shortcode.":["Voeg extra aangepaste elementen in met een WordPress shortcode."],"block style label\x04Dots":["Punten"],"block style label\x04Wide Line":["Brede lijn"],"block keyword\x04divider":["scheidingslijn"],"block keyword\x04hr":["hr"],"block keyword\x04horizontal-line":["horizontale lijn"],"block description\x04Create a break between ideas or sections with a horizontal separator.":["Maak een onderbreking tussen idee\xebn of secties met een horizontale scheidingslijn."],"block keyword\x04find":["vind"],"block description\x04Help visitors find your content.":["Help bezoekers je inhoud te vinden."],"block keyword\x04feed":["feed"],"block keyword\x04atom":["atom"],"block description\x04Display entries from any RSS or Atom feed.":["Toon invoer van elke RSS of Atom feed."],"block keyword\x04cite":["citaat"],"block keyword\x04blockquote":["blockquote"],"block description\x04Give special visual emphasis to a quote from your text.":["Geef speciale visuele nadruk aan een citaat uit je tekst."],"block description\x04Add text that respects your spacing and tabs, and also allows styling.":["Voeg tekst toe die je tussenruimte en tabs behoudt, en ook styling toestaat."],"block keyword\x04text":["tekst"],"block description\x04Start with the basic building block of all narrative.":["Begin met de basis bouwsteen van alle verhaallijnen."],"block keyword\x04pagination":["paginering"],"block keyword\x04next page":["volgende pagina"],"block description\x04Separate your content into a multi-page experience.":["Scheid je inhoud in een ervaring van meerdere pagina's."],"block keyword\x04read more":["lees meer"],"block description\x04Content before this block will be shown in the excerpt on your archives page.":["Inhoud voor dit blok wordt getoond in de samenvatting op je archiefpagina."],"block description\x04Your site doesn\u2019t include support for this block.":["Je site biedt geen ondersteuning voor dit blok."],"block keyword\x04video":["video"],"block keyword\x04image":["afbeelding"],"block description\x04Set media and words side-by-side for a richer layout.":["Zet media en woorden naast elkaar in voor een rijkere lay-out."],"block keyword\x04numbered list":["genummerde lijst"],"block keyword\x04ordered list":["geordende lijst"],"block keyword\x04bullet list":["ongeordende lijst"],"block description\x04Create a bulleted or numbered list.":["Maak een lijst met opsommingstekens of nummers."],"block keyword\x04recent posts":["recente berichten"],"block description\x04Display a list of your most recent posts.":["Toon een lijst van je meest recente berichten."],"block keyword\x04recent comments":["recente reacties"],"block description\x04Display a list of your most recent comments.":["Toon een lijst van je meest recente reacties."],"block style label\x04Rounded":["Afgerond"],"block style label\x04Default":["Standaard"],"block keyword\x04picture":["afbeelding"],"block keyword\x04photo":["foto"],"block keyword\x04img":["img"],"block description\x04Insert an image to make a visual statement.":["Voeg een afbeelding in om een visueel statement te maken."],"block keyword\x04embed":["insluiten"],"block description\x04Add custom HTML code and preview it as you edit.":["Aangepaste HTML-code toevoegen en voorbeeld bekijken terwijl je het bewerkt."],"block keyword\x04subtitle":["sub-titel"],"block keyword\x04title":["titel"],"block keyword\x04section":["sectie"],"block keyword\x04row":["rij"],"block keyword\x04wrapper":["wrapper"],"block keyword\x04container":["container"],"block keyword\x04photos":["foto's"],"block keyword\x04images":["afbeeldingen"],"block description\x04Display multiple images in a rich gallery.":["Toon meerdere afbeeldingen in een rijke galerij."],"block description\x04Use the classic WordPress editor.":["Gebruik de klassieke WordPress editor."],"block keyword\x04download":["download"],"block keyword\x04pdf":["pdf"],"block keyword\x04document":["document"],"block description\x04Add a link to a downloadable file.":["Link naar downloadbaar bestand invoegen."],"block description\x04Add an image or video with a text overlay \u2014 great for headers.":["Voeg een afbeelding of video toe met tekst eroverheen \u2014 geweldig voor headers."],"block description\x04A single column within a columns block.":["Een enkele kolom binnen een kolommenblok."],"block description\x04Display code snippets that respect your spacing and tabs.":["Toon stukjes code die je spati\xebring en tabs respecteren."],"block description\x04Display a list of all categories.":["Toon een lijst van alle categorie\xebn."],"block keyword\x04archive":["archief"],"block keyword\x04posts":["berichten"],"block description\x04A calendar of your site\u2019s posts.":["Een kalender met de berichten van je site."],"block description\x04Prompt visitors to take action with a group of button-style links.":["Vraag bezoekers actie te ondernemen met een groep van links in de stijl van een knop."],"block style label\x04Outline":["Omlijning"],"block style label\x04Fill":["Vullen"],"block description\x04Prompt visitors to take action with a button-style link.":["Vraag bezoekers om actie te ondernemen met een link in de stijl van een knop."],"block keyword\x04recording":["opnemen"],"block keyword\x04podcast":["podcast"],"block keyword\x04sound":["geluid"],"block keyword\x04music":["muziek"],"block description\x04Embed a simple audio player.":["Een simpele audiospeler insluiten."],"block description\x04Display a date archive of your posts.":["Toon een datum archief van je berichten."],"Points (pt)":["Punten (pt)"],"Picas (pc)":["Picas (pc)"],"Inches (in)":["Inches (in)"],"Millimeters (mm)":["Millimeters (mm)"],"Centimeters (cm)":["Centimeters (cm)"],"x-height of the font (ex)":["x-hoogte van het lettertype (ex)"],"Width of the zero (0) character (ch)":["Breedte van het nul (0) karakter (ch)"],"Viewport largest dimension (vmax)":["Viewpoort grootste afmeting (vmax)"],"Viewport smallest dimension (vmin)":["Viewpoort kleinste afmeting (vmin)"],"Percent (%)":["Percentage (%)"],Margin:["Marge"],"Customize the width for all elements that are assigned to the center or wide columns.":["Pas de breedte aan voor alle elementen die zijn toegewezen aan de middelste of brede kolommen."],Wide:["Breed"],"Widget types":["Widget types"],"Custom template created. You're in template mode now.":["Aangepaste template gemaakt. Je bent nu in de templatemodus."],"Embed of %s.":["Insluiting van %s."],"PDF embed":["PDF insluiting"],"Add citation":["Citaat toevoegen"],"Add quote":["Quote toevoegen"],"Add caption":["Bijschrift toevoegen"],"Relative to root font size (rem)\x04rems":["rems"],"Relative to parent font size (em)\x04ems":["ems"],Border:["Rand"],"Your site does not have any posts, so there is nothing to display here at the moment.":["Je site heeft geen berichten, dus er is op dit moment niets om hier weer te geven."],"Block cannot be rendered inside itself.":["Het blok kan niet binnen zichzelf weergegeven worden."],Indent:["Inspringen"],Outdent:["Marge verkleinen"],Ordered:["Geordend"],Unordered:["Ongeordend"],"Space between items":["Afstand tussen items"],"Add an anchor":["Voeg een anker toe"],Align:["Uitlijnen"],"block title\x04Social Icon":["Sociaal pictogram"],"block title\x04Social Icons":["Social pictogrammen"],"block title\x04Tag Cloud":["Tag cloud"],"block title\x04Video":["Video"],"block title\x04Verse":["Strofe"],"block title\x04Text Columns (deprecated)":["Tekstkolommen (verouderd)"],"block title\x04Table":["Tabel"],"block title\x04Spacer":["Vulelement"],"block title\x04Shortcode":["Shortcode"],"block title\x04Separator":["Scheidingsteken"],"block title\x04Group":["Groep"],"block title\x04Search":["Zoeken"],"block title\x04RSS":["RSS"],"block title\x04Reusable block":["Herbruikbaar blok"],"block title\x04Pullquote":["Pull-quote"],"block title\x04Preformatted":["Voorgeformatteerd"],"block title\x04Page Break":["Pagina-einde"],"block title\x04More":["Meer"],"block title\x04Unsupported":["Niet ondersteund"],"block title\x04List":["Lijst"],"block title\x04Latest Posts":["Nieuwste berichten"],"block title\x04Latest Comments":["Nieuwste reacties"],"block title\x04Media & Text":["Media & tekst"],"block title\x04Custom HTML":["Aangepaste HTML"],"block title\x04File":["Bestand"],"block title\x04Cover":["Omslagafbeelding"],"block title\x04Column":["Kolom"],"block title\x04Columns":["Kolommen"],"block title\x04Code":["Code"],"block title\x04Calendar":["Kalender"],"block title\x04Buttons":["Knoppen"],"block title\x04Button":["Knop"],"block title\x04Audio":["Audio"],"block title\x04Archives":["Archieven"],"block title\x04Gallery":["Galerij"],"block title\x04Quote":["Citaat"],"block title\x04Heading":["Koptekst"],"block title\x04Image":["Afbeelding"],"block title\x04Paragraph":["Paragraaf"],"text direction\x04ltr":["tekstrichting"],"Block vertical alignment setting\x04Align bottom":["Naar onder uitlijnen"],"Block vertical alignment setting\x04Align middle":["Naar het midden uitlijnen"],"Block vertical alignment setting\x04Align top":["Naar boven uitlijnen"],"Wood thrush singing in Central Park, NYC.":["Wood thrush singing in Central Park, NYC."],"Write verse\u2026":["Schrijf een strofe..."],"Verse text":["Strofe tekst"],"Column %d text":["Kolom %d tekst"],"Table caption text":["Tabel bijschrift tekst"],"Footer cell text":["Footer cel tekst"],"Body cell text":["Tekst in de body"],"Header cell text":["Header cel tekst"],"Pullquote citation text":["Pullquote citatietekst"],"Pullquote text":["Pullquote tekst"],"Preformatted text":["Vooraf opgemaakte tekst"],"List text":["Lijsttekst"],Vertical:["Verticaal"],Horizontal:["Horizontaal"],"Heading text":["Heading tekst"],"Editing template. Changes made here affect all posts and pages that use the template.":["Template bewerken. Wijzigingen die hier worden aangebracht, zijn van invloed op alle berichten en pagina's die de template gebruiken."],"%1$s %2$s":["%1$s %2$s"],Themes:["Thema's"],"Viewport height (vh)":["Viewport hoogte (vh)"],"Viewport width (vw)":["Viewport breedte (vw)"],"Relative to root font size (rem)":["Vergeleken met de oorspronkelijke lettertypegrootte (rem)"],"Relative to parent font size (em)":["Vergeleken met de bovenliggende lettertypegrootte (em)"],"Pixels (px)":["Pixels (px)"],"Percentage (%)":["Percentage (%)"],"Button width":["Knop breedte"],"Remove blocks":["Verwijder blokken"],"Button inside":["Knop binnen"],"Button outside":["Knop buiten"],"No button":["Geen knop"],Radial:["Radiaal"],Linear:["Lineair"],"Add link to featured image":["Voeg een link toe aan de uitgelichte afbeelding"],"Find out more":["Meer te weten komen"],"Insert column after":["Kolom er achter invoegen"],"Insert column before":["Kolom ervoor invoegen"],"Insert row after":["Rij onder invoegen"],"Insert row before":["Rij boven invoegen"],"Contact us":["Neem contact met ons op"],Base:["Basis"],"Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.":["Gebruik de Tab toets en de pijltjestoetsen om een nieuwe bloklocatie te kiezen. Gebruik de Linker- en Rechter pijltjestoetsen om tussen nestniveaus te bewegen. Zodra de locatie is geselecteerd druk je op Enter of Spatie om het blok te verplaatsen."],Mixed:["Gemengd"],Right:["Rechts"],Left:["Links"],Bottom:["Bodem"],Top:["Bovenaan"],"You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.":["Je bent momenteel in navigatie modus. Navigeer blokken door middel van de Tab toets en pijl toetsen. Gebruik linker en rechter pijltoets om te verplaatsen tussen geneste niveaus. Om de navigatie en het bewerken van het geselecteerde blok te be\xebindigen, druk op Enter."],Orientation:["Ori\xebntatie"],Design:["Ontwerp"],Text:["Tekst"],"Widget areas":["Widget gebieden"],"Number of tags":["Aantal tag's"],White:["Wit"],Black:["Zwart"],"Browser default":["Browser standaard"],"%1$s Block. Row %2$d":["%1$s blok. Rij %2$d"],Typography:["Typografie"],Content:["Inhoud"],"Menu Location":["Menulocatie"],Menu:["Menu"],"25 / 50 / 25":["25 / 50 / 25"],"33 / 33 / 33":["33 / 33 / 33"],"50 / 50":["50 / 50"],User:["Gebruiker"],"Post Type":["Berichttype"],Site:["Site"],"Media file":["Mediabestand"],"Change heading level":["Verander kopniveau"],survey:["enqu\xeate"],social:["sociaal"],"Global Styles":["Algemene stijlen"],"Social Icon":["Social pictogram"],"block keyword\x04links":["links"],"Display featured image":["Toon uitgelichte afbeelding"],"Featured image settings":["Uitgelichte afbeelding instellingen"],"Embed a TikTok video.":["Een TikTok video insluiten."],Solid:["Effen"],Angle:["Hoek"],"%s Block":["%s blok"],"%1$s Block. %2$s":["%1$s blok. %2$s"],"%1$s Block. Column %2$d":["%1$s blok. Kolom %2$d"],"%1$s Block. Column %2$d. %3$s":["%1$s blok. Kolom %2$d. %3$s"],"%1$s Block. Row %2$d. %3$s":["%1$s blok. Rij %2$d. %3$s"],Theme:["Thema"],"Footer label":["Footer label"],"Header label":["Header label"],"Level %1$s. %2$s":["Niveau %1$s. %2$s"],"Level %s. Empty.":["Niveau %s. Leeg."],Empty:["Leeg"],"Link label":["Link label"],"Matt Mullenweg":["Matt Mullenweg"],"EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;":["EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;"],"Suspendisse commodo neque lacus, a dictum orci interdum et.":["Suspendisse commodo neque lacus, a dictum orci interdum et."],"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.":["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis."],Background:["Achtergrond"],"Image size":["Afbeelding grootte"],Replace:["Vervang"],"You are currently in edit mode. To return to the navigation mode, press Escape.":["Je bevindt je momenteel in de bewerken-modus. Druk op Escape om terug te gaan naar navigatie-modus."],"You are probably offline.":["Je bent waarschijnlijk offline."],"Justify items right":["Elementen rechts uitlijnen"],"Justify items center":["Elementen centreren"],"Justify items left":["Elementen links uitlijnen"],"Change items justification":["Verander uitlijning elementen"],"// A \u201cblock\u201d is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );":["// Een \"blok\" is een abstracte term dat wordt gebruikt om\n// markup eenheden te beschrijven die allemaal samen\n// de inhoud of de lay-out van een pagina vormen.\nregisterBlockType( name, settings );"],"Add link":["Voeg link toe"],podcast:["podcast"],"WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river.":["WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river."],"Menu Item":["Menu item"],"Generic label for block inserter button\x04Add block":["Blok toevoegen"],"Site Title":["Sitetitel"],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Media-upload mislukt. Gaat het om een foto of een grote afbeelding, verklein deze dan en probeer het opnieuw."],Midnight:["Middernacht"],"Electric grass":["Electrisch gras"],"Pale ocean":["Bleek oceaan"],"Luminous dusk":["Lichtgevende dageraad"],"Blush bordeaux":["Blozend bordeaux"],"Blush light purple":["Blozend lichtpaars"],"Cool to warm spectrum":["Koel naar warm spectrum"],"Very light gray to cyan bluish gray":["Zeer lichtgrijs tot cyaan blauwachtig grijs"],"Luminous vivid orange to vivid red":["Lichtgevend levendig oranje tot levendig rood"],"Luminous vivid amber to luminous vivid orange":["Lichtgevend levendig amber tot lichtgevend levendig oranje"],"Light green cyan to vivid green cyan":["Licht groen cyaan tot levendig groen cyaan"],"Vivid cyan blue to vivid purple":["Levendig cyaan blauw tot levendig paars"],"December 6, 2018":["6 december 2018"],"February 21, 2019":["21 februari 2019"],"May 7, 2019":["7 mei 2019"],"Release Date":["Release datum"],"Jazz Musician":["Jazz muzikant"],Version:["Versie"],"Six.":["Zes."],"Five.":["Vijf."],"Four.":["Vier."],"Three.":["Drie."],"Two.":["Twee."],"One.":["E\xe9n."],"One of the hardest things to do in technology is disrupt yourself.":["Een van de moeilijkste zaken om te doen in technologie is jezelf verstoren."],"\u2014 Kobayashi Issa (\u4e00\u8336)":["\u2014 Kobayashi Issa (\u4e00\u8336)"],"The wren
Earns his living
Noiselessly.":["Het winterkoninkje
Verdient zijn brood
Lawaaiig."],"Welcome to the wonderful world of blocks\u2026":["Welkom in de wondere wereld van blokken..."],Dimensions:["Afmetingen"],"Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim.":["Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim."],"Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit.":["Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit."],"Call to Action":["Call to Action"],"In quoting others, we cite ourselves.":["Wanneer we anderen quoten, citeren we onszelf."],"Mont Blanc appears\u2014still, snowy, and serene.":["Mont Blanc verschijnt\u2014stil, besneeuwd, en sereen."],"In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.":["In een dorp La Mancha, waarvan ik me de naam niet wil herinneren, woonde niet lang geleden \xe9\xe9n van die heren die een lans in het lansrek houden, een oud schild, een slank houweel, en een windhond om mee te jagen."],Add:["Toevoegen"],"Attachment page":["Bijlagepagina"],"Border radius":["Rand afronding"],"Reverse list numbering":["Omgekeerde lijstnummering"],"Start value":["Beginwaarde"],"Ordered list settings":["Geordende lijst-instellingen"],"Clear Media":["Wis media"],"Change column alignment":["Wijzig uitlijning kolom"],"Align column right":["Kolom rechts uitlijnen"],"Align column center":["Centreer kolom naar het midden"],"Align column left":["Kolom links uitlijnen"],Color:["Kleur"],"Vivid purple":["Helder paars"],Custom:["Aangepast"],"Learn more about anchors":["Meer informatie over ankers"],"Enter a word or two \u2014 without spaces \u2014 to make a unique web address just for this block, called an \u201canchor.\u201d Then, you\u2019ll be able to link directly to this section of your page.":["Typ \xe9\xe9n of twee woorden \u2014\xa0zonder spaties \u2014\xa0om een uniek webadres te maken voor dit blok, genaamd een \u201canker.\u201d Daarna kun je direct naar deze sectie op je pagina linken."],"Open in new tab":["Open in nieuwe tab"],"Learn more about embeds":["Meer informatie over insluitingen"],"https://wordpress.org/support/article/embeds/":["https://wordpress.org/support/article/embeds/"],"Three columns; wide center column":["Drie kolommen, brede midden kolom"],"Three columns; equal split":["Drie kolommen; gelijkmatig verdeeld"],"Two columns; two-thirds, one-third split":["Twee kolommen; twee derde, \xe9\xe9n derde verdeling"],"Two columns; one-third, two-thirds split":["Twee kolommen; \xe9\xe9n derde, twee derde verdeling"],"Two columns; equal split":["Twee kolommen; gelijkmatig verdeeld"],"Create Table":["Maak tabel"],"Insert a table for sharing data.":["Voeg een tabel in voor het delen van gegevens."],"Block rendered as empty.":["Blok weergegeven als leeg."],"Footer section":["Footer sectie"],"Header section":["Header sectie"],"Sorting and filtering":["Sortering en filtering"],"Post meta settings":["Bericht meta-instellingen"],"Post content settings":["Bericht-inhoud instellingen"],"Column settings":["Kolom-instellingen"],"This color combination may be hard for people to read.":["Deze kleurencombinatie kan moeilijk te lezen zijn voor mensen."],Group:["Groep"],"Crop image to fill entire column":["Snij afbeelding bij om de gehele kolom te vullen"],"Play inline":["Inline afspelen"],"Add a block":["Een blok toevoegen"],"Block vertical alignment setting label\x04Change vertical alignment":["Wijzig verticale uitlijning"],Taxonomy:["Taxonomie"],"- Select -":["- Selecteer -"],Default:["Standaard"],Search:["Zoek"],"Optional placeholder\u2026":["Optionele plaatshouder..."],"Add label\u2026":["Voeg label toe..."],Calendar:["Kalender"],"block style\x04Default":["Standaard"],Back:["Terug"],"Max number of words in excerpt":["Maximum aantal woorden in samenvatting"],"Display excerpt":["Toon samenvatting"],"Display date":["Toon datum"],"Display author":["Toon auteur"],"Edit RSS URL":["Bewerk RSS URL"],"Embed Amazon Kindle content.":["Sluit Amazon Kindle inhoud in."],ebook:["e-boek"],"Embed Crowdsignal (formerly Polldaddy) content.":["Sluit Crowdsignal (voorheen Polldaddy) inhoud in."],"Warning: the link has been inserted but may have errors. Please test it.":["Waarschuwing: de link is toegevoegd, maar kan fouten bevatten. Graag goed testen."],"%s block selected.":["%s blok geselecteerd.","%s blokken geselecteerd."],Thumbnail:["Thumbnail"],"Full Size":["Volledige grootte"],"Align text right":["Tekst rechts uitlijnen"],"Align text center":["Tekst centreren"],"Align text left":["Tekst links uitlijnen"],"Drag images, upload new ones or select files from your library.":["Sleep afbeeldingen, upload nieuwe of selecteer bestanden in je bibliotheek."],"font size name\x04Huge":["Zeer groot"],"font size name\x04Large":["Groot"],"font size name\x04Medium":["Gemiddeld"],"font size name\x04Small":["Klein"],"font size name\x04Normal":["Normaal"],"button label\x04Download":["Download"],"block title\x04Embed":["Insluiten"],"block title\x04Classic":["Klassiek"],"Link edited.":["Link bewerkt."],"Link removed.":["Link verwijderd."],Media:["Media"],"block description\x04Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\xe1zar":["Geef geciteerde tekst visuele nadruk. \"Door anderen te citeren, citeren we onszelf.\" \u2014 Julio Cort\xe1zar"],"block description\x04Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":["Introduceer nieuwe secties en organiseer inhoud om bezoekers (en zoekmachines) te helpen de structuur van je inhoud te begrijpen."],"Resize for smaller devices":["Verander formaat voor kleinere apparaten"],"This embed may not preserve its aspect ratio when the browser is resized.":["Deze insluiting behoudt mogelijk niet haar afbeeldingverhouding wanneer de browsergrootte wordt gewijzigd."],"This embed will preserve its aspect ratio when the browser is resized.":["Deze insluiting behoudt haar afbeeldingverhouding wanneer de browsergrootte wordt gewijzigd."],"Embed an Animoto video.":["Een Animoto video insluiten."],"Embed a Vimeo video.":["Een Vimeo video insluiten."],"Embed Flickr content.":["Flickr inhoud insluiten."],"Embed Spotify content.":["Spotify inhoud insluiten."],"Embed SoundCloud content.":["SoundCloud inhoud insluiten."],"Embed a WordPress post.":["Een WordPress bericht insluiten."],"Embed a WordPress.tv video.":["Een WordPress.tv video insluiten."],"Embed a VideoPress video.":["Een VideoPress video insluiten."],"Embed a Tumblr post.":["Een Tumblr bericht insluiten."],"Embed a TED video.":["Een TED video insluiten."],"Embed Speaker Deck content.":["Speaker Deck inhoud insluiten."],"Embed a YouTube video.":["Een YouTube video insluiten."],"Embed SmugMug content.":["SmugMug inhoud insluiten."],"Embed Slideshare content.":["Slideshare inhoud insluiten."],"Embed Scribd content.":["Scribd inhoud insluiten."],"Embed Screencast content.":["Screencast inhoud insluiten."],"Embed ReverbNation content.":["ReverbNation inhoud insluiten."],"Embed a Reddit thread.":["Een Reddit discussie insluiten."],"Embed Mixcloud content.":["Mixcloud inhoud insluiten."],"Embed a tweet.":["Een tweet insluiten."],"Embed Kickstarter content.":["Kickstarter inhoud insluiten."],"Embed Issuu content.":["Issuu inhoud insluiten."],"Embed Imgur content.":["Imgur inhoud insluiten."],"Embed a Dailymotion video.":["Een Dailymotion video insluiten."],"Embed CollegeHumor content.":["CollegeHumor inhoud insluiten."],"Embed Cloudup content.":["Cloudup inhoud insluiten."],"Insert from URL":["Invoegen vanuit URL"],Year:["Jaar"],Day:["Dag"],Month:["Maand"],"Media area":["Mediagebied"],"Show media on right":["Toon media rechts"],"Show media on left":["Toon media links"],Cover:["Cover"],HTML:["HTML"],"Write HTML\u2026":["Schrijf HTML..."],"Media settings":["Media-instellingen"],Overlay:["Bedekking"],Backtick:["Accent grave"],Period:["Punt"],Comma:["Komma"],"Change alignment":["Wijzig uitlijning"],"Change text alignment":["Wijzig tekstuitlijning"],"Row count":["Rij aantal"],"Column count":["Kolom aantal"],"block description\x04Create and save content to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":["Maak inhoud en sla deze op om het over de hele site te kunnen gebruiken. Werk het blok bij en de wijzigingen worden overal toegepast."],"Code is Poetry":["Code is Poetry"],"Untitled Reusable block":["Herbruikbaar blok zonder titel"],Reusable:["Herbruikbaar"],"The response is not a valid JSON response.":["De reactie is geen geldige JSON reactie."],Muted:["Gedempt"],"Display avatar":["Toon avatar"],"Number of comments":["Aantal reacties"],Auto:["Automatisch"],Preload:["Voorladen"],"Cyan bluish gray":["Cyaan blauwachtig grijs"],"Vivid cyan blue":["Levendig cyaan blauw"],"Pale cyan blue":["Bleek cyaan blauw"],"Vivid green cyan":["Levendig groen cyaan"],"Light green cyan":["Licht groen cyaan"],"Luminous vivid amber":["Lichtgevend levendig amber"],"Luminous vivid orange":["Lichtgevend levendig oranje"],"Vivid red":["Levendig rood"],"Pale pink":["Bleek roze"],"Show download button":["Toon downloadknop"],"Link to":["Link naar"],File:["Bestand"],Loop:["Lus"],Autoplay:["Automatisch spelen"],"Playback controls":["Afspeelknoppen"],"Replace image":["Vervang afbeelding"],"View the autosave":["Bekijk de autosave"],"There is an autosave of this post that is more recent than the version below.":["Er is een autosave van dit bericht dat recenter is dan onderstaande versie."],"Enter URL here\u2026":["Vul URL in..."],"Pin to toolbar":["Maak vast aan toolbar"],"Unpin from toolbar":["Maak los van toolbar"],"Fixed width table cells":["Tabelcellen met een vaste breedte"],"block description\x04Add a block that displays content pulled from other sites, like Twitter or YouTube.":["Voeg een blok toe dat inhoud gehaald van andere sites toont, zoals Twitter of YouTube."],"Error loading block: %s":["Fout bij laden blok: %s"],"Close plugin":["Sluit plugin"],"Link settings":["Link instellingen"],"Page break":["Paginascheiding"],Height:["Hoogte"],Width:["Breedte"],"Thumbnails are not cropped.":["Thumbnails zijn niet bijgesneden."],"Thumbnails are cropped to align.":["Thumbnails zijn passend bijgesneden."],"Code editor selected":["Code editor geselecteerd"],"Visual editor selected":["Visuele editor geselecteerd"],Plugins:["Plugins"],"Trashing failed":["Verwijderen mislukt"],"Updating failed.":["Updaten mislukt."],"Scheduling failed.":["Plannen mislukt."],"Publishing failed.":["Publiceren mislukt."],Embeds:["Insluitingen"],Blocks:["Blokken"],Undo:["Ongedaan maken"],Redo:["Opnieuw"],"Convert to regular blocks":["Converteer naar normale blokken"],"More options":["Meer opties"],Remove:["Verwijder"],"Copied!":["Gekopieerd!"],Settings:["Instellingen"],Reset:["Herstel"],"An unknown error occurred.":["Er is een onbekende fout opgetreden."],"No results.":["Geen resultaten."],"%d result found, use up and down arrow keys to navigate.":["%d resultaat gevonden, gebruik de omhoog en omlaag toetsen om te navigeren.","%d resultaten gevonden, gebruik de omhoog en omlaag toetsen om te navigeren."],"(no title)":["(geen titel)"],URL:["URL"],Close:["Sluiten"],"Edit link":["Bewerk link"],Link:["Link"],Strikethrough:["Doorhalen"],Italic:["Cursief"],Bold:["Vet"],"Remove link":["Verwijder link"],"Number of items":["Aantal elementen"],All:["Alle"],Category:["Categorie"],"Z \u2192 A":["Z \t A"],"A \u2192 Z":["A \t Z"],"Oldest to newest":["Oudste naar nieuwste"],"Newest to oldest":["Nieuwste naar oudste"],"Order by":["Volgorde op"],Video:["Video"],"New Column":["Nieuwe kolom"],"Delete column":["Kolom verwijderen"],"Delete row":["Rij verwijderen"],"Edit table":["Bewerk tabel"],Table:["Tabel"],Shortcode:["Shortcode"],"Write preformatted text\u2026":["Schrijf voorgeformatteerde tekst..."],"Read more":["Verder lezen"],"Indent list item":["Verhoog inspringen lijstelement"],"Outdent list item":["Verlaag inspringen lijstelement"],"Convert to ordered list":["Omzetten naar geordende lijst"],"Convert to unordered list":["Omzetten naar ongeordende lijst"],List:["Lijst"],"Display post date":["Toon datum bericht"],"Grid view":["Rasterweergave"],"List view":["Lijstweergave"],Size:["Grootte"],Image:["Afbeelding"],Preview:["Voorbeeld"],Heading:["Koptekst"],"Heading %d":["Heading %d"],"Heading settings":["Kop-instellingen"],None:["Geen"],"Media File":["Mediabestand"],"Attachment Page":["Bijlagepagina"],"Crop images":["Bijsnijden afbeeldingen"],Gallery:["Galerij"],audio:["audio"],music:["muziek"],image:["afbeelding"],blog:["blog"],post:["bericht"],"Embedded content from %s":["Ingesloten inhoud van %s"],"Write title\u2026":["Schrijf titel..."],"Fixed background":["Vaste achtergrond"],"Edit image":["Bewerk afbeelding"],"%1$s (%2$s)":["%1$s (%2$s)"],Code:["Code"],"Write code\u2026":["Schrijf code\u2026"],Categories:["Categorie\xebn"],"Show hierarchy":["Toon hi\xebrarchie"],"Show post counts":["Toon aantal berichten"],"Display as dropdown":["Toon als dropdown"],"Add text\u2026":["Voeg tekst toe..."],Apply:["Toepassen"],"Text color":["Tekstkleur"],"Block has been deleted or is unavailable.":["Blok is verwijderd of is niet beschikbaar."],"Reusable blocks":["Herbruikbare blokken"],Cancel:["Annuleer"],Edit:["Bewerk"],"Use URL":["Gebruik URL"],Audio:["Audio"],"HTML anchor":["HTML anker"],"Full width":["Volledige breedte"],"Wide width":["Wijde breedte"],Widgets:["Widgets"],"Align right":["Rechts uitlijnen"],"Align center":["Centreren"],"Align left":["Links uitlijnen"],"Add title":["Voeg titel toe"],Comment:["Reactie"],Metadata:["Metadata"],"Select Category":["Selecteer categorie"],"(Untitled)":["(Zonder titel)"]}},1339,[]); -__d(function(e,t,n,o,i,a,l){i.exports={100:["100"],"Nested blocks will fill the width of this container. Toggle to constrain.":["Geneste blokken vullen de breedte van deze container. Aan-/uitzetten om te beperken."],"You are currently in zoom-out mode.":["Je bent momenteel in de uitgezoomde modus."],"The Queen of Hearts.":["De hartenkoningin."],"The Mad Hatter.":["De gekke hoedenmaker."],"The Cheshire Cat.":["De Cheshire kat."],"The White Rabbit.":["Het witte konijn."],"Alice.":["Alice."],"Gather blocks in a container.":["Verzamel blokken in een container."],"Inner blocks use content width":["Binnenste blokken gebruiken inhoud breedte"],Constrained:["Beperkt"],"Spacing Control":["Afstand besturing"],"Custom (%s)":["Aangepast (%s)"],"All sides":["Alle zijden"],"Show label":["Label tonen"],"Embed a podcast player from Pocket Casts.":["Een podcast speler van Pocket Casts insluiten."],"66 / 33":["66/33"],"33 / 66":["33/66"],"Nested blocks use content width with options for full and wide widths.":["Geneste blokken gebruiken inhoud breedte met opties voor volledige en brede breedte."],"Copy block":["Kopieer blok","Kopieer blokken"],"block title\x04Categories List":["Categorie\xebnlijst"],"Show empty categories":["Lege categorie\xebn tonen"],"block description\x04Gather blocks in a layout container.":["Verzamel blokken in een lay-out container."],"Link sides":["Kanten linken"],"Unlink sides":["Kanten ontlinken"],"Quote citation":["Citeer citaat"],"Arrange blocks vertically.":["Blokken verticaal schikken."],Stack:["Stack"],"Arrange blocks horizontally.":["Blokken horizontaal schikken."],Week:["Week"],"Group by:":["Groeperen per:"],"single horizontal line\x04Row":["Rij"],"Alignment option\x04None":["Geen"],"Vertical alignment":["Verticale uitlijning"],"Align items bottom":["Items onderaan uitlijnen"],"Align items center":["Items centraal uitlijnen"],"Align items top":["Items bovenaan uitlijnen"],Unwrap:["Ontstapelen"],"block description\x04Create a list item.":["Maak een lijst item."],"block title\x04List item":["Lijst item"],"View Preview":["Voorvertoning bekijken"],"Largest size":["Grootste grootte"],"Smallest size":["Kleinste grootte"],"%s link":["%s link"],"Preference activated - %s":["Voorkeur geactiveerd - %s"],"Preference deactivated - %s":["Voorkeur gedeactiveerd - %s"],"Draft saved.":["Concept opgeslagen."],"Set custom size":["Aangepaste grootte instellen"],"Use size preset":["Gebruik grootte voorinstelling"],"Indicates this palette is created by the user.\x04Custom":["Aangepast"],"Indicates this palette comes from the theme.\x04Custom":["Aangepast"],"Indicates this palette comes from WordPress.\x04Default":["Standaard"],"Indicates this palette comes from the theme.\x04Theme":["Thema"],"%s applied.":["%s toegepast."],"%s removed.":["%s verwijderd."],"Embed Wolfram notebook content.":["Wolfram notebook inhoud insluiten."],"Allow to wrap to multiple lines":["Toestaan om naar meerdere regels te splitsen"],"block style label\x04Plain":["Zonder opmaak"],"Embed Pinterest pins, boards, and profiles.":["Pinterest pins, borden en profielen insluiten."],bookmark:["bladwijzer"],"Show only top level categories":["Toon alleen top level categorie\xebn"],"https://wordpress.org/support/article/page-jumps/":["https://wordpress.org/support/article/page-jumps/"],Featured:["Uitgelicht"],Highlight:["Markeren"],"You do not have permission to create Pages.":["Je hebt geen toestemming om pagina's te maken."],"Block spacing":["Blokafstand"],"Max %s wide":["Max %s breed"],"block description\x04Display content in multiple columns, with blocks added to each column.":["Geef inhoud weer in meerdere kolommen, met blokken toegevoegd aan elke kolom."],"Minimum height":["Minimale hoogte"],"block description\x04Create structured content in rows and columns to display information.":["Maak gestructureerde inhoud in rijen en kolommen om informatie weer te geven."],"Preload value\x04None":["Geen"],"noun; Audio block parameter\x04Preload":["Preload"],"Media item link option\x04None":["Geen"],Justification:["Uitlijning"],"Loading options\u2026":["Opties aan het laden..."],"All gallery image sizes updated to: %s":["Alle galerij afbeelding grootten bijgewerkt naar: %s"],"All gallery images updated to not open in new tab":["Alle galerijafbeeldingen bijgewerkt zodat ze niet in een nieuwe tab openen"],"All gallery images updated to open in new tab":["Alle galerijafbeeldingen bijgewerkt om in nieuwe tab te openen"],"All gallery image links updated to: %s":["Alle links naar galerijafbeeldingen bijgewerkt naar: %s"],"If uploading to a gallery all files need to be image formats":["Als je uploadt naar een galerij moeten alle bestanden een afbeelding formaten hebben"],Flow:["Flow"],Flex:["Flex"],"Name of the file\x04Armstrong_Small_Step":["Armstrong_Small_Step"],"No published posts found.":["Geen gepubliceerde berichten gevonden."],"Autoplay may cause usability issues for some users.":["Autoplay kan mogelijks gebruiksproblemen veroorzaken voor sommige gebruikers."],Radius:["Radius"],"Link radii":["Verbind stralen"],"Unlink radii":["Ontkoppel stralen"],"Bottom right":["Rechtsonderaan"],"Bottom left":["Linksonderaan"],"Top right":["Rechtsbovenaan"],"Top left":["Linksbovenaan"],"block keyword\x04link":["link"],"block keyword\x04movie":["film"],"block description\x04Embed a video from your media library or upload a new one.":["Een video uit je mediabibliotheek insluiten of upload een nieuwe."],"block keyword\x04poem":["gedicht"],"block keyword\x04poetry":["po\xebzie"],"block description\x04Insert poetry. Use special spacing formats. Or quote song lyrics.":["Po\xebzie invoegen. Gebruik speciale afstandsformaten. Of citeer songteksten."],"block description\x04This block is deprecated. Please use the Columns block instead.":["Dit blok is verouderd. Gebruik in plaats hiervan het kolommenblok."],"block description\x04A cloud of your most used tags.":["Een wolk van de meest gebruikte tags."],"block style label\x04Stripes":["Strepen"],"block description\x04Add white space between blocks and customize its height.":["Voeg witruimte toe tussen blokken en pas de hoogte aan."],"block style label\x04Pill Shape":["Pilvorm"],"block style label\x04Logos Only":["Alleen logo's"],"block description\x04Display icons linking to your social media profiles or sites.":["Toon iconen die linken naar je social media profielen of websites."],"block description\x04Display an icon linking to a social media profile or site.":["Toon een icoon dat linkt naar een sociaal media profiel of website."],"block description\x04Insert additional custom elements with a WordPress shortcode.":["Voeg extra aangepaste elementen in met een WordPress shortcode."],"block style label\x04Dots":["Stippen"],"block style label\x04Wide Line":["Brede lijn"],"block keyword\x04divider":["scheiding"],"block keyword\x04hr":["hr"],"block keyword\x04horizontal-line":["horizontale lijn"],"block description\x04Create a break between ideas or sections with a horizontal separator.":["Cre\xeber een onderbreking tussen idee\xebn of secties met een horizontaal scheidingsteken."],"block keyword\x04find":["vind"],"block description\x04Help visitors find your content.":["Help bezoekers je inhoud te vinden."],"block keyword\x04feed":["feed"],"block keyword\x04atom":["atom"],"block description\x04Display entries from any RSS or Atom feed.":["Geef items weer van elke RSS- of Atom-feed."],"block keyword\x04cite":["citeren"],"block keyword\x04blockquote":["blockquote"],"block description\x04Give special visual emphasis to a quote from your text.":["Geef speciale visuele nadruk aan een citaat uit je eigen tekst."],"block description\x04Add text that respects your spacing and tabs, and also allows styling.":["Voeg tekst toe dat je tussenruimte en tabs behoudt, en ook styling toestaat."],"block keyword\x04text":["tekst"],"block description\x04Start with the basic building block of all narrative.":["Begin met de basis bouwsteen van alle verhaallijnen."],"block keyword\x04pagination":["paginering"],"block keyword\x04next page":["volgende pagina"],"block description\x04Separate your content into a multi-page experience.":["Scheid je inhoud in een ervaring van meerdere pagina's."],"block keyword\x04read more":["lees meer"],"block description\x04Content before this block will be shown in the excerpt on your archives page.":["Inhoud voor dit blok wordt getoond in de samenvatting op je archiefpagina."],"block description\x04Your site doesn\u2019t include support for this block.":["Je website biedt geen ondersteuning voor dit blok."],"block keyword\x04video":["video"],"block keyword\x04image":["afbeelding"],"block description\x04Set media and words side-by-side for a richer layout.":["Zet media en woorden naast elkaar in voor een rijkere lay-out."],"block keyword\x04numbered list":["genummerde lijst"],"block keyword\x04ordered list":["geordende lijst"],"block keyword\x04bullet list":["ongeordende lijst"],"block description\x04Create a bulleted or numbered list.":["Maak een lijst met opsommingstekens of nummers."],"block keyword\x04recent posts":["recente berichten"],"block description\x04Display a list of your most recent posts.":["Toon een lijst van je meest recente berichten."],"block keyword\x04recent comments":["recente reacties"],"block description\x04Display a list of your most recent comments.":["Toon een lijst van je meest recente reacties."],"block style label\x04Rounded":["Afgerond"],"block style label\x04Default":["Standaard"],"block keyword\x04picture":["afbeelding"],"block keyword\x04photo":["foto"],"block keyword\x04img":["img"],"block description\x04Insert an image to make a visual statement.":["Voeg een afbeelding in om een visuele uitspraak te maken."],"block keyword\x04embed":["insluiten"],"block description\x04Add custom HTML code and preview it as you edit.":["Voeg aangepaste HTML code toe en bekijk een voorbeeld tijdens het bewerken."],"block keyword\x04subtitle":["subtitel"],"block keyword\x04title":["titel"],"block keyword\x04section":["sectie"],"block keyword\x04row":["rij"],"block keyword\x04wrapper":["wrapper"],"block keyword\x04container":["container"],"block keyword\x04photos":["foto's"],"block keyword\x04images":["afbeeldingen"],"block description\x04Display multiple images in a rich gallery.":["Toon meerdere afbeeldingen in een rijke galerij."],"block description\x04Use the classic WordPress editor.":["Gebruik de klassieke WordPress editor."],"block keyword\x04download":["download"],"block keyword\x04pdf":["pdf"],"block keyword\x04document":["document"],"block description\x04Add a link to a downloadable file.":["Link naar downloadbaar bestand invoegen."],"block description\x04Add an image or video with a text overlay \u2014 great for headers.":["Voeg een afbeelding of video toe met tekst eroverheen \u2014 geweldig voor headers."],"block description\x04A single column within a columns block.":["Een enkele kolom binnen een kolommenblok."],"block description\x04Display code snippets that respect your spacing and tabs.":["Toon stukjes code die je spati\xebring en tabs respecteren."],"block description\x04Display a list of all categories.":["Toon een lijst van alle categorie\xebn."],"block keyword\x04archive":["archief"],"block keyword\x04posts":["berichten"],"block description\x04A calendar of your site\u2019s posts.":["Een kalender met de berichten van je site."],"block description\x04Prompt visitors to take action with a group of button-style links.":["Vraag bezoekers actie te ondernemen met een groep van links in de stijl van een knop."],"block style label\x04Outline":["Omlijning"],"block style label\x04Fill":["Vullen"],"block description\x04Prompt visitors to take action with a button-style link.":["Vraag bezoekers om actie te ondernemen met een link in de stijl van een knop."],"block keyword\x04recording":["opnemen"],"block keyword\x04podcast":["podcast"],"block keyword\x04sound":["geluid"],"block keyword\x04music":["muziek"],"block description\x04Embed a simple audio player.":["Een simpele audiospeler insluiten."],"block description\x04Display a date archive of your posts.":["Toon een datum archief van je berichten."],"Points (pt)":["Punten (pt)"],"Picas (pc)":["Picas (pc)"],"Inches (in)":["Inches (in)"],"Millimeters (mm)":["Millimeters (mm)"],"Centimeters (cm)":["Centimeters (cm)"],"x-height of the font (ex)":["x-hoogte van het lettertype (ex)"],"Width of the zero (0) character (ch)":["Breedte van het nul (0) karakter (ch)"],"Viewport largest dimension (vmax)":["Viewport grootste afmeting (vmax)"],"Viewport smallest dimension (vmin)":["Viewport kleinste afmeting (vmin)"],"Percent (%)":["Percentage (%)"],Margin:["Margin"],"Customize the width for all elements that are assigned to the center or wide columns.":["Pas de breedte aan voor alle elementen die zijn toegewezen aan de middelste of brede kolommen."],Wide:["Breed"],"Widget types":["Widget types"],"Custom template created. You're in template mode now.":["Aangepaste template gemaakt. Je bent nu in de templatemodus."],"Embed of %s.":["Insluiting van %s."],"PDF embed":["PDF insluiting"],"Add citation":["Citatie toevoegen"],"Add quote":["Citaat toevoegen"],"Add caption":["Onderschrift toevoegen"],"Relative to root font size (rem)\x04rems":["rems"],"Relative to parent font size (em)\x04ems":["ems"],Border:["Rand"],"Your site does not have any posts, so there is nothing to display here at the moment.":["Je website heeft geen enkel bericht, er is op dit moment dus niets hier te tonen."],"Block cannot be rendered inside itself.":["Het blok kan niet binnen zichzelf weergegeven worden."],Indent:["Inspringing vergroten"],Outdent:["Inspringing verkleinen"],Ordered:["Gesorteerd"],Unordered:["Niet gesorteerd"],"Space between items":["Afstand tussen items"],"Add an anchor":["Voeg een anker toe"],Align:["Uitlijnen"],"block title\x04Social Icon":["Sociale iconen"],"block title\x04Social Icons":["Sociale iconen"],"block title\x04Tag Cloud":["Tagwolk"],"block title\x04Video":["Video"],"block title\x04Verse":["Vers"],"block title\x04Text Columns (deprecated)":["Tekstkolommen (verouderd)"],"block title\x04Table":["Tabel"],"block title\x04Spacer":["Vulelement"],"block title\x04Shortcode":["Shortcode"],"block title\x04Separator":["Scheidingsteken"],"block title\x04Group":["Groep"],"block title\x04Search":["Zoeken"],"block title\x04RSS":["RSS"],"block title\x04Reusable block":["Herbruikbaar blok"],"block title\x04Pullquote":["Pullquote"],"block title\x04Preformatted":["Voorgeformatteerd"],"block title\x04Page Break":["Pagina-einde"],"block title\x04More":["Meer"],"block title\x04Unsupported":["Niet ondersteund"],"block title\x04List":["Lijst"],"block title\x04Latest Posts":["Nieuwste berichten"],"block title\x04Latest Comments":["Nieuwste reacties"],"block title\x04Media & Text":["Media & tekst"],"block title\x04Custom HTML":["Aangepaste HTML"],"block title\x04File":["Bestand"],"block title\x04Cover":["Cover"],"block title\x04Column":["Kolom"],"block title\x04Columns":["Kolommen"],"block title\x04Code":["Code"],"block title\x04Calendar":["Kalender"],"block title\x04Buttons":["Knoppen"],"block title\x04Button":["Knop"],"block title\x04Audio":["Audio"],"block title\x04Archives":["Archieven"],"block title\x04Gallery":["Galerij"],"block title\x04Quote":["Citaat"],"block title\x04Heading":["Koptekst"],"block title\x04Image":["Afbeelding"],"block title\x04Paragraph":["Paragraaf"],"text direction\x04ltr":["ltr"],"Block vertical alignment setting\x04Align bottom":["Naar onder uitlijnen"],"Block vertical alignment setting\x04Align middle":["Naar het midden uitlijnen"],"Block vertical alignment setting\x04Align top":["Naar boven uitlijnen"],"Wood thrush singing in Central Park, NYC.":["Houtlijster zingt in Central Park, NYC."],"Write verse\u2026":["Schrijf een vers..."],"Verse text":["Vers tekst"],"Column %d text":["Kolom %d tekst"],"Table caption text":["Tabel onderschrift tekst"],"Footer cell text":["Footer celtekst"],"Body cell text":["Tekst in hoofdgedeelte"],"Header cell text":["Header celtekst"],"Pullquote citation text":["Pullquote citatietekst"],"Pullquote text":["Pullquote-tekst"],"Preformatted text":["Voorafgeformatteerde tekst"],"List text":["Lijsttekst"],Vertical:["Verticaal"],Horizontal:["Horizontaal"],"Heading text":["Koptekst tekst"],"Editing template. Changes made here affect all posts and pages that use the template.":["Template bewerken. Wijzigingen die hier worden aangebracht, zijn van invloed op alle berichten en pagina's die de template gebruiken."],"%1$s %2$s":["%1$s %2$s"],Themes:["Thema's"],"Viewport height (vh)":["Viewport hoogte (vh)"],"Viewport width (vw)":["Viewport breedte (vw)"],"Relative to root font size (rem)":["Vergeleken met de oorspronkelijke lettertype grootte (rem)"],"Relative to parent font size (em)":["Vergeleken met de hoofd lettertype grootte (em)"],"Pixels (px)":["Pixels (px)"],"Percentage (%)":["Percentage (%)"],"Button width":["Breedte knop"],"Remove blocks":["Verwijder blokken"],"Button inside":["Knop binnen"],"Button outside":["Knop buiten"],"No button":["Geen knop"],Radial:["Radiaal"],Linear:["Lineair"],"Add link to featured image":["Voeg een link toe aan de uitgelichte afbeelding"],"Find out more":["Meer te weten komen"],"Insert column after":["Kolom invoegen na"],"Insert column before":["Kolom invoegen voor"],"Insert row after":["Rij erna invoegen"],"Insert row before":["Rij ervoor invoegen"],"Contact us":["Contacteer ons"],Base:["Basis"],"Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.":["Gebruik de Tab-toets en de pijltjestoetsen om een nieuwe bloklocatie te kiezen. Gebruik de linker- en rechterpijltoetsen om tussen nestniveaus te schakelen. Zodra de locatie is geselecteerd, drukt je op Enter of de spatiebalk om het blok te verplaatsen."],Mixed:["Gemengd"],Right:["Rechts"],Left:["Links"],Bottom:["Onderaan"],Top:["Bovenaan"],"You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.":["Je bent momenteel in de navigatiemodus. Navigeer door blokken met de Tab-toets en de pijltoetsen. Gebruik de linker en rechter pijltoetsen om tussen nestniveaus te schakelen. Druk op Enter om de navigatiemodus te verlaten en het geselecteerde blok te bewerken."],Orientation:["Ori\xebntatie"],Design:["Ontwerp"],Text:["Tekst"],"Widget areas":["Widget gebieden"],"Number of tags":["Aantal tags"],White:["Wit"],Black:["Zwart"],"Browser default":["Browser standaard"],"%1$s Block. Row %2$d":["%1$s Blok. Rij %2$d"],Typography:["Typografie"],Content:["Inhoud"],"Menu Location":["Menu locatie"],Menu:["Menu"],"25 / 50 / 25":["25 / 50 / 25"],"33 / 33 / 33":["33 / 33 / 33"],"50 / 50":["50 / 50"],User:["Gebruiker"],"Post Type":["Berichttype"],Site:["Website"],"Media file":["Mediabestand"],"Change heading level":["Wijzig het koptekst niveau"],survey:["enqu\xeate"],social:["sociaal"],"Global Styles":["Globale stijlen"],"Social Icon":["Sociaal icoon"],"block keyword\x04links":["links"],"Display featured image":["Uitgelichte afbeelding weergeven"],"Featured image settings":["Aanbevolen afbeeldingsinstellingen"],"Embed a TikTok video.":["Een TikTok video insluiten."],Solid:["Solide"],Angle:["Hoek"],"%s Block":["%s blok"],"%1$s Block. %2$s":["%1$s Blok. %2$s"],"%1$s Block. Column %2$d":["%1$s Blok. Kolom %2$d"],"%1$s Block. Column %2$d. %3$s":["%1$s Blok. Kolom %2$d.%3$s"],"%1$s Block. Row %2$d. %3$s":["%1$s Blok. Rij %2$d.%3$s"],Theme:["Thema"],"Footer label":["Footer label"],"Header label":["Header label"],"Level %1$s. %2$s":["Niveau %1$s. %2$s"],"Level %s. Empty.":["Niveau %s. Leeg."],Empty:["Leeg"],"Link label":["Link label"],"Matt Mullenweg":["Matt Mullenweg"],"EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;":["EXT. XANADU - VAGE DAGERAAD - 1940 (MINIATUUR)\nEen raam, heel klein in de verte, verlicht.\nDaaromheen is een bijna volledig zwart scherm. Terwijl de camera langzaam naar het raam beweegt, dat bijna een postzegel in het beeld is, verschijnen andere vormen;"],"Suspendisse commodo neque lacus, a dictum orci interdum et.":["Suspendisse commodo neque lacus, a dictum orci interdum et."],"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.":["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis."],Background:["Achtergrond"],"Image size":["Afbeeldingsgrootte"],Replace:["Vervangen"],"You are currently in edit mode. To return to the navigation mode, press Escape.":["Je bent momenteel in de bewerkingsmodus. Druk op Escape om terug te keren naar de navigatiemodus."],"You are probably offline.":["Je bent waarschijnlijk offline."],"Justify items right":["Uitvullen items naar rechts"],"Justify items center":["Uitvullen items midden"],"Justify items left":["Uitvullen items naar links"],"Change items justification":["Verander uitlijning elementen"],"// A \u201cblock\u201d is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );":["// Een \"blok\" is een abstracte term die wordt gebruikt\n// om mark-up eenheden te beschrijven\n// die allemaal samen de inhoud of\n// de inhoud of lay-out van een pagina vormen.\nregisterBlockType( name, settings );"],"Add link":["Link toevoegen"],podcast:["podcast"],"WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river.":["Wat was hij aan het doen, de grote god Pan,\n\tbeneden in het riet bij de rivier?\nVerwoesting aan het zaaien en ban aan het verstrooien,\nplonzend en peddelend met de hoeven van een geit,\nEn de gouden lelies drijvend breken\n Met de drakenvlieg op de rivier."],"Menu Item":["Menu item"],"Generic label for block inserter button\x04Add block":["Blok toevoegen"],"Site Title":["Website titel"],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Media uploaden is mislukt. Als dit een afbeelding of een grote afbeelding is, verklein deze dan en probeer het opnieuw."],Midnight:["Middernacht"],"Electric grass":["Elektrisch gras"],"Pale ocean":["Bleke oceaan"],"Luminous dusk":["Lichtgevende schemering"],"Blush bordeaux":["Blozend bordeaux"],"Blush light purple":["Blozend lichtpaars"],"Cool to warm spectrum":["Koel tot warm spectrum"],"Very light gray to cyan bluish gray":["Zeer lichtgrijs tot cyaan blauwgrijs"],"Luminous vivid orange to vivid red":["Lichtgevend levendig oranje tot levendig rood"],"Luminous vivid amber to luminous vivid orange":["Lichtgevend levendig amber tot helder levendig oranje"],"Light green cyan to vivid green cyan":["Lichtgroen cyaan tot levendig groen cyaan"],"Vivid cyan blue to vivid purple":["Levendig cyaanblauw tot levendig paars"],"December 6, 2018":["6 december 2018"],"February 21, 2019":["21 februari 2019"],"May 7, 2019":["7 mei 2019"],"Release Date":["Publicatiedatum"],"Jazz Musician":["Jazz muzikant"],Version:["Versie"],"Six.":["Zes."],"Five.":["Vijf."],"Four.":["Vier."],"Three.":["Drie."],"Two.":["Twee."],"One.":["Een."],"One of the hardest things to do in technology is disrupt yourself.":["Een van de moeilijkste dingen die je in technologie kan doen, is jezelf ontwrichten."],"\u2014 Kobayashi Issa (\u4e00\u8336)":["\u2014 Kobayashi Issa (\u4e00\u8336)"],"The wren
Earns his living
Noiselessly.":["Het winterkoninkje
verdient zijn kostje
zonder benzine."],"Welcome to the wonderful world of blocks\u2026":["Welkom in de wondere wereld van blokken..."],Dimensions:["Dimensies"],"Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim.":["Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim."],"Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit.":["Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit."],"Call to Action":["Call to Action"],"In quoting others, we cite ourselves.":["Als we anderen citeren, citeren we onszelf."],"Mont Blanc appears\u2014still, snowy, and serene.":["De Mont Blanc lijkt stil, sneeuwachtig en sereen."],"In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.":["In een dorp van La Mancha, waarvan ik de naam niet wil herinneren, leefde niet lang geleden een van die heren die een lans in het lansrek, een oude beukelaar, een magere houwer en een windhond hielden voor coursing."],Add:["Toevoegen"],"Attachment page":["Bijlage pagina"],"Border radius":["Rand radius"],"Reverse list numbering":["Omgekeerde lijstnummering"],"Start value":["Startwaarde"],"Ordered list settings":["Instellingen voor geordende lijsten"],"Clear Media":["Media wissen"],"Change column alignment":["Wijzig uitlijning kolom"],"Align column right":["Kolom rechts uitlijnen"],"Align column center":["Kolom centreren"],"Align column left":["Kolom links uitlijnen"],Color:["Kleur"],"Vivid purple":["Helder paars"],Custom:["Aangepast"],"Learn more about anchors":["Lees meer over ankers"],"Enter a word or two \u2014 without spaces \u2014 to make a unique web address just for this block, called an \u201canchor.\u201d Then, you\u2019ll be able to link directly to this section of your page.":["Voer een of twee woorden in - zonder spaties - om een \u200b\u200buniek webadres te maken alleen voor dit blok, een zogenaamd 'anker'. Dan kun je rechtstreeks naar deze sectie van je pagina linken."],"Open in new tab":["Open in nieuw tabblad"],"Learn more about embeds":["Meer informatie over insluitingen"],"https://wordpress.org/support/article/embeds/":["https://wordpress.org/support/article/embeds/"],"Three columns; wide center column":["Drie kolommen; brede middenkolom"],"Three columns; equal split":["Drie kolommen; gelijke splitsing"],"Two columns; two-thirds, one-third split":["Twee kolommen; tweederde, eenderde split"],"Two columns; one-third, two-thirds split":["Twee kolommen; een derde, tweederde split"],"Two columns; equal split":["Twee kolommen; gelijke splitsing"],"Create Table":["Maak een tabel"],"Insert a table for sharing data.":["Voeg een tabel in om gegevens te delen."],"Block rendered as empty.":["Blok weergegeven als leeg."],"Footer section":["Footer sectie"],"Header section":["Header sectie"],"Sorting and filtering":["Sorteren en filteren"],"Post meta settings":["Bericht meta instellingen"],"Post content settings":["Bericht inhoud instellingen"],"Column settings":["Kolom instellingen"],"This color combination may be hard for people to read.":["Deze kleurencombinatie kan moeilijk te lezen zijn voor mensen."],Group:["Groep"],"Crop image to fill entire column":["Snijd de afbeelding bij om de hele kolom te vullen"],"Play inline":["Speel inline"],"Add a block":["Een blok toevoegen"],"Block vertical alignment setting label\x04Change vertical alignment":["Wijzig verticale uitlijning"],Taxonomy:["Taxonomie"],"- Select -":["- Selecteer -"],Default:["Standaard"],Search:["Zoeken"],"Optional placeholder\u2026":["Optionele plaatshouder..."],"Add label\u2026":["Label toevoegen..."],Calendar:["Kalender"],"block style\x04Default":["Standaard"],Back:["Terug"],"Max number of words in excerpt":["Max. aantal woorden in samenvatting"],"Display excerpt":["Toon samenvatting"],"Display date":["Toon datum"],"Display author":["Toon auteur"],"Edit RSS URL":["RSS URL bewerken"],"Embed Amazon Kindle content.":["Amazon Kindle inhoud insluiten."],ebook:["e-book"],"Embed Crowdsignal (formerly Polldaddy) content.":["Crowdsignal (voorheen Polldaddy) inhoud insluiten."],"Warning: the link has been inserted but may have errors. Please test it.":["Waarschuwing: de link is toegevoegd, maar kan fouten bevatten. Graag goed testen."],"%s block selected.":["%s blok geselecteerd.","%s blokken geselecteerd."],Thumbnail:["Thumbnail"],"Full Size":["Volledige grootte"],"Align text right":["Tekst rechts uitlijnen"],"Align text center":["Lijn het tekst centraal uit"],"Align text left":["Tekst links uitlijnen"],"Drag images, upload new ones or select files from your library.":["Sleep afbeeldingen, upload nieuwe of selecteer bestanden uit je bibliotheek."],"font size name\x04Huge":["Heel groot"],"font size name\x04Large":["Groot"],"font size name\x04Medium":["Medium"],"font size name\x04Small":["Klein"],"font size name\x04Normal":["Normaal"],"button label\x04Download":["Download"],"block title\x04Embed":["Insluiten"],"block title\x04Classic":["Klassiek"],"Link edited.":["Link bewerkt."],"Link removed.":["Link verwijderd."],Media:["Media"],"block description\x04Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\xe1zar":["Geef geciteerde tekst visuele nadruk. \"Door anderen te citeren, citeren we onszelf.\" \u2014 Julio Cort\xe1zar"],"block description\x04Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":["Introduceer nieuwe secties en organiseer je inhoud zo dat bezoekers (en zoekmachines) de structuur van je inhoud begrijpen."],"Resize for smaller devices":["Formaat wijzigen voor kleinere apparaten"],"This embed may not preserve its aspect ratio when the browser is resized.":["Deze insluiting behoudt mogelijk de beeldverhouding niet wanneer het formaat van de browser wordt gewijzigd."],"This embed will preserve its aspect ratio when the browser is resized.":["Deze insluiting behoudt de beeldverhouding wanneer het formaat van de browser wordt gewijzigd."],"Embed an Animoto video.":["Een Animoto video insluiten."],"Embed a Vimeo video.":["Een Vimeo video insluiten."],"Embed Flickr content.":["Flickr inhoud insluiten."],"Embed Spotify content.":["Spotify inhoud insluiten."],"Embed SoundCloud content.":["SoundCloud inhoud insluiten."],"Embed a WordPress post.":["Een WordPress bericht insluiten."],"Embed a WordPress.tv video.":["Een WordPress.tv video insluiten."],"Embed a VideoPress video.":["Een VideoPress video insluiten."],"Embed a Tumblr post.":["Een Tumblr bericht insluiten."],"Embed a TED video.":["Een TED video insluiten."],"Embed Speaker Deck content.":["Speaker Deck inhoud insluiten."],"Embed a YouTube video.":["Een YouTube video insluiten."],"Embed SmugMug content.":["SmugMug inhoud insluiten."],"Embed Slideshare content.":["Slideshare inhoud insluiten."],"Embed Scribd content.":["Scribd inhoud insluiten."],"Embed Screencast content.":["Screencast inhoud insluiten."],"Embed ReverbNation content.":["ReverbNation inhoud insluiten."],"Embed a Reddit thread.":["Een Reddit discussie insluiten."],"Embed Mixcloud content.":["Mixcloud inhoud insluiten."],"Embed a tweet.":["Een tweet insluiten."],"Embed Kickstarter content.":["Kickstarter inhoud insluiten."],"Embed Issuu content.":["Issuu inhoud insluiten."],"Embed Imgur content.":["Imgur inhoud insluiten."],"Embed a Dailymotion video.":["Een Dailymotion video insluiten."],"Embed CollegeHumor content.":["CollegeHumor inhoud insluiten."],"Embed Cloudup content.":["Cloudup inhoud insluiten."],"Insert from URL":["Invoegen vanaf URL"],Year:["Jaar"],Day:["Dag"],Month:["Maand"],"Media area":["Media gebied"],"Show media on right":["Toon media aan de rechterkant"],"Show media on left":["Laat media links zien"],Cover:["Cover"],HTML:["HTML"],"Write HTML\u2026":["HTML schrijven..."],"Media settings":["Media instellingen"],Overlay:["Overlay"],Backtick:["Accent grave"],Period:["Punt"],Comma:["Komma"],"Change alignment":["Wijzig uitlijning"],"Change text alignment":["Wijzig tekst uitlijning"],"Row count":["Aantal rijen"],"Column count":["Aantal kolommen"],"block description\x04Create and save content to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":["Maak inhoud en sla deze op om het over de hele website te kunnen gebruiken. Werk het blok bij en de wijzigingen worden overal toegepast."],"Code is Poetry":["Code is Poetry"],"Untitled Reusable block":["Naamloos herbruikbaar blok"],Reusable:["Herbruikbaar"],"The response is not a valid JSON response.":["De reactie is geen geldige JSON reactie."],Muted:["Gedempt"],"Display avatar":["Toon avatar"],"Number of comments":["Aantal reacties"],Auto:["Automatisch"],Preload:["Voorladen"],"Cyan bluish gray":["Cyaan blauwachtig grijs"],"Vivid cyan blue":["Levendig cyaan blauw"],"Pale cyan blue":["Bleek cyaan blauw"],"Vivid green cyan":["Levendig groen cyaan"],"Light green cyan":["Licht groen cyaan"],"Luminous vivid amber":["Lichtgevend levendig amber"],"Luminous vivid orange":["Lichtgevend levendig oranje"],"Vivid red":["Levendig rood"],"Pale pink":["Bleek roze"],"Show download button":["Toon downloadknop"],"Link to":["Link naar"],File:["Bestand"],Loop:["Lus"],Autoplay:["Automatisch spelen"],"Playback controls":["Afspeelknoppen"],"Replace image":["Vervang afbeelding"],"View the autosave":["Bekijk de autosave"],"There is an autosave of this post that is more recent than the version below.":["Er is een autosave van dit bericht dat recenter is dan onderstaande versie."],"Enter URL here\u2026":["Vul URL hier in..."],"Pin to toolbar":["Maak vast aan werkbalk"],"Unpin from toolbar":["Van werkbalk losmaken"],"Fixed width table cells":["Tabelcellen met een vaste breedte"],"block description\x04Add a block that displays content pulled from other sites, like Twitter or YouTube.":["Voeg een blok toe dat inhoud gehaald van andere websites toont, zoals Twitter of YouTube."],"Error loading block: %s":["Fout bij laden blok: %s"],"Close plugin":["Sluit plugin"],"Link settings":["Link instellingen"],"Page break":["Pagina-einde"],Height:["Hoogte"],Width:["Breedte"],"Thumbnails are not cropped.":["Thumbnails zijn niet bijgesneden."],"Thumbnails are cropped to align.":["Thumbnails zijn passend bijgesneden."],"Code editor selected":["Code editor geselecteerd"],"Visual editor selected":["Visuele editor geselecteerd"],Plugins:["Plugins"],"Trashing failed":["Verwijderen mislukt"],"Updating failed.":["Bijwerken mislukt."],"Scheduling failed.":["Inplannen mislukt."],"Publishing failed.":["Publiceren mislukt."],Embeds:["Insluitingen"],Blocks:["Blokken"],Undo:["Ongedaan maken"],Redo:["Opnieuw"],"Convert to regular blocks":["Converteer naar normale blokken"],"More options":["Meer opties"],Remove:["Verwijderen"],"Copied!":["Gekopieerd!"],Settings:["Instellingen"],Reset:["Reset"],"An unknown error occurred.":["Er is een onbekende fout opgetreden."],"No results.":["Geen resultaten."],"%d result found, use up and down arrow keys to navigate.":["%d resultaat gevonden, gebruik de omhoog en omlaag pijltjes toetsen om te navigeren.","%d resultaten gevonden, gebruik de omhoog en omlaag pijltjes toetsen om te navigeren."],"(no title)":["(geen titel)"],URL:["URL"],Close:["Sluiten"],"Edit link":["Link bewerken"],Link:["Link"],Strikethrough:["Doorhalen"],Italic:["Cursief"],Bold:["Vet"],"Remove link":["Link verwijderen"],"Number of items":["Aantal items"],All:["Alle"],Category:["Categorie"],"Z \u2192 A":["Z \u2192 A"],"A \u2192 Z":["A \u2192 Z"],"Oldest to newest":["Oudste naar nieuwste"],"Newest to oldest":["Nieuwste naar oudste"],"Order by":["Sorteren op"],Video:["Video"],"New Column":["Nieuwe kolom"],"Delete column":["Verwijder kolom"],"Delete row":["Verwijder rij"],"Edit table":["Bewerk tabel"],Table:["Tabel"],Shortcode:["Shortcode"],"Write preformatted text\u2026":["Schrijf voorgeformatteerde tekst..."],"Read more":["Verder lezen"],"Indent list item":["Verhoog inspringen lijst item"],"Outdent list item":["Verlaag inspringen lijst item"],"Convert to ordered list":["Omzetten naar geordende lijst"],"Convert to unordered list":["Omzetten naar ongeordende lijst"],List:["Lijst"],"Display post date":["Toon datum bericht"],"Grid view":["Raster weergave"],"List view":["Lijst weergave"],Size:["Grootte"],Image:["Afbeelding"],Preview:["Voorbeeld"],Heading:["Koptekst"],"Heading %d":["Koptekst %d"],"Heading settings":["Koptekst instellingen"],None:["Geen"],"Media File":["Mediabestand"],"Attachment Page":["Bijlagepagina"],"Crop images":["Afbeeldingen bijsnijden"],Gallery:["Galerij"],audio:["audio"],music:["muziek"],image:["afbeelding"],blog:["blog"],post:["bericht"],"Embedded content from %s":["Ingesloten inhoud van %s"],"Write title\u2026":["Schrijf titel..."],"Fixed background":["Vaste achtergrond"],"Edit image":["Afbeelding bewerken"],"%1$s (%2$s)":["%1$s (%2$s)"],Code:["Code"],"Write code\u2026":["Schrijf code\u2026"],Categories:["Categorie\xebn"],"Show hierarchy":["Toon hi\xebrarchie"],"Show post counts":["Toon aantal berichten"],"Display as dropdown":["Toon als dropdown"],"Add text\u2026":["Voeg tekst toe..."],Apply:["Toepassen"],"Text color":["Tekstkleur"],"Block has been deleted or is unavailable.":["Blok is verwijderd of is niet beschikbaar."],"Reusable blocks":["Herbruikbare blokken"],Cancel:["Annuleer"],Edit:["Bewerken"],"Use URL":["Gebruik URL"],Audio:["Geluidsfragment"],"HTML anchor":["HTML anker"],"Full width":["Volledige breedte"],"Wide width":["Grote breedte"],Widgets:["Widgets"],"Align right":["Rechts uitlijnen"],"Align center":["Centreren"],"Align left":["Links uitlijnen"],"Add title":["Titel toevoegen"],Comment:["Reactie"],Metadata:["Metadata"],"Select Category":["Selecteer categorie"],"(Untitled)":["(Zonder titel)"]}},1340,[]); +__d(function(e,t,n,o,i,a,l){i.exports={100:["100"],"Nested blocks will fill the width of this container. Toggle to constrain.":["Geneste blokken vullen de breedte van deze container. Aan-/uitzetten om te beperken."],"You are currently in zoom-out mode.":["Je bent momenteel in de uitgezoomde modus."],"The Queen of Hearts.":["De hartenkoningin."],"The Mad Hatter.":["De gekke hoedenmaker."],"The Cheshire Cat.":["De Cheshire kat."],"The White Rabbit.":["Het witte konijn."],"Alice.":["Alice."],"Gather blocks in a container.":["Verzamel blokken in een container."],"Inner blocks use content width":["Binnenste blokken gebruiken inhoud breedte"],Constrained:["Beperkt"],"Spacing Control":["Afstand besturing"],"Custom (%s)":["Aangepast (%s)"],"All sides":["Alle zijden"],"Show label":["Label tonen"],"Embed a podcast player from Pocket Casts.":["Een podcast speler van Pocket Casts insluiten."],"66 / 33":["66/33"],"33 / 66":["33/66"],"Nested blocks use content width with options for full and wide widths.":["Geneste blokken gebruiken inhoud breedte met opties voor volledige en brede breedte."],"Copy block":["Kopieer blok","Kopieer blokken"],"block title\x04Categories List":["Categorie\xebnlijst"],"Show empty categories":["Lege categorie\xebn tonen"],"block description\x04Gather blocks in a layout container.":["Verzamel blokken in een lay-out container."],"Link sides":["Kanten linken"],"Unlink sides":["Kanten ontlinken"],"Quote citation":["Citeer citaat"],"Arrange blocks vertically.":["Blokken verticaal schikken."],Stack:["Stack"],"Arrange blocks horizontally.":["Blokken horizontaal schikken."],Week:["Week"],"Group by:":["Groeperen per:"],"single horizontal line\x04Row":["Rij"],"Alignment option\x04None":["Geen"],"Vertical alignment":["Verticale uitlijning"],"Align items bottom":["Items onderaan uitlijnen"],"Align items center":["Items centraal uitlijnen"],"Align items top":["Items bovenaan uitlijnen"],Unwrap:["Ontstapelen"],"block description\x04Create a list item.":["Maak een lijst item."],"block title\x04List item":["Lijst item"],"View Preview":["Voorvertoning bekijken"],"Largest size":["Grootste grootte"],"Smallest size":["Kleinste grootte"],"%s link":["%s link"],"Preference activated - %s":["Voorkeur geactiveerd - %s"],"Preference deactivated - %s":["Voorkeur gedeactiveerd - %s"],"Draft saved.":["Concept opgeslagen."],"Set custom size":["Aangepaste grootte instellen"],"Use size preset":["Gebruik grootte voorinstelling"],"Indicates this palette is created by the user.\x04Custom":["Aangepast"],"Indicates this palette comes from the theme.\x04Custom":["Aangepast"],"Indicates this palette comes from WordPress.\x04Default":["Standaard"],"Indicates this palette comes from the theme.\x04Theme":["Thema"],"%s applied.":["%s toegepast."],"%s removed.":["%s verwijderd."],"Embed Wolfram notebook content.":["Wolfram notebook inhoud insluiten."],"Allow to wrap to multiple lines":["Toestaan om naar meerdere regels te splitsen"],"block style label\x04Plain":["Zonder opmaak"],"Embed Pinterest pins, boards, and profiles.":["Pinterest pins, borden en profielen insluiten."],bookmark:["bladwijzer"],"Show only top level categories":["Toon alleen top level categorie\xebn"],"https://wordpress.org/support/article/page-jumps/":["https://wordpress.org/support/article/page-jumps/"],Featured:["Uitgelicht"],Highlight:["Markeren"],"You do not have permission to create Pages.":["Je hebt geen toestemming om pagina's te maken."],"Block spacing":["Blokafstand"],"Max %s wide":["Max %s breed"],"block description\x04Display content in multiple columns, with blocks added to each column.":["Geef inhoud weer in meerdere kolommen, met blokken toegevoegd aan elke kolom."],"Minimum height":["Minimale hoogte"],"block description\x04Create structured content in rows and columns to display information.":["Maak gestructureerde inhoud in rijen en kolommen om informatie weer te geven."],"Preload value\x04None":["Geen"],"noun; Audio block parameter\x04Preload":["Preload"],"Media item link option\x04None":["Geen"],Justification:["Uitlijning"],"Loading options\u2026":["Opties aan het laden..."],"All gallery image sizes updated to: %s":["Alle galerij afbeelding grootten bijgewerkt naar: %s"],"All gallery images updated to not open in new tab":["Alle galerijafbeeldingen bijgewerkt zodat ze niet in een nieuwe tab openen"],"All gallery images updated to open in new tab":["Alle galerijafbeeldingen bijgewerkt om in nieuwe tab te openen"],"All gallery image links updated to: %s":["Alle links naar galerijafbeeldingen bijgewerkt naar: %s"],"If uploading to a gallery all files need to be image formats":["Als je uploadt naar een galerij moeten alle bestanden een afbeelding formaten hebben"],Flow:["Flow"],Flex:["Flex"],"Name of the file\x04Armstrong_Small_Step":["Armstrong_Small_Step"],"No published posts found.":["Geen gepubliceerde berichten gevonden."],"Autoplay may cause usability issues for some users.":["Autoplay kan mogelijks gebruiksproblemen veroorzaken voor sommige gebruikers."],Radius:["Radius"],"Link radii":["Verbind stralen"],"Unlink radii":["Ontkoppel stralen"],"Bottom right":["Rechtsonderaan"],"Bottom left":["Linksonderaan"],"Top right":["Rechtsbovenaan"],"Top left":["Linksbovenaan"],"block keyword\x04link":["link"],"block keyword\x04movie":["film"],"block description\x04Embed a video from your media library or upload a new one.":["Een video uit je mediabibliotheek insluiten of upload een nieuwe."],"block keyword\x04poem":["gedicht"],"block keyword\x04poetry":["po\xebzie"],"block description\x04Insert poetry. Use special spacing formats. Or quote song lyrics.":["Po\xebzie invoegen. Gebruik speciale afstandsformaten. Of citeer songteksten."],"block description\x04This block is deprecated. Please use the Columns block instead.":["Dit blok is verouderd. Gebruik in plaats hiervan het kolommenblok."],"block description\x04A cloud of your most used tags.":["Een wolk van de meest gebruikte tags."],"block style label\x04Stripes":["Strepen"],"block description\x04Add white space between blocks and customize its height.":["Voeg witruimte toe tussen blokken en pas de hoogte aan."],"block style label\x04Pill Shape":["Pilvorm"],"block style label\x04Logos Only":["Alleen logo's"],"block description\x04Display icons linking to your social media profiles or sites.":["Toon iconen die linken naar je social media profielen of websites."],"block description\x04Display an icon linking to a social media profile or site.":["Toon een icoon dat linkt naar een sociaal media profiel of website."],"block description\x04Insert additional custom elements with a WordPress shortcode.":["Voeg extra aangepaste elementen in met een WordPress shortcode."],"block style label\x04Dots":["Stippen"],"block style label\x04Wide Line":["Brede lijn"],"block keyword\x04divider":["scheiding"],"block keyword\x04hr":["hr"],"block keyword\x04horizontal-line":["horizontale lijn"],"block description\x04Create a break between ideas or sections with a horizontal separator.":["Cre\xeber een onderbreking tussen idee\xebn of secties met een horizontaal scheidingsteken."],"block keyword\x04find":["vind"],"block description\x04Help visitors find your content.":["Help bezoekers je inhoud te vinden."],"block keyword\x04feed":["feed"],"block keyword\x04atom":["atom"],"block description\x04Display entries from any RSS or Atom feed.":["Geef items weer van elke RSS- of Atom-feed."],"block keyword\x04cite":["citeren"],"block keyword\x04blockquote":["blockquote"],"block description\x04Give special visual emphasis to a quote from your text.":["Geef speciale visuele nadruk aan een citaat uit je eigen tekst."],"block description\x04Add text that respects your spacing and tabs, and also allows styling.":["Voeg tekst toe dat je tussenruimte en tabs behoudt, en ook styling toestaat."],"block keyword\x04text":["tekst"],"block description\x04Start with the basic building block of all narrative.":["Begin met de basis bouwsteen van alle verhaallijnen."],"block keyword\x04pagination":["paginering"],"block keyword\x04next page":["volgende pagina"],"block description\x04Separate your content into a multi-page experience.":["Scheid je inhoud in een ervaring van meerdere pagina's."],"block keyword\x04read more":["lees meer"],"block description\x04Content before this block will be shown in the excerpt on your archives page.":["Inhoud voor dit blok wordt getoond in de samenvatting op je archiefpagina."],"block description\x04Your site doesn\u2019t include support for this block.":["Je website biedt geen ondersteuning voor dit blok."],"block keyword\x04video":["video"],"block keyword\x04image":["afbeelding"],"block description\x04Set media and words side-by-side for a richer layout.":["Zet media en woorden naast elkaar in voor een rijkere lay-out."],"block keyword\x04numbered list":["genummerde lijst"],"block keyword\x04ordered list":["geordende lijst"],"block keyword\x04bullet list":["ongeordende lijst"],"block description\x04Create a bulleted or numbered list.":["Maak een lijst met opsommingstekens of nummers."],"block keyword\x04recent posts":["recente berichten"],"block description\x04Display a list of your most recent posts.":["Toon een lijst van je meest recente berichten."],"block keyword\x04recent comments":["recente reacties"],"block description\x04Display a list of your most recent comments.":["Toon een lijst van je meest recente reacties."],"block style label\x04Rounded":["Afgerond"],"block style label\x04Default":["Standaard"],"block keyword\x04picture":["afbeelding"],"block keyword\x04photo":["foto"],"block keyword\x04img":["img"],"block description\x04Insert an image to make a visual statement.":["Voeg een afbeelding in om een visuele uitspraak te maken."],"block keyword\x04embed":["insluiten"],"block description\x04Add custom HTML code and preview it as you edit.":["Voeg aangepaste HTML code toe en bekijk een voorbeeld tijdens het bewerken."],"block keyword\x04subtitle":["subtitel"],"block keyword\x04title":["titel"],"block keyword\x04section":["sectie"],"block keyword\x04row":["rij"],"block keyword\x04wrapper":["wrapper"],"block keyword\x04container":["container"],"block keyword\x04photos":["foto's"],"block keyword\x04images":["afbeeldingen"],"block description\x04Display multiple images in a rich gallery.":["Toon meerdere afbeeldingen in een rijke galerij."],"block description\x04Use the classic WordPress editor.":["Gebruik de klassieke WordPress editor."],"block keyword\x04download":["download"],"block keyword\x04pdf":["pdf"],"block keyword\x04document":["document"],"block description\x04Add a link to a downloadable file.":["Link naar downloadbaar bestand invoegen."],"block description\x04Add an image or video with a text overlay \u2014 great for headers.":["Voeg een afbeelding of video toe met tekst eroverheen \u2014 geweldig voor headers."],"block description\x04A single column within a columns block.":["Een enkele kolom binnen een kolommenblok."],"block description\x04Display code snippets that respect your spacing and tabs.":["Toon stukjes code die je spati\xebring en tabs respecteren."],"block description\x04Display a list of all categories.":["Toon een lijst van alle categorie\xebn."],"block keyword\x04archive":["archief"],"block keyword\x04posts":["berichten"],"block description\x04A calendar of your site\u2019s posts.":["Een kalender met de berichten van je site."],"block description\x04Prompt visitors to take action with a group of button-style links.":["Vraag bezoekers actie te ondernemen met een groep van links in de stijl van een knop."],"block style label\x04Outline":["Omlijning"],"block style label\x04Fill":["Vullen"],"block description\x04Prompt visitors to take action with a button-style link.":["Vraag bezoekers om actie te ondernemen met een link in de stijl van een knop."],"block keyword\x04recording":["opnemen"],"block keyword\x04podcast":["podcast"],"block keyword\x04sound":["geluid"],"block keyword\x04music":["muziek"],"block description\x04Embed a simple audio player.":["Een simpele audiospeler insluiten."],"block description\x04Display a date archive of your posts.":["Toon een datum archief van je berichten."],"Points (pt)":["Punten (pt)"],"Picas (pc)":["Picas (pc)"],"Inches (in)":["Inches (in)"],"Millimeters (mm)":["Millimeters (mm)"],"Centimeters (cm)":["Centimeters (cm)"],"x-height of the font (ex)":["x-hoogte van het lettertype (ex)"],"Width of the zero (0) character (ch)":["Breedte van het nul (0) karakter (ch)"],"Viewport largest dimension (vmax)":["Viewport grootste afmeting (vmax)"],"Viewport smallest dimension (vmin)":["Viewport kleinste afmeting (vmin)"],"Percent (%)":["Percentage (%)"],Margin:["Margin"],"Customize the width for all elements that are assigned to the center or wide columns.":["Pas de breedte aan voor alle elementen die zijn toegewezen aan de middelste of brede kolommen."],Wide:["Breed"],"Widget types":["Widget types"],"Custom template created. You're in template mode now.":["Aangepaste template gemaakt. Je bent nu in de templatemodus."],"Embed of %s.":["Insluiting van %s."],"PDF embed":["PDF insluiting"],"Add citation":["Citatie toevoegen"],"Add quote":["Citaat toevoegen"],"Add caption":["Onderschrift toevoegen"],"Relative to root font size (rem)\x04rems":["rems"],"Relative to parent font size (em)\x04ems":["ems"],Border:["Rand"],"Your site does not have any posts, so there is nothing to display here at the moment.":["Je website heeft geen enkel bericht, er is op dit moment dus niets hier te tonen."],"Block cannot be rendered inside itself.":["Het blok kan niet binnen zichzelf weergegeven worden."],Indent:["Inspringing vergroten"],Outdent:["Inspringing verkleinen"],Ordered:["Gesorteerd"],Unordered:["Niet gesorteerd"],"Space between items":["Afstand tussen items"],"Add an anchor":["Voeg een anker toe"],Align:["Uitlijnen"],"block title\x04Social Icon":["Sociale iconen"],"block title\x04Social Icons":["Sociale iconen"],"block title\x04Tag Cloud":["Tagwolk"],"block title\x04Video":["Video"],"block title\x04Verse":["Vers"],"block title\x04Text Columns (deprecated)":["Tekstkolommen (verouderd)"],"block title\x04Table":["Tabel"],"block title\x04Spacer":["Vulelement"],"block title\x04Shortcode":["Shortcode"],"block title\x04Separator":["Scheidingsteken"],"block title\x04Group":["Groep"],"block title\x04Search":["Zoeken"],"block title\x04RSS":["RSS"],"block title\x04Reusable block":["Herbruikbaar blok"],"block title\x04Pullquote":["Pullquote"],"block title\x04Preformatted":["Voorgeformatteerd"],"block title\x04Page Break":["Pagina-einde"],"block title\x04More":["Meer"],"block title\x04Unsupported":["Niet ondersteund"],"block title\x04List":["Lijst"],"block title\x04Latest Posts":["Nieuwste berichten"],"block title\x04Latest Comments":["Nieuwste reacties"],"block title\x04Media & Text":["Media & tekst"],"block title\x04Custom HTML":["Aangepaste HTML"],"block title\x04File":["Bestand"],"block title\x04Cover":["Cover"],"block title\x04Column":["Kolom"],"block title\x04Columns":["Kolommen"],"block title\x04Code":["Code"],"block title\x04Calendar":["Kalender"],"block title\x04Buttons":["Knoppen"],"block title\x04Button":["Knop"],"block title\x04Audio":["Audio"],"block title\x04Archives":["Archieven"],"block title\x04Gallery":["Galerij"],"block title\x04Quote":["Citaat"],"block title\x04Heading":["Koptekst"],"block title\x04Image":["Afbeelding"],"block title\x04Paragraph":["Paragraaf"],"text direction\x04ltr":["ltr"],"Block vertical alignment setting\x04Align bottom":["Naar onder uitlijnen"],"Block vertical alignment setting\x04Align middle":["Naar het midden uitlijnen"],"Block vertical alignment setting\x04Align top":["Naar boven uitlijnen"],"Wood thrush singing in Central Park, NYC.":["Houtlijster zingt in Central Park, NYC."],"Write verse\u2026":["Schrijf een vers..."],"Verse text":["Vers tekst"],"Column %d text":["Kolom %d tekst"],"Table caption text":["Tabel onderschrift tekst"],"Footer cell text":["Footer celtekst"],"Body cell text":["Tekst in hoofdgedeelte"],"Header cell text":["Header celtekst"],"Pullquote citation text":["Pullquote citatietekst"],"Pullquote text":["Pullquote-tekst"],"Preformatted text":["Voorafgeformatteerde tekst"],"List text":["Lijsttekst"],Vertical:["Verticaal"],Horizontal:["Horizontaal"],"Heading text":["Koptekst tekst"],"Editing template. Changes made here affect all posts and pages that use the template.":["Template bewerken. Wijzigingen die hier worden aangebracht, zijn van invloed op alle berichten en pagina's die de template gebruiken."],"%1$s %2$s":["%1$s %2$s"],Themes:["Thema's"],"Viewport height (vh)":["Viewport hoogte (vh)"],"Viewport width (vw)":["Viewport breedte (vw)"],"Relative to root font size (rem)":["Vergeleken met de oorspronkelijke lettertype grootte (rem)"],"Relative to parent font size (em)":["Vergeleken met de hoofd lettertype grootte (em)"],"Pixels (px)":["Pixels (px)"],"Percentage (%)":["Percentage (%)"],"Button width":["Breedte knop"],"Remove blocks":["Verwijder blokken"],"Button inside":["Knop binnen"],"Button outside":["Knop buiten"],"No button":["Geen knop"],Radial:["Radiaal"],Linear:["Lineair"],"Add link to featured image":["Voeg een link toe aan de uitgelichte afbeelding"],"Find out more":["Meer te weten komen"],"Insert column after":["Kolom invoegen na"],"Insert column before":["Kolom invoegen voor"],"Insert row after":["Rij erna invoegen"],"Insert row before":["Rij ervoor invoegen"],"Contact us":["Contacteer ons"],Base:["Basis"],"Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.":["Gebruik de Tab-toets en de pijltjestoetsen om een nieuwe bloklocatie te kiezen. Gebruik de linker- en rechterpijltoetsen om tussen nestniveaus te schakelen. Zodra de locatie is geselecteerd, drukt je op Enter of de spatiebalk om het blok te verplaatsen."],Mixed:["Gemengd"],Right:["Rechts"],Left:["Links"],Bottom:["Onderaan"],Top:["Bovenaan"],"You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.":["Je bent momenteel in de navigatiemodus. Navigeer door blokken met de Tab-toets en de pijltoetsen. Gebruik de linker en rechter pijltoetsen om tussen nestniveaus te schakelen. Druk op Enter om de navigatiemodus te verlaten en het geselecteerde blok te bewerken."],Orientation:["Ori\xebntatie"],Design:["Ontwerp"],Text:["Tekst"],"Widget areas":["Widget gebieden"],"Number of tags":["Aantal tags"],White:["Wit"],Black:["Zwart"],"Browser default":["Browser standaard"],"%1$s Block. Row %2$d":["%1$s Blok. Rij %2$d"],Typography:["Typografie"],Content:["Inhoud"],"Menu Location":["Menu locatie"],Menu:["Menu"],"25 / 50 / 25":["25 / 50 / 25"],"33 / 33 / 33":["33 / 33 / 33"],"50 / 50":["50 / 50"],User:["Gebruiker"],"Post Type":["Berichttype"],Site:["Website"],"Media file":["Mediabestand"],"Change heading level":["Wijzig het koptekst niveau"],survey:["enqu\xeate"],social:["sociaal"],"Global Styles":["Globale stijlen"],"Social Icon":["Sociaal icoon"],"block keyword\x04links":["links"],"Display featured image":["Uitgelichte afbeelding weergeven"],"Featured image settings":["Aanbevolen afbeeldingsinstellingen"],"Embed a TikTok video.":["Een TikTok video insluiten."],Solid:["Solide"],Angle:["Hoek"],"%s Block":["%s blok"],"%1$s Block. %2$s":["%1$s Blok. %2$s"],"%1$s Block. Column %2$d":["%1$s Blok. Kolom %2$d"],"%1$s Block. Column %2$d. %3$s":["%1$s Blok. Kolom %2$d.%3$s"],"%1$s Block. Row %2$d. %3$s":["%1$s Blok. Rij %2$d.%3$s"],Theme:["Thema"],"Footer label":["Footer label"],"Header label":["Header label"],"Level %1$s. %2$s":["Niveau %1$s. %2$s"],"Level %s. Empty.":["Niveau %s. Leeg."],Empty:["Leeg"],"Link label":["Link label"],"Matt Mullenweg":["Matt Mullenweg"],"EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;":["EXT. XANADU - VAGE DAGERAAD - 1940 (MINIATUUR)\nEen raam, heel klein in de verte, verlicht.\nDaaromheen is een bijna volledig zwart scherm. Terwijl de camera langzaam naar het raam beweegt, dat bijna een postzegel in het beeld is, verschijnen andere vormen;"],"Suspendisse commodo neque lacus, a dictum orci interdum et.":["Suspendisse commodo neque lacus, a dictum orci interdum et."],"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.":["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis."],Background:["Achtergrond"],"Image size":["Afbeeldingsgrootte"],Replace:["Vervangen"],"You are currently in edit mode. To return to the navigation mode, press Escape.":["Je bent momenteel in de bewerkingsmodus. Druk op Escape om terug te keren naar de navigatiemodus."],"You are probably offline.":["Je bent waarschijnlijk offline."],"Justify items right":["Uitvullen items naar rechts"],"Justify items center":["Uitvullen items midden"],"Justify items left":["Uitvullen items naar links"],"Change items justification":["Verander uitlijning elementen"],"// A \u201cblock\u201d is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );":["// Een \"blok\" is een abstracte term die wordt gebruikt\n// om mark-up eenheden te beschrijven\n// die allemaal samen de inhoud of\n// de inhoud of lay-out van een pagina vormen.\nregisterBlockType( name, settings );"],"Add link":["Link toevoegen"],podcast:["podcast"],"WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river.":["Wat was hij aan het doen, de grote god Pan,\n\tbeneden in het riet bij de rivier?\nVerwoesting aan het zaaien en ban aan het verstrooien,\nplonzend en peddelend met de hoeven van een geit,\nEn de gouden lelies drijvend breken\n Met de drakenvlieg op de rivier."],"Menu Item":["Menu-item"],"Generic label for block inserter button\x04Add block":["Blok toevoegen"],"Site Title":["Website titel"],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Media uploaden is mislukt. Als dit een afbeelding of een grote afbeelding is, verklein deze dan en probeer het opnieuw."],Midnight:["Middernacht"],"Electric grass":["Elektrisch gras"],"Pale ocean":["Bleke oceaan"],"Luminous dusk":["Lichtgevende schemering"],"Blush bordeaux":["Blozend bordeaux"],"Blush light purple":["Blozend lichtpaars"],"Cool to warm spectrum":["Koel tot warm spectrum"],"Very light gray to cyan bluish gray":["Zeer lichtgrijs tot cyaan blauwgrijs"],"Luminous vivid orange to vivid red":["Lichtgevend levendig oranje tot levendig rood"],"Luminous vivid amber to luminous vivid orange":["Lichtgevend levendig amber tot helder levendig oranje"],"Light green cyan to vivid green cyan":["Lichtgroen cyaan tot levendig groen cyaan"],"Vivid cyan blue to vivid purple":["Levendig cyaanblauw tot levendig paars"],"December 6, 2018":["6 december 2018"],"February 21, 2019":["21 februari 2019"],"May 7, 2019":["7 mei 2019"],"Release Date":["Publicatiedatum"],"Jazz Musician":["Jazz muzikant"],Version:["Versie"],"Six.":["Zes."],"Five.":["Vijf."],"Four.":["Vier."],"Three.":["Drie."],"Two.":["Twee."],"One.":["Een."],"One of the hardest things to do in technology is disrupt yourself.":["Een van de moeilijkste dingen die je in technologie kan doen, is jezelf ontwrichten."],"\u2014 Kobayashi Issa (\u4e00\u8336)":["\u2014 Kobayashi Issa (\u4e00\u8336)"],"The wren
Earns his living
Noiselessly.":["Het winterkoninkje
verdient zijn kostje
zonder benzine."],"Welcome to the wonderful world of blocks\u2026":["Welkom in de wondere wereld van blokken..."],Dimensions:["Dimensies"],"Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim.":["Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim."],"Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit.":["Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit."],"Call to Action":["Call to Action"],"In quoting others, we cite ourselves.":["Als we anderen citeren, citeren we onszelf."],"Mont Blanc appears\u2014still, snowy, and serene.":["De Mont Blanc lijkt stil, sneeuwachtig en sereen."],"In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.":["In een dorp van La Mancha, waarvan ik de naam niet wil herinneren, leefde niet lang geleden een van die heren die een lans in het lansrek, een oude beukelaar, een magere houwer en een windhond hielden voor coursing."],Add:["Toevoegen"],"Attachment page":["Bijlage pagina"],"Border radius":["Rand radius"],"Reverse list numbering":["Omgekeerde lijstnummering"],"Start value":["Startwaarde"],"Ordered list settings":["Instellingen voor geordende lijsten"],"Clear Media":["Media wissen"],"Change column alignment":["Wijzig uitlijning kolom"],"Align column right":["Kolom rechts uitlijnen"],"Align column center":["Kolom centreren"],"Align column left":["Kolom links uitlijnen"],Color:["Kleur"],"Vivid purple":["Helder paars"],Custom:["Aangepast"],"Learn more about anchors":["Lees meer over ankers"],"Enter a word or two \u2014 without spaces \u2014 to make a unique web address just for this block, called an \u201canchor.\u201d Then, you\u2019ll be able to link directly to this section of your page.":["Voer een of twee woorden in - zonder spaties - om een \u200b\u200buniek webadres te maken alleen voor dit blok, een zogenaamd 'anker'. Dan kun je rechtstreeks naar deze sectie van je pagina linken."],"Open in new tab":["Open in nieuw tabblad"],"Learn more about embeds":["Meer informatie over insluitingen"],"https://wordpress.org/support/article/embeds/":["https://wordpress.org/support/article/embeds/"],"Three columns; wide center column":["Drie kolommen; brede middenkolom"],"Three columns; equal split":["Drie kolommen; gelijke splitsing"],"Two columns; two-thirds, one-third split":["Twee kolommen; tweederde, eenderde split"],"Two columns; one-third, two-thirds split":["Twee kolommen; een derde, tweederde split"],"Two columns; equal split":["Twee kolommen; gelijke splitsing"],"Create Table":["Maak een tabel"],"Insert a table for sharing data.":["Voeg een tabel in om gegevens te delen."],"Block rendered as empty.":["Blok weergegeven als leeg."],"Footer section":["Footer sectie"],"Header section":["Header sectie"],"Sorting and filtering":["Sorteren en filteren"],"Post meta settings":["Bericht meta instellingen"],"Post content settings":["Bericht inhoud instellingen"],"Column settings":["Kolom instellingen"],"This color combination may be hard for people to read.":["Deze kleurencombinatie kan moeilijk te lezen zijn voor mensen."],Group:["Groep"],"Crop image to fill entire column":["Snijd de afbeelding bij om de hele kolom te vullen"],"Play inline":["Speel inline"],"Add a block":["Een blok toevoegen"],"Block vertical alignment setting label\x04Change vertical alignment":["Wijzig verticale uitlijning"],Taxonomy:["Taxonomie"],"- Select -":["- Selecteer -"],Default:["Standaard"],Search:["Zoeken"],"Optional placeholder\u2026":["Optionele plaatshouder..."],"Add label\u2026":["Label toevoegen..."],Calendar:["Kalender"],"block style\x04Default":["Standaard"],Back:["Terug"],"Max number of words in excerpt":["Max. aantal woorden in samenvatting"],"Display excerpt":["Toon samenvatting"],"Display date":["Toon datum"],"Display author":["Toon auteur"],"Edit RSS URL":["RSS URL bewerken"],"Embed Amazon Kindle content.":["Amazon Kindle inhoud insluiten."],ebook:["e-book"],"Embed Crowdsignal (formerly Polldaddy) content.":["Crowdsignal (voorheen Polldaddy) inhoud insluiten."],"Warning: the link has been inserted but may have errors. Please test it.":["Waarschuwing: de link is toegevoegd, maar kan fouten bevatten. Graag goed testen."],"%s block selected.":["%s blok geselecteerd.","%s blokken geselecteerd."],Thumbnail:["Thumbnail"],"Full Size":["Volledige grootte"],"Align text right":["Tekst rechts uitlijnen"],"Align text center":["Lijn het tekst centraal uit"],"Align text left":["Tekst links uitlijnen"],"Drag images, upload new ones or select files from your library.":["Sleep afbeeldingen, upload nieuwe of selecteer bestanden uit je bibliotheek."],"font size name\x04Huge":["Heel groot"],"font size name\x04Large":["Groot"],"font size name\x04Medium":["Medium"],"font size name\x04Small":["Klein"],"font size name\x04Normal":["Normaal"],"button label\x04Download":["Download"],"block title\x04Embed":["Insluiten"],"block title\x04Classic":["Klassiek"],"Link edited.":["Link bewerkt."],"Link removed.":["Link verwijderd."],Media:["Media"],"block description\x04Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\xe1zar":["Geef geciteerde tekst visuele nadruk. \"Door anderen te citeren, citeren we onszelf.\" \u2014 Julio Cort\xe1zar"],"block description\x04Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":["Introduceer nieuwe secties en organiseer je inhoud zo dat bezoekers (en zoekmachines) de structuur van je inhoud begrijpen."],"Resize for smaller devices":["Formaat wijzigen voor kleinere apparaten"],"This embed may not preserve its aspect ratio when the browser is resized.":["Deze insluiting behoudt mogelijk de beeldverhouding niet wanneer het formaat van de browser wordt gewijzigd."],"This embed will preserve its aspect ratio when the browser is resized.":["Deze insluiting behoudt de beeldverhouding wanneer het formaat van de browser wordt gewijzigd."],"Embed an Animoto video.":["Een Animoto video insluiten."],"Embed a Vimeo video.":["Een Vimeo video insluiten."],"Embed Flickr content.":["Flickr inhoud insluiten."],"Embed Spotify content.":["Spotify inhoud insluiten."],"Embed SoundCloud content.":["SoundCloud inhoud insluiten."],"Embed a WordPress post.":["Een WordPress bericht insluiten."],"Embed a WordPress.tv video.":["Een WordPress.tv video insluiten."],"Embed a VideoPress video.":["Een VideoPress video insluiten."],"Embed a Tumblr post.":["Een Tumblr bericht insluiten."],"Embed a TED video.":["Een TED video insluiten."],"Embed Speaker Deck content.":["Speaker Deck inhoud insluiten."],"Embed a YouTube video.":["Een YouTube video insluiten."],"Embed SmugMug content.":["SmugMug inhoud insluiten."],"Embed Slideshare content.":["Slideshare inhoud insluiten."],"Embed Scribd content.":["Scribd inhoud insluiten."],"Embed Screencast content.":["Screencast inhoud insluiten."],"Embed ReverbNation content.":["ReverbNation inhoud insluiten."],"Embed a Reddit thread.":["Een Reddit discussie insluiten."],"Embed Mixcloud content.":["Mixcloud inhoud insluiten."],"Embed a tweet.":["Een tweet insluiten."],"Embed Kickstarter content.":["Kickstarter inhoud insluiten."],"Embed Issuu content.":["Issuu inhoud insluiten."],"Embed Imgur content.":["Imgur inhoud insluiten."],"Embed a Dailymotion video.":["Een Dailymotion video insluiten."],"Embed CollegeHumor content.":["CollegeHumor inhoud insluiten."],"Embed Cloudup content.":["Cloudup inhoud insluiten."],"Insert from URL":["Invoegen vanaf URL"],Year:["Jaar"],Day:["Dag"],Month:["Maand"],"Media area":["Media gebied"],"Show media on right":["Toon media aan de rechterkant"],"Show media on left":["Laat media links zien"],Cover:["Cover"],HTML:["HTML"],"Write HTML\u2026":["HTML schrijven..."],"Media settings":["Media instellingen"],Overlay:["Overlay"],Backtick:["Accent grave"],Period:["Punt"],Comma:["Komma"],"Change alignment":["Wijzig uitlijning"],"Change text alignment":["Wijzig tekst uitlijning"],"Row count":["Aantal rijen"],"Column count":["Aantal kolommen"],"block description\x04Create and save content to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":["Maak inhoud en sla deze op om het over de hele website te kunnen gebruiken. Werk het blok bij en de wijzigingen worden overal toegepast."],"Code is Poetry":["Code is Poetry"],"Untitled Reusable block":["Naamloos herbruikbaar blok"],Reusable:["Herbruikbaar"],"The response is not a valid JSON response.":["De reactie is geen geldige JSON reactie."],Muted:["Gedempt"],"Display avatar":["Toon avatar"],"Number of comments":["Aantal reacties"],Auto:["Automatisch"],Preload:["Voorladen"],"Cyan bluish gray":["Cyaan blauwachtig grijs"],"Vivid cyan blue":["Levendig cyaan blauw"],"Pale cyan blue":["Bleek cyaan blauw"],"Vivid green cyan":["Levendig groen cyaan"],"Light green cyan":["Licht groen cyaan"],"Luminous vivid amber":["Lichtgevend levendig amber"],"Luminous vivid orange":["Lichtgevend levendig oranje"],"Vivid red":["Levendig rood"],"Pale pink":["Bleek roze"],"Show download button":["Toon downloadknop"],"Link to":["Link naar"],File:["Bestand"],Loop:["Lus"],Autoplay:["Automatisch spelen"],"Playback controls":["Afspeelknoppen"],"Replace image":["Vervang afbeelding"],"View the autosave":["Bekijk de autosave"],"There is an autosave of this post that is more recent than the version below.":["Er is een autosave van dit bericht dat recenter is dan onderstaande versie."],"Enter URL here\u2026":["Vul URL hier in..."],"Pin to toolbar":["Aan werkbalk vastmaken"],"Unpin from toolbar":["Van werkbalk losmaken"],"Fixed width table cells":["Tabelcellen met een vaste breedte"],"block description\x04Add a block that displays content pulled from other sites, like Twitter or YouTube.":["Voeg een blok toe dat inhoud gehaald van andere websites toont, zoals Twitter of YouTube."],"Error loading block: %s":["Fout bij laden blok: %s"],"Close plugin":["Sluit plugin"],"Link settings":["Link instellingen"],"Page break":["Pagina-einde"],Height:["Hoogte"],Width:["Breedte"],"Thumbnails are not cropped.":["Thumbnails zijn niet bijgesneden."],"Thumbnails are cropped to align.":["Thumbnails zijn passend bijgesneden."],"Code editor selected":["Code editor geselecteerd"],"Visual editor selected":["Visuele editor geselecteerd"],Plugins:["Plugins"],"Trashing failed":["Verwijderen mislukt"],"Updating failed.":["Bijwerken mislukt."],"Scheduling failed.":["Inplannen mislukt."],"Publishing failed.":["Publiceren mislukt."],Embeds:["Insluitingen"],Blocks:["Blokken"],Undo:["Ongedaan maken"],Redo:["Opnieuw"],"Convert to regular blocks":["Converteer naar normale blokken"],"More options":["Meer opties"],Remove:["Verwijderen"],"Copied!":["Gekopieerd!"],Settings:["Instellingen"],Reset:["Reset"],"An unknown error occurred.":["Er is een onbekende fout opgetreden."],"No results.":["Geen resultaten."],"%d result found, use up and down arrow keys to navigate.":["%d resultaat gevonden, gebruik de omhoog en omlaag pijltjes toetsen om te navigeren.","%d resultaten gevonden, gebruik de omhoog en omlaag pijltjes toetsen om te navigeren."],"(no title)":["(geen titel)"],URL:["URL"],Close:["Sluiten"],"Edit link":["Link bewerken"],Link:["Link"],Strikethrough:["Doorhalen"],Italic:["Cursief"],Bold:["Vet"],"Remove link":["Link verwijderen"],"Number of items":["Aantal items"],All:["Alle"],Category:["Categorie"],"Z \u2192 A":["Z \u2192 A"],"A \u2192 Z":["A \u2192 Z"],"Oldest to newest":["Oudste naar nieuwste"],"Newest to oldest":["Nieuwste naar oudste"],"Order by":["Sorteren op"],Video:["Video"],"New Column":["Nieuwe kolom"],"Delete column":["Verwijder kolom"],"Delete row":["Verwijder rij"],"Edit table":["Bewerk tabel"],Table:["Tabel"],Shortcode:["Shortcode"],"Write preformatted text\u2026":["Schrijf voorgeformatteerde tekst..."],"Read more":["Verder lezen"],"Indent list item":["Verhoog inspringen lijst item"],"Outdent list item":["Verlaag inspringen lijst item"],"Convert to ordered list":["Omzetten naar geordende lijst"],"Convert to unordered list":["Omzetten naar ongeordende lijst"],List:["Lijst"],"Display post date":["Toon datum bericht"],"Grid view":["Raster weergave"],"List view":["Lijst weergave"],Size:["Grootte"],Image:["Afbeelding"],Preview:["Voorbeeld"],Heading:["Koptekst"],"Heading %d":["Koptekst %d"],"Heading settings":["Koptekst instellingen"],None:["Geen"],"Media File":["Mediabestand"],"Attachment Page":["Bijlagepagina"],"Crop images":["Afbeeldingen bijsnijden"],Gallery:["Galerij"],audio:["audio"],music:["muziek"],image:["afbeelding"],blog:["blog"],post:["bericht"],"Embedded content from %s":["Ingesloten inhoud van %s"],"Write title\u2026":["Schrijf titel..."],"Fixed background":["Vaste achtergrond"],"Edit image":["Afbeelding bewerken"],"%1$s (%2$s)":["%1$s (%2$s)"],Code:["Code"],"Write code\u2026":["Schrijf code\u2026"],Categories:["Categorie\xebn"],"Show hierarchy":["Toon hi\xebrarchie"],"Show post counts":["Toon aantal berichten"],"Display as dropdown":["Toon als dropdown"],"Add text\u2026":["Voeg tekst toe..."],Apply:["Toepassen"],"Text color":["Tekstkleur"],"Block has been deleted or is unavailable.":["Blok is verwijderd of is niet beschikbaar."],"Reusable blocks":["Herbruikbare blokken"],Cancel:["Annuleer"],Edit:["Bewerken"],"Use URL":["Gebruik URL"],Audio:["Geluidsfragment"],"HTML anchor":["HTML anker"],"Full width":["Volledige breedte"],"Wide width":["Grote breedte"],Widgets:["Widgets"],"Align right":["Rechts uitlijnen"],"Align center":["Centreren"],"Align left":["Links uitlijnen"],"Add title":["Titel toevoegen"],Comment:["Reactie"],Metadata:["Metadata"],"Select Category":["Selecteer categorie"],"(Untitled)":["(Zonder titel)"]}},1340,[]); __d(function(e,o,i,a,t,n,r){t.exports={100:["100"],"Nested blocks will fill the width of this container. Toggle to constrain.":["Zagnie\u017cd\u017cone bloki wype\u0142ni\u0105 szeroko\u015b\u0107 kontener. Prze\u0142\u0105cz, aby ograniczy\u0107."],"You are currently in zoom-out mode.":["Aktualnie znajduje si\u0119 w trybie pomniejszenia."],"The Queen of Hearts.":["Kr\xf3lowa Kier."],"The Mad Hatter.":["Szalony Kapelusznik."],"The Cheshire Cat.":["Kot z Cheshire."],"The White Rabbit.":["Bia\u0142y Kr\xf3lik."],"Alice.":["Alicja."],"Gather blocks in a container.":["Zbierz bloki w konterze."],"Inner blocks use content width":["Bloki wewn\u0119trzne uwzgl\u0119dniaj\u0105 szeroko\u015b\u0107 tre\u015bci"],Constrained:["Wymuszona"],"Spacing Control":["Kontrola odst\u0119p\xf3w"],"Custom (%s)":["W\u0142asne (%s)"],"All sides":["Wszystkie strony"],"Show label":["Poka\u017c etykiet\u0119"],"Embed a podcast player from Pocket Casts.":["Osad\u017a odtwarzacz podcast\xf3w z Pocket Casts."],"66 / 33":["66 / 33"],"33 / 66":["33 / 66"],"Nested blocks use content width with options for full and wide widths.":["Zagnie\u017cd\u017cone bloki u\u017cywaj\u0105 szeroko\u015bci tre\u015bci motywu z opcjami pe\u0142nej oraz wi\u0119kszej szeroko\u015bci."],"Copy block":["Kopiuj blok"],"block title\x04Categories List":["Lista kategorii"],"Show empty categories":["Poka\u017c puste kategorie"],"block description\x04Gather blocks in a layout container.":["Zbierz bloki w kontenerze uk\u0142adu."],"Link sides":["Po\u0142\u0105cz brzegi"],"Unlink sides":["Roz\u0142\u0105cz brzegi"],"Quote citation":["Wprowad\u017a cytat"],"Arrange blocks vertically.":["U\u0142\xf3\u017c bloki pionowo."],Stack:["Stos"],"Arrange blocks horizontally.":["U\u0142\xf3\u017c bloki poziomo."],Week:["Tydzie\u0144"],"Group by:":["Grupuj:"],"single horizontal line\x04Row":["Wiersz"],"Alignment option\x04None":["Brak"],"Vertical alignment":["Wyr\xf3wnanie w pionie"],"Align items bottom":["Wyr\xf3wnaj elementy do do\u0142u"],"Align items center":["W\u015brodkuj elementy"],"Align items top":["Wyr\xf3wnaj elementy do g\xf3ry"],Unwrap:["Odwi\u0144"],"block description\x04Create a list item.":["Utw\xf3rz list\u0119 element\xf3w."],"block title\x04List item":["Element listy"],"View Preview":["Zobacz podgl\u0105d"],"Largest size":["Najwi\u0119kszy rozmiar"],"Smallest size":["Najmniejszy rozmiar"],"%s link":["odno\u015bnik %s"],"Preference activated - %s":["W\u0142\u0105czono opcje - %s"],"Preference deactivated - %s":["Wy\u0142\u0105czono opcje - %s"],"Draft saved.":["Szkic zosta\u0142 zapisany."],"Set custom size":["Ustaw niestandardowy rozmiar"],"Use size preset":["U\u017cyj wst\u0119pnie ustawionego rozmiaru"],"Indicates this palette is created by the user.\x04Custom":["W\u0142asne"],"Indicates this palette comes from the theme.\x04Custom":["W\u0142asne"],"Indicates this palette comes from WordPress.\x04Default":["Domy\u015blna"],"Indicates this palette comes from the theme.\x04Theme":["Motywu"],"%s applied.":["Zastosowano %s."],"%s removed.":["Usuni\u0119to: %s."],"Embed Wolfram notebook content.":["Osad\u017a zawarto\u015b\u0107 notatnika Wolfram."],"Allow to wrap to multiple lines":["Pozw\xf3l zawija\u0107 do wielu linii"],"block style label\x04Plain":["Prosty"],"Embed Pinterest pins, boards, and profiles.":["Osad\u017a piny, tablice i profile Pinteresta."],bookmark:["zak\u0142adka"],"Show only top level categories":["Poka\u017c tylko kategorie najwy\u017cszego poziomu"],"https://wordpress.org/support/article/page-jumps/":["https://wordpress.org/support/article/page-jumps/"],Featured:["Wyr\xf3\u017cnione"],Highlight:["Pod\u015bwietlenie"],"You do not have permission to create Pages.":["Brak uprawnie\u0144 do tworzenia stron."],"Block spacing":["Odst\u0119py mi\u0119dzy blokami"],"Max %s wide":["Maksymalna szeroko\u015b\u0107 %s"],"block description\x04Display content in multiple columns, with blocks added to each column.":["Wy\u015bwietlanie tre\u015bci w wielu kolumnach, z blokami dodanymi do ka\u017cdej kolumny."],"Minimum height":["Minimalna wysoko\u015b\u0107"],"block description\x04Create structured content in rows and columns to display information.":["Tw\xf3rz uporz\u0105dkowane tre\u015bci w wierszach i kolumnach, aby wy\u015bwietla\u0107 informacje."],"Preload value\x04None":["Brak"],"noun; Audio block parameter\x04Preload":["Wczytuj wst\u0119pnie"],"Media item link option\x04None":["Brak"],Justification:["Justowanie"],"Loading options\u2026":["\u0141adowanie opcji\u2026"],"All gallery image sizes updated to: %s":["Wszystkie rozmiary obrazk\xf3w w galerii zosta\u0142y zaktualizowane do: %s"],"All gallery images updated to not open in new tab":["Wszystkie obrazki z galerii zosta\u0142y zaktualizowane, aby nie otwiera\u0142y si\u0119 w nowej karcie"],"All gallery images updated to open in new tab":["Wszystkie obrazki z galerii zosta\u0142y zaktualizowane, aby otworzy\u0107 si\u0119 w nowej karcie"],"All gallery image links updated to: %s":["Wszystkie odno\u015bnik obrazk\xf3w w galerii zosta\u0142y zaktualizowane do: %s"],"If uploading to a gallery all files need to be image formats":["Wysy\u0142aj\u0105c elementy do galerii wszystkie pliki powinny by\u0107 obrazkami"],Flow:["Przep\u0142yw"],Flex:["Flex"],"Name of the file\x04Armstrong_Small_Step":["Armstrong_Small_Step"],"No published posts found.":["Nie znaleziono opublikowanych wpis\xf3w."],"Autoplay may cause usability issues for some users.":["Automatyczne odtwarzanie mo\u017ce powodowa\u0107 problemy z u\u017cyteczno\u015bci\u0105 dla niekt\xf3rych u\u017cytkownik\xf3w."],Radius:["Promie\u0144"],"Link radii":["Odno\u015bnik do Radii"],"Unlink radii":["Usu\u0144 odno\u015bnik do Radii"],"Bottom right":["Na dole po prawej"],"Bottom left":["Na dole po lewej"],"Top right":["Na g\xf3rze po prawej"],"Top left":["Na g\xf3rze po lewej"],"block keyword\x04link":["odno\u015bnik"],"block keyword\x04movie":["film"],"block description\x04Embed a video from your media library or upload a new one.":["Osad\u017a film z biblioteki medi\xf3w lub prze\u015blij nowy."],"block keyword\x04poem":["wiersz"],"block keyword\x04poetry":["poezja"],"block description\x04Insert poetry. Use special spacing formats. Or quote song lyrics.":["Wstaw poezj\u0119. U\u017cywaj specjalnych format\xf3w odst\u0119p\xf3w. Mo\u017cna r\xf3wnie\u017c cytowa\u0107 teksty piosenek."],"block description\x04This block is deprecated. Please use the Columns block instead.":["Ten blok jest przestarza\u0142y. Zamiast tego prosz\u0119 u\u017cy\u0107 bloku kolumn."],"block description\x04A cloud of your most used tags.":["Chmura najcz\u0119\u015bciej u\u017cywanych tag\xf3w."],"block style label\x04Stripes":["Paski"],"block description\x04Add white space between blocks and customize its height.":["Dodaj odst\u0119p mi\u0119dzy blokami i dostosuj ich wysoko\u015b\u0107."],"block style label\x04Pill Shape":["Owal"],"block style label\x04Logos Only":["Tylko logotypy"],"block description\x04Display icons linking to your social media profiles or sites.":["Wy\u015bwietl ikonki prowadz\u0105ce do profili medi\xf3w spo\u0142eczno\u015bciowych lub witryn."],"block description\x04Display an icon linking to a social media profile or site.":["Wy\u015bwietl ikonk\u0119 prowadz\u0105c\u0105 do profilu lub witryny spo\u0142eczno\u015bciowej."],"block description\x04Insert additional custom elements with a WordPress shortcode.":["Wstaw dodatkowe, w\u0142asne elementy za pomoc\u0105 shortcode'\xf3w WordPressa."],"block style label\x04Dots":["Kropki"],"block style label\x04Wide Line":["D\u0142uga linia"],"block keyword\x04divider":["blok oddzielaj\u0105cy"],"block keyword\x04hr":["hr"],"block keyword\x04horizontal-line":["linia pozioma"],"block description\x04Create a break between ideas or sections with a horizontal separator.":["Utw\xf3rz przerw\u0119 mi\u0119dzy pomys\u0142ami lub sekcjami za pomoc\u0105 poziomego separatora."],"block keyword\x04find":["szukaj"],"block description\x04Help visitors find your content.":["Pom\xf3\u017c odwiedzaj\u0105cym znale\u017a\u0107 tre\u015b\u0107."],"block keyword\x04feed":["kana\u0142"],"block keyword\x04atom":["atom"],"block description\x04Display entries from any RSS or Atom feed.":["Wy\u015bwietlaj tre\u015bci z dowolnych kana\u0142\xf3w RSS lub Atom."],"block keyword\x04cite":["cytat"],"block keyword\x04blockquote":["cytat blokowy"],"block description\x04Give special visual emphasis to a quote from your text.":["Nadaj szczeg\xf3lny wizualny akcent cytatowi z tekstu."],"block description\x04Add text that respects your spacing and tabs, and also allows styling.":["Dodaje tekst, kt\xf3ry uwzgl\u0119dnia odst\u0119py i tabulatory, a tak\u017ce pozwala na nadanie wygl\u0105du."],"block keyword\x04text":["tekst"],"block description\x04Start with the basic building block of all narrative.":["Prosz\u0119 zacz\u0105\u0107 od zbudowania prostego bloku wszystkich opowiada\u0144."],"block keyword\x04pagination":["stronicowanie"],"block keyword\x04next page":["nast\u0119pna strona"],"block description\x04Separate your content into a multi-page experience.":["Podziel tre\u015b\u0107 na podstrony."],"block keyword\x04read more":["czytaj dalej"],"block description\x04Content before this block will be shown in the excerpt on your archives page.":["Tre\u015b\u0107 znajduj\u0105ca si\u0119 przed tym blokiem zostanie pokazana jako zajawka na stronach archiwum."],"block description\x04Your site doesn\u2019t include support for this block.":["Witryna nie obs\u0142uguje wybranego bloku."],"block keyword\x04video":["film"],"block keyword\x04image":["obrazek"],"block description\x04Set media and words side-by-side for a richer layout.":["Ustaw media i tre\u015b\u0107 obok siebie, aby stworzy\u0107 lepszy uk\u0142ad."],"block keyword\x04numbered list":["lista numerowana"],"block keyword\x04ordered list":["lista uporz\u0105dkowana"],"block keyword\x04bullet list":["lista nienumerowana"],"block description\x04Create a bulleted or numbered list.":["Utw\xf3rz list\u0119 numerowan\u0105 lub nienumerowan\u0105."],"block keyword\x04recent posts":["najnowsze wpisy"],"block description\x04Display a list of your most recent posts.":["Wy\u015bwietl list\u0119 najnowszych wpis\xf3w."],"block keyword\x04recent comments":["ostatnie komentarze"],"block description\x04Display a list of your most recent comments.":["Poka\u017c list\u0119 twoich najnowszych komentarzy."],"block style label\x04Rounded":["Zaokr\u0105glone"],"block style label\x04Default":["Domy\u015blne"],"block keyword\x04picture":["obraz"],"block keyword\x04photo":["zdj\u0119cie"],"block keyword\x04img":["img"],"block description\x04Insert an image to make a visual statement.":["Wstaw obrazek, aby utworzy\u0107 przekaz wizualny."],"block keyword\x04embed":["osadzanie"],"block description\x04Add custom HTML code and preview it as you edit.":["Dodaj w\u0142asny kod HTML i podejrzyj go podczas edycji."],"block keyword\x04subtitle":["podtytu\u0142"],"block keyword\x04title":["tytu\u0142"],"block keyword\x04section":["sekcja"],"block keyword\x04row":["wiersz"],"block keyword\x04wrapper":["kontener"],"block keyword\x04container":["kontener"],"block keyword\x04photos":["zdj\u0119cia"],"block keyword\x04images":["obrazki"],"block description\x04Display multiple images in a rich gallery.":["Wy\u015bwietl wiele obrazk\xf3w w bogatej galerii."],"block description\x04Use the classic WordPress editor.":["U\u017cyj klasycznego edytora WordPress."],"block keyword\x04download":["pobierz"],"block keyword\x04pdf":["pdf"],"block keyword\x04document":["dokument"],"block description\x04Add a link to a downloadable file.":["Dodaj odno\u015bnik do pliku mo\u017cliwego do pobrania."],"block description\x04Add an image or video with a text overlay \u2014 great for headers.":["Dodaj obrazek lub wideo z nak\u0142adk\u0105 tekstow\u0105 \u2014 \u015bwietne do nag\u0142\xf3wk\xf3w."],"block description\x04A single column within a columns block.":["Pojedyncza kolumna w bloku kolumn."],"block description\x04Display code snippets that respect your spacing and tabs.":["Wy\u015bwietlaj fragmenty kodu, kt\xf3re uwzgl\u0119dniaj\u0105 odst\u0119py i tabulatory."],"block description\x04Display a list of all categories.":["Wy\u015bwietl list\u0119 wszystkich kategorii."],"block keyword\x04archive":["archiwum"],"block keyword\x04posts":["wpisy"],"block description\x04A calendar of your site\u2019s posts.":["Kalendarz wpis\xf3w"],"block description\x04Prompt visitors to take action with a group of button-style links.":["Zach\u0119\u0107 odwiedzaj\u0105cych do wykorzystania grupy odno\u015bnik\xf3w wy\u015bwietlanych jako przyciski."],"block style label\x04Outline":["Kontur"],"block style label\x04Fill":["Wype\u0142nienie"],"block description\x04Prompt visitors to take action with a button-style link.":["Zach\u0119\u0107 odwiedzaj\u0105cych do dzia\u0142ania przy pomocy odno\u015bnika w formie przycisku."],"block keyword\x04recording":["nagrywanie"],"block keyword\x04podcast":["podcast"],"block keyword\x04sound":["d\u017awi\u0119k"],"block keyword\x04music":["muzyka"],"block description\x04Embed a simple audio player.":["Osad\u017a prosty odtwarzacz audio."],"block description\x04Display a date archive of your posts.":["Wy\u015bwietl miesi\u0119czne archiwum twoich wpis\xf3w."],"Points (pt)":["Punkty (pt)"],"Picas (pc)":["Punkty (pc)"],"Inches (in)":["Cale (in)"],"Millimeters (mm)":["Milimetry (mm)"],"Centimeters (cm)":["Centymetry (cm)"],"x-height of the font (ex)":["x-height czcionki (ex)"],"Width of the zero (0) character (ch)":["Szeroko\u015b\u0107 znaku (ch) zero (0)"],"Viewport largest dimension (vmax)":["Najwi\u0119kszy wymiar widocznego obszaru (vmax)"],"Viewport smallest dimension (vmin)":["Najmniejszy wymiar widocznego obszaru (vmin)"],"Percent (%)":["Procentowo (%)"],Margin:["Margines"],"Customize the width for all elements that are assigned to the center or wide columns.":["Dostosuj szeroko\u015b\u0107 wszystkich elementu przypisanych do wycentrowanych lub szerokich kolumn."],Wide:["Szeroki"],"Widget types":["Typy wid\u017cet\xf3w"],"Custom template created. You're in template mode now.":["Utworzono w\u0142asny szablon. Pracujesz teraz w trybie szablon\xf3w."],"Embed of %s.":["Osadzone z %s."],"PDF embed":["Osadzony PDF"],"Add citation":["Dodaj cytat"],"Add quote":["Dodaj cytowanie"],"Add caption":["Dodaj podpis"],"Relative to root font size (rem)\x04rems":["remy"],"Relative to parent font size (em)\x04ems":["emy"],Border:["Obramowanie"],"Your site does not have any posts, so there is nothing to display here at the moment.":["Twoja witryna nie zawiera \u017cadnych wpis\xf3w, wi\u0119c w tej chwili nie ma tu nic do wy\u015bwietlenia."],"Block cannot be rendered inside itself.":["Blok nie mo\u017ce zosta\u0107 wygenerowany wewn\u0105trz samego siebie."],Indent:["Wci\u0119cie"],Outdent:["Zmniejsz wci\u0119cie"],Ordered:["Numerowana"],Unordered:["Nienumerowana"],"Space between items":["Przerwa mi\u0119dzy elementami"],"Add an anchor":["Dodaj kotwic\u0119"],Align:["Wyr\xf3wnanie"],"block title\x04Social Icon":["Ikona spo\u0142eczno\u015bciowa"],"block title\x04Social Icons":["Ikony medi\xf3w spo\u0142eczno\u015bciowych"],"block title\x04Tag Cloud":["Chmura tag\xf3w"],"block title\x04Video":["Film"],"block title\x04Verse":["Wiersz"],"block title\x04Text Columns (deprecated)":["Kolumny tekstowe (przestarza\u0142e)"],"block title\x04Table":["Tabela"],"block title\x04Spacer":["Odst\u0119p"],"block title\x04Shortcode":["Shortcode"],"block title\x04Separator":["Separator"],"block title\x04Group":["Grupa"],"block title\x04Search":["Wyszukiwanie"],"block title\x04RSS":["RSS"],"block title\x04Reusable block":["Blok wielokrotnego u\u017cycia"],"block title\x04Pullquote":["Cytat wyr\xf3\u017cniony"],"block title\x04Preformatted":["Wst\u0119pnie sformatowany"],"block title\x04Page Break":["Podzia\u0142 strony"],"block title\x04More":["Wi\u0119cej"],"block title\x04Unsupported":["Niewspierane"],"block title\x04List":["Lista"],"block title\x04Latest Posts":["Ostatnie wpisy"],"block title\x04Latest Comments":["Najnowsze komentarze"],"block title\x04Media & Text":["Media i tekst"],"block title\x04Custom HTML":["W\u0142asny HTML"],"block title\x04File":["Plik"],"block title\x04Cover":["Ok\u0142adka"],"block title\x04Column":["Kolumna"],"block title\x04Columns":["Kolumny"],"block title\x04Code":["Kod"],"block title\x04Calendar":["Kalendarz"],"block title\x04Buttons":["Przyciski"],"block title\x04Button":["Przycisk"],"block title\x04Audio":["Plik d\u017awi\u0119kowy"],"block title\x04Archives":["Archiwa"],"block title\x04Gallery":["Galeria"],"block title\x04Quote":["Cytat"],"block title\x04Heading":["Nag\u0142\xf3wek"],"block title\x04Image":["Obrazek"],"block title\x04Paragraph":["Akapit"],"text direction\x04ltr":["ltr"],"Block vertical alignment setting\x04Align bottom":["Wyr\xf3wnaj w pionie do do\u0142u"],"Block vertical alignment setting\x04Align middle":["Wyr\xf3wnaj w pionie po\u015brodku"],"Block vertical alignment setting\x04Align top":["Wyr\xf3wnaj w pionie do g\xf3ry"],"Wood thrush singing in Central Park, NYC.":["\u015apiewaj\u0105cy drozd w Central Parku, miasto Nowy York."],"Write verse\u2026":["Wprowad\u017a wiersz\u2026"],"Verse text":["Tre\u015b\u0107 wiersza"],"Column %d text":["Kolumna tekstowa %d"],"Table caption text":["Podpis tabeli"],"Footer cell text":["Tre\u015b\u0107 kom\xf3rki stopki"],"Body cell text":["Tre\u015b\u0107 kom\xf3rki"],"Header cell text":["Tre\u015b\u0107 kom\xf3rki nag\u0142\xf3wka"],"Pullquote citation text":["Podpis wtr\u0105cenia"],"Pullquote text":["Tre\u015b\u0107 wtr\u0105cenia"],"Preformatted text":["Tekst formatowany"],"List text":["Tre\u015b\u0107 listy"],Vertical:["Pionowo"],Horizontal:["Poziomy"],"Heading text":["Tekst nag\u0142\xf3wka"],"Editing template. Changes made here affect all posts and pages that use the template.":["Edytowanie szablonu. Zmiany dokonane tutaj, b\u0119d\u0105 mie\u0107 wp\u0142yw na wszystkie wpisy oraz strony, kt\xf3re korzystaj\u0105 z tego szablonu."],"%1$s %2$s":["%1$s %2$s"],Themes:["Motywy"],"Viewport height (vh)":["Wysoko\u015b\u0107 okna przegl\u0105darki (vh)"],"Viewport width (vw)":["Szeroko\u015b\u0107 okna przegl\u0105darki (vw)"],"Relative to root font size (rem)":["Zale\u017cny od bazowej wielko\u015bci liter (rem)"],"Relative to parent font size (em)":["Zale\u017cne od wielko\u015bci liter rodzica (em)"],"Pixels (px)":["Piksele (px)"],"Percentage (%)":["Procentowo (%)"],"Button width":["D\u0142ugo\u015b\u0107 przycisku"],"Remove blocks":["Usu\u0144 bloki"],"Button inside":["Przycisk wewn\u0105trz"],"Button outside":["Przycisk na zewn\u0105trz"],"No button":["Brak przycisku"],Radial:["Radialny"],Linear:["Liniowy"],"Add link to featured image":["Dodaj odno\u015bnik do obrazka wyr\xf3\u017cniaj\u0105cego"],"Find out more":["Dowiedz si\u0119 wi\u0119cej"],"Insert column after":["Wstaw kolumn\u0119 po"],"Insert column before":["Wstaw kolumn\u0119 przed"],"Insert row after":["Wstaw wiersz poni\u017cej"],"Insert row before":["Wstaw wiersz powy\u017cej"],"Contact us":["Skontaktuj si\u0119 z nami"],Base:["Podstawa"],"Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.":["Wybierz now\u0105 pozycj\u0119 bloku, u\u017cywaj\u0105c klawisza Tab oraz klawiszy strza\u0142ek. Lewa i prawa strza\u0142ka przesuwaj\u0105 pomi\u0119dzy zagnie\u017cd\u017conymi poziomami. Po wybieraniu pozycji, naci\u015bnij klawisz Enter lub Spacja, by przenie\u015b\u0107 blok."],Mixed:["Mieszany"],Right:["Do prawej"],Left:["Do lewej"],Bottom:["Na dole"],Top:["Na g\xf3rze"],"You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.":["To jest tryb przemieszczania. Przechod\u017a pomi\u0119dzy blokami, u\u017cywaj\u0105c klawisza Tab i klawiszy strza\u0142ek. Strza\u0142ki w lewo i w prawo przechodz\u0105 pomi\u0119dzy zagnie\u017cd\u017conymi poziomami. By opu\u015bci\u0107 ten tryb i edytowa\u0107 wybrany blok, naci\u015bnij Enter."],Orientation:["Orientacja"],Design:["Wygl\u0105d"],Text:["Tekst"],"Widget areas":["Obszary wid\u017cet\xf3w"],"Number of tags":["Liczba tag\xf3w"],White:["Bia\u0142y"],Black:["Czarny"],"Browser default":["Domy\u015blne ustawienie przegl\u0105darki"],"%1$s Block. Row %2$d":["Blok: %1$s. Wiersz: %2$d"],Typography:["Typografia"],Content:["Tre\u015b\u0107"],"Menu Location":["Po\u0142o\u017cenie menu"],Menu:["Menu"],"25 / 50 / 25":["25 / 50 / 25"],"33 / 33 / 33":["33 / 33 / 33"],"50 / 50":["50 / 50"],User:["U\u017cytkownik"],"Post Type":["Typ tre\u015bci"],Site:["Witryna"],"Media file":["Plik multimedialny"],"Change heading level":["Zmie\u0144 poziom nag\u0142\xf3wka"],survey:["ankieta"],social:["spo\u0142eczno\u015bciowe"],"Global Styles":["Style og\xf3lne"],"Social Icon":["Ikony medi\xf3w spo\u0142eczno\u015bciowych"],"block keyword\x04links":["odno\u015bniki"],"Display featured image":["Poka\u017c obrazek wyr\xf3\u017cniaj\u0105cy"],"Featured image settings":["Ustawienia obrazka wyr\xf3\u017cniaj\u0105cego"],"Embed a TikTok video.":["Osad\u017a film z TikToka."],Solid:["Jednolite"],Angle:["Uko\u015bny"],"%s Block":["Blok %s"],"%1$s Block. %2$s":["Blok %1$s. %2$s"],"%1$s Block. Column %2$d":["Blok %1$s. Kolumna %2$d"],"%1$s Block. Column %2$d. %3$s":["Blok %1$s. Kolumna %2$d. %3$s"],"%1$s Block. Row %2$d. %3$s":["Blok %1$s. Wiersz %2$d. %3$s"],Theme:["Motyw"],"Footer label":["Etykieta stopki"],"Header label":["Etykieta nag\u0142\xf3wka"],"Level %1$s. %2$s":["Poziom: %1$s. %2$s"],"Level %s. Empty.":["Poziom %s. Pusty."],Empty:["Pusty"],"Link label":["Etykieta odno\u015bnika"],"Matt Mullenweg":["Matt Mullenweg"],"EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;":["EXT. XANADU - FAINT DAWN - 1940 (MINIATURA)\nZnajduj\u0105ce si\u0119 do\u015b\u0107 daleko, ma\u0142e, pod\u015bwietlone okno.\nOtoczone czerni\u0105. Po tym jak kamera zaczyna si\u0119 wolno porusza\u0107 w stron\u0119 okna wielko\u015bci znaczka pocztowego, zaczynaj\u0105 pojawia\u0107 si\u0119 inne formy."],"Suspendisse commodo neque lacus, a dictum orci interdum et.":["Suspendisse commodo neque lacus, a dictum orci interdum et."],"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.":["Litwo! Ojczyzno moja! Ty jeste\u015b jak zdrowie. Za\u017c\xf3\u0142\u0107 g\u0119\u015bl\u0105 ja\u017a\u0144 biel\u0105 \u015bniegu."],Background:["T\u0142o"],"Image size":["Rozmiar obrazka"],Replace:["Zast\u0105p"],"You are currently in edit mode. To return to the navigation mode, press Escape.":["Jeste\u015b w trybie edycji. Aby wr\xf3ci\u0107 do trybu nawigacji, wci\u015bnij Escape."],"You are probably offline.":["Prawdopodobnie jeste\u015b offline."],"Justify items right":["Wyr\xf3wnaj elementy do prawej"],"Justify items center":["Wy\u015brodkuj elementy"],"Justify items left":["Wyr\xf3wnaj elementy do lewej"],"Change items justification":["Zmie\u0144 wyr\xf3wnanie tre\u015bci"],"// A \u201cblock\u201d is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );":["// \"Blok\" jest poj\u0119ciem abstrakcyjnym u\u017cywanym\n// do opisania zestawu markupu, kt\xf3ry\n// u\u017cyte razem formuj\u0105 tre\u015b\u0107, szablon lub stron\u0119.\nregisterBlockType( name, settings );"],"Add link":["Dodaj odno\u015bnik"],podcast:["podcast"],"WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river.":["Chcecie bajki? Oto baj\xadka:\n\tBy\u0142a so\xadbie Pch\u0142a Szachrajka.\nNie\xads\u0142y\xadcha\xadna rzecz po pro\xadstu,\nBy kto\u015b tak mar\xadne\xadgo wzro\xadstu\nI n\u0119dz\xadne\xadgo pchle\xadgo rodu\nM\xf3g\u0142 wy\xadczy\xadnia\u0107 bez po\xadwo\xaddu\nTa\xadkie pso\xadty i ga\u0142\xadga\u0144\xadstwa,\n\tJak pch\u0142a owa, pro\xadsz\u0119 pa\u0144\xadstwa."],"Menu Item":["Element menu"],"Generic label for block inserter button\x04Add block":["Dodaj blok"],"Site Title":["Nazwa witryny"],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Nie uda\u0142o si\u0119 przes\u0142anie multimedi\xf3w. Je\u015bli jest to zdj\u0119cie lub du\u017cy obrazek, prosz\u0119 je zmniejszy\u0107 i spr\xf3bowa\u0107 ponownie."],Midnight:["P\xf3\u0142noc"],"Electric grass":["Intensywnie zielony"],"Pale ocean":["Bladoturkusowy"],"Luminous dusk":["\u015awietlisty zmierzch"],"Blush bordeaux":["R\xf3\u017c bordowy"],"Blush light purple":["Rumiany jasnofioletowy"],"Cool to warm spectrum":["Spektrum od ch\u0142odnego do ciep\u0142ego"],"Very light gray to cyan bluish gray":["Od jasnoszarego do pastelowego szaroniebieskiego"],"Luminous vivid orange to vivid red":["Od \u017cywego pomara\u0144czowego do jaskrawej czerwieni"],"Luminous vivid amber to luminous vivid orange":["Od jasnego bursztynu do \u017cywego pomara\u0144czowego"],"Light green cyan to vivid green cyan":["Jasny zielononiebieski do wyrazistego zielononiebieskiego"],"Vivid cyan blue to vivid purple":["Jaskrawy turkus do jaskrawego fioletu"],"December 6, 2018":["6 grudnia 2018"],"February 21, 2019":["21 luty 2019"],"May 7, 2019":["7 maja 2019"],"Release Date":["Data wydania"],"Jazz Musician":["Muzyk jazzowy"],Version:["Wersja"],"Six.":["Sze\u015b\u0107."],"Five.":["Pi\u0119\u0107."],"Four.":["Cztery."],"Three.":["Trzy."],"Two.":["Dwa."],"One.":["Jeden."],"One of the hardest things to do in technology is disrupt yourself.":["Sporym problemem zaawansowanej technologii jest to, \u017ce ona mocno rozprasza."],"\u2014 Kobayashi Issa (\u4e00\u8336)":["\u2014 Kobayashi Issa (\u4e00\u8336)"],"The wren
Earns his living
Noiselessly.":["Strzy\u017cyk
Zarabia na \u017cycie
Bezg\u0142o\u015bnie."],"Welcome to the wonderful world of blocks\u2026":["Witamy w cudownym \u015bwiecie blok\xf3w\u2026"],Dimensions:["Wymiary"],"Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim.":["Ty jeste\u015b jak zdrowie. Ile ci\u0119 trzeba ceni\u0107, ten zaszczyt nale\u017cy. Id\u0105c z kim on znowu o nim trzy stogi u\u017c\u0105tku, co porabia\u0142?"],"Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit.":["Ka\u017cdy, gdzie panie\u0144skim rumie\u0144cem dzi\u0119cielina pa\u0142a a ubi\xf3r galowy. szeptali niejedni, \u017be nie m\xf3g\u0142 wyj\u015b\u0107 spotyka\u0107 w p\xf3\u0142 kroku Nigdy nie na to m\xf3wi\u0105c, \u017ce zbyt lubi\u0142 od p\u0142acz\u0105cej matki pod stra\u017c\u0105."],"Call to Action":["Wezwanie do dzia\u0142ania"],"In quoting others, we cite ourselves.":["Cytuj\u0105c innych, cytujemy samych siebie."],"Mont Blanc appears\u2014still, snowy, and serene.":["Pojawia si\u0119 Mont Blanc - nieruchomy, \u015bnie\u017cny i roz\u015bwietlony."],"In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.":["W mie\u015bcinie pewnej prowincji Manchy, kt\xf3rej nazwy nie powiem, \u017cy\u0142 niedawnymi czasy hidalgo pewien, z takich, co to pr\xf3cz spisy u siod\u0142a, szabliska starego, szkapy chudziny i paru ps\xf3w go\u0144czych, niewiele co wi\u0119cej maj\u0105. "],Add:["Dodaj"],"Attachment page":["Strona za\u0142\u0105cznika"],"Border radius":["Zaokr\u0105glenie obramowania"],"Reverse list numbering":["Odwrotna numeracja listy"],"Start value":["Warto\u015b\u0107 pocz\u0105tkowa"],"Ordered list settings":["Ustawienia listy numerowanej"],"Clear Media":["Wyczy\u015b\u0107 media"],"Change column alignment":["Zmie\u0144 wyr\xf3wnanie kolumny"],"Align column right":["Wyr\xf3wnaj kolumn\u0119 do prawej"],"Align column center":["Wy\u015brodkuj kolumn\u0119"],"Align column left":["Wyr\xf3wnaj kolumn\u0119 do lewej"],Color:["Kolor"],"Vivid purple":["Jaskrawy fiolet"],Custom:["W\u0142asne"],"Learn more about anchors":["Dowiedz si\u0119 wi\u0119cej o kotwicach"],"Enter a word or two \u2014 without spaces \u2014 to make a unique web address just for this block, called an \u201canchor.\u201d Then, you\u2019ll be able to link directly to this section of your page.":["Prosz\u0119 wpisa\u0107 s\u0142owo lub dwa - bez spacji - aby utworzy\u0107 unikatowy adres internetowy tylko dla tego nag\u0142\xf3wka, zwany \u201ekotwic\u0105\u201d. Nast\u0119pnie b\u0119dzie mo\u017cna utworzy\u0107 bezpo\u015bredni odno\u015bnik do wybranego miejsca strony."],"Open in new tab":["Otwieraj w nowej karcie"],"Learn more about embeds":["Dowiedz si\u0119 wi\u0119cej o osadzanych tre\u015bciach"],"https://wordpress.org/support/article/embeds/":["https://wordpress.org/support/article/embeds/"],"Three columns; wide center column":["Trzy kolumny - \u015brodkowa szersza"],"Three columns; equal split":["Trzy r\xf3wne kolumny"],"Two columns; two-thirds, one-third split":["Dwie kolumny - jedna dwa razy szersza"],"Two columns; one-third, two-thirds split":["Dwie kolumny; podzia\u0142 na jedn\u0105 trzeci\u0105 i dwie trzecie"],"Two columns; equal split":["Dwie r\xf3wne kolumny"],"Create Table":["Utw\xf3rz tabel\u0119"],"Insert a table for sharing data.":["Wstaw tabel\u0119 w celu udost\u0119pniania danych."],"Block rendered as empty.":["Blok wy\u015bwietlany jako pusty."],"Footer section":["Sekcja stopki"],"Header section":["Sekcja nag\u0142\xf3wka"],"Sorting and filtering":["Sortowanie i filtrowanie"],"Post meta settings":["Ustawienia metadanych wpisu"],"Post content settings":["Ustawienia tre\u015bci wpisu"],"Column settings":["Ustawienia kolumny"],"This color combination may be hard for people to read.":["Wybrana kombinacja kolor\xf3w mo\u017ce by\u0107 trudna do odczytania."],Group:["Grupa"],"Crop image to fill entire column":["Przytnij obrazek by wype\u0142ni\u0107 kolumn\u0119"],"Play inline":["Odtw\xf3rz w tre\u015bci"],"Add a block":["Dodaj blok"],"Block vertical alignment setting label\x04Change vertical alignment":["Zmie\u0144 po\u0142o\u017cenie w pionie"],Taxonomy:["Taksonomia"],"- Select -":["- Wybierz -"],Default:["Domy\u015blne"],Search:["Szukaj"],"Optional placeholder\u2026":["Opcjonalna podpowied\u017a..."],"Add label\u2026":["Dodaj etykiet\u0119..."],Calendar:["Kalendarz"],"block style\x04Default":["Domy\u015blny"],Back:["Powr\xf3t"],"Max number of words in excerpt":["Maksymalna liczba wyraz\xf3w w zajawce"],"Display excerpt":["Wy\u015bwietlaj zajawk\u0119"],"Display date":["Wy\u015bwietlaj dat\u0119"],"Display author":["Wy\u015bwietlaj autora"],"Edit RSS URL":["Edytuj adres URL kana\u0142u RSS"],"Embed Amazon Kindle content.":["Osad\u017a tre\u015b\u0107 Amazon Kindle."],ebook:["ebook"],"Embed Crowdsignal (formerly Polldaddy) content.":["Osadzona tre\u015b\u0107 Crowdsignal (dawniej Polldaddy)."],"Warning: the link has been inserted but may have errors. Please test it.":["Uwaga: odno\u015bnik zosta\u0142 wstawiony, ale mo\u017ce zawiera\u0107 b\u0142\u0119dy. Prosimy go wypr\xf3bowa\u0107."],"%s block selected.":["Wybrano %s blok."],Thumbnail:["Miniatura"],"Full Size":["Pe\u0142ny rozmiar"],"Align text right":["Wyr\xf3wnanie tekstu do prawej"],"Align text center":["Wy\u015brodkowanie tre\u015bci"],"Align text left":["Wyr\xf3wnanie tekstu do lewej"],"Drag images, upload new ones or select files from your library.":["Przeci\u0105gaj obrazki, przesy\u0142aj nowe lub wybierz je z biblioteki."],"font size name\x04Huge":["Olbrzymi"],"font size name\x04Large":["Du\u017cy"],"font size name\x04Medium":["\u015aredni"],"font size name\x04Small":["Ma\u0142y"],"font size name\x04Normal":["Normalne"],"button label\x04Download":["Pobierz"],"block title\x04Embed":["Osadzona tre\u015b\u0107"],"block title\x04Classic":["Klasyczny"],"Link edited.":["Odno\u015bnik by\u0142 edytowany."],"Link removed.":["Odno\u015bnik zosta\u0142 usuni\u0119ty."],Media:["Media"],"block description\x04Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\xe1zar":["Daj szczeg\xf3lny nacisk na zacytowany tekst. \u201eCytuj\u0105c innych, cytujemy samych siebie.\u201d \u2014 Julio Cort\xe1zar"],"block description\x04Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":["Wstaw nowe sekcje i uporz\u0105dkuj tre\u015b\u0107, aby pom\xf3c odwiedzaj\u0105cym (i wyszukiwarkom) zrozumie\u0107 jej struktur\u0119."],"Resize for smaller devices":["Zmie\u0144 rozmiar dla mniejszych urz\u0105dze\u0144"],"This embed may not preserve its aspect ratio when the browser is resized.":["Osadzenie mo\u017ce nie zachowa\u0107 proporcji po zmianie rozmiaru przegl\u0105darki."],"This embed will preserve its aspect ratio when the browser is resized.":["Osadzenie zachowa proporcji po zmianie rozmiaru przegl\u0105darki."],"Embed an Animoto video.":["Osad\u017a film z Animoto."],"Embed a Vimeo video.":["Osad\u017a film z Vimeo."],"Embed Flickr content.":["Osad\u017a tre\u015b\u0107 Flickr."],"Embed Spotify content.":["Osad\u017a zawarto\u015b\u0107 Spotify."],"Embed SoundCloud content.":["Osad\u017a tre\u015b\u0107 SoundCloud."],"Embed a WordPress post.":["Osadzony wpis WordPressa"],"Embed a WordPress.tv video.":["Osadzono film WordPress.tv"],"Embed a VideoPress video.":["Osadzono film VideoPress"],"Embed a Tumblr post.":["Osadzono wpis Tumblr."],"Embed a TED video.":["Osadzono film TED."],"Embed Speaker Deck content.":["Osadzono tre\u015b\u0107 Speaker Deck."],"Embed a YouTube video.":["Osad\u017a film z YouTube."],"Embed SmugMug content.":["Osadzono zawarto\u015b\u0107 SmugMug."],"Embed Slideshare content.":["Osad\u017a tre\u015b\u0107 pokazu slajd\xf3w Slideshare."],"Embed Scribd content.":["Osad\u017a zawarto\u015b\u0107 Scribd."],"Embed Screencast content.":["Osad\u017a tre\u015b\u0107 Screencast."],"Embed ReverbNation content.":["Osad\u017a tre\u015b\u0107 ReverbNation."],"Embed a Reddit thread.":["Osad\u017a w\u0105tek z Reddit."],"Embed Mixcloud content.":["Osad\u017a tre\u015b\u0107 Mixcloud."],"Embed a tweet.":["Osad\u017a tweet."],"Embed Kickstarter content.":["Osad\u017a tre\u015b\u0107 Kickstarter."],"Embed Issuu content.":["Osad\u017a tre\u015b\u0107 Issuu."],"Embed Imgur content.":["Osad\u017a zawarto\u015b\u0107 Imgur."],"Embed a Dailymotion video.":["Osad\u017a film Dailymotion."],"Embed CollegeHumor content.":["Osad\u017a tre\u015b\u0107 CollegeHumor."],"Embed Cloudup content.":["Osad\u017a tre\u015b\u0107 Cloudup."],"Insert from URL":["Dodaj adres URL"],Year:["Rok"],Day:["Dzie\u0144"],Month:["Miesi\u0105c"],"Media area":["Obszar medi\xf3w"],"Show media on right":["Poka\u017c media po prawej"],"Show media on left":["Poka\u017c media po lewej"],Cover:["Ok\u0142adka"],HTML:["HTML"],"Write HTML\u2026":["Wprowad\u017a HTML..."],"Media settings":["Ustawienia medi\xf3w"],Overlay:["Nak\u0142adka"],Backtick:["Odwr\xf3cony apostrof"],Period:["Okres"],Comma:["Przecinek"],"Change alignment":["Zmie\u0144 wyr\xf3wnanie"],"Change text alignment":["Zmie\u0144 wyr\xf3wnanie tekstu"],"Row count":["Liczba wierszy"],"Column count":["Liczba kolumn"],"block description\x04Create and save content to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":["Tw\xf3rz tre\u015bci i zapisuj je, aby m\xf3c je ponownie wykorzysta\u0107 w swojej witrynie. Zaktualizuj blok, a zmiany zostan\u0105 zastosowane wsz\u0119dzie tam, gdzie jest on u\u017cywany."],"Code is Poetry":["Kod to poezja"],"Untitled Reusable block":["Blok wielokrotnego u\u017cycia bez tytu\u0142u"],Reusable:["Wielokrotnego u\u017cycia"],"The response is not a valid JSON response.":["Odpowied\u017a nie jest prawid\u0142ow\u0105 odpowiedzi\u0105 JSON."],Muted:["Wyciszono"],"Display avatar":["Wy\u015bwietl awatara"],"Number of comments":["Liczba komentarzy"],Auto:["Automatycznie"],Preload:["Wczytuj wst\u0119pnie"],"Cyan bluish gray":["Szaro-niebieski cyjan"],"Vivid cyan blue":["Jaskrawy turkusowo-niebieski"],"Pale cyan blue":["Blady turkusowo-niebieski"],"Vivid green cyan":["Jaskrawy zielono-turkusowy"],"Light green cyan":["Jasny zielono-turkusowy"],"Luminous vivid amber":["\u015awiec\u0105cy \u017cywy bursztyn"],"Luminous vivid orange":["\u015awiec\u0105cy jaskrawo-pomara\u0144czowy"],"Vivid red":["Jaskrawoczerwony"],"Pale pink":["Blador\xf3\u017cowy"],"Show download button":["Poka\u017c przycisk pobierania"],"Link to":["Odno\u015bnik do"],File:["Plik"],Loop:["P\u0119tla"],Autoplay:["Automatyczne odtwarzanie"],"Playback controls":["Kontrolki sterowania"],"Replace image":["Zast\u0105p obrazek"],"View the autosave":["Zobacz automatycznie zapisan\u0105 wersj\u0119"],"There is an autosave of this post that is more recent than the version below.":["Istnieje automatyczny zapis wpisu, kt\xf3ry jest nowszy od wy\u015bwietlanej poni\u017cej wersji."],"Enter URL here\u2026":["Wprowad\u017a adres URL w tym miejscu..."],"Pin to toolbar":["Przypnij do paska narz\u0119dzi"],"Unpin from toolbar":["Odepnij od paska narz\u0119dzi"],"Fixed width table cells":["Jednakowa szeroko\u015b\u0107 kom\xf3rek"],"block description\x04Add a block that displays content pulled from other sites, like Twitter or YouTube.":["Dodaj blok wy\u015bwietlaj\u0105cy tre\u015b\u0107 pobran\u0105 z witryn takich jak Twitter lub YouTube."],"Error loading block: %s":["B\u0142\u0105d \u0142adowania bloku: %s"],"Close plugin":["Zamknij wtyczk\u0119"],"Link settings":["Ustawienia odno\u015bnika"],"Page break":["Znacznik nowej strony"],Height:["Wysoko\u015b\u0107"],Width:["Szeroko\u015b\u0107"],"Thumbnails are not cropped.":["Miniatury nie s\u0105 przycinane."],"Thumbnails are cropped to align.":["Miniatury s\u0105 przycinane w celu wyr\xf3wnania."],"Code editor selected":["Wybrano edytor kodu"],"Visual editor selected":["Wybrano edytor wizualny"],Plugins:["Wtyczki"],"Trashing failed":["Przenoszenie do kosza nie powiod\u0142o si\u0119"],"Updating failed.":["Nie powiod\u0142a si\u0119 aktualizacja."],"Scheduling failed.":["Nie powiod\u0142a si\u0119 zaplanowana publikacja."],"Publishing failed.":["Nie powiod\u0142a si\u0119 publikacja."],Embeds:["Osadzone tre\u015bci"],Blocks:["Bloki"],Undo:["Cofnij"],Redo:["Pon\xf3w"],"Convert to regular blocks":["Przekszta\u0142\u0107 na zwyk\u0142e bloki"],"More options":["Wi\u0119cej opcji"],Remove:["Usu\u0144"],"Copied!":["Skopiowano!"],Settings:["Ustawienia"],Reset:["Resetuj"],"An unknown error occurred.":["Wyst\u0105pi\u0142 nieznany b\u0142\u0105d."],"No results.":["Brak wynik\xf3w."],"%d result found, use up and down arrow keys to navigate.":["Znaleziono %d wynik, u\u017cyj strza\u0142ek do g\xf3ry i do do\u0142u aby nawigowa\u0107."],"(no title)":["(brak tytu\u0142u)"],URL:["Adres URL"],Close:["Zamknij"],"Edit link":["Edytuj odno\u015bnik"],Link:["Odno\u015bnik"],Strikethrough:["Przekre\u015blenie"],Italic:["Kursywa"],Bold:["P\xf3\u0142gruby"],"Remove link":["Usu\u0144 odno\u015bnik"],"Number of items":["Ilo\u015b\u0107 wy\u015bwietlanych element\xf3w"],All:["Wszystko"],Category:["Kategoria"],"Z \u2192 A":["Z \u2192 A"],"A \u2192 Z":["A \u2192 Z"],"Oldest to newest":["Od najstarszych do najnowszych"],"Newest to oldest":["Od najnowszych do najstarszych"],"Order by":["Kolejno\u015b\u0107 sortowania"],Video:["Film"],"New Column":["Nowa kolumna"],"Delete column":["Usu\u0144 kolumn\u0119"],"Delete row":["Usu\u0144 wiersz"],"Edit table":["Edytuj tabel\u0119"],Table:["Tabela"],Shortcode:["Shortcode"],"Write preformatted text\u2026":["Wprowad\u017a tekst sformatowany..."],"Read more":["Czytaj dalej"],"Indent list item":["Zwi\u0119ksz wci\u0119cie"],"Outdent list item":["Zmniejsz wci\u0119cie"],"Convert to ordered list":["Zmie\u0144 na numerowan\u0105 list\u0119"],"Convert to unordered list":["Zmie\u0144 na punktowan\u0105 list\u0119"],List:["Lista"],"Display post date":["Pokazuj dat\u0119 wpisu"],"Grid view":["Widok siatki"],"List view":["Widok listy"],Size:["Rozmiar"],Image:["Obrazek"],Preview:["Podgl\u0105d"],Heading:["Nag\u0142\xf3wek"],"Heading %d":["Nag\u0142\xf3wek %d"],"Heading settings":["Ustawienia nag\u0142\xf3wka"],None:["Brak"],"Media File":["Plik multimedialny"],"Attachment Page":["Strona za\u0142\u0105cznika"],"Crop images":["Kadruj obrazki"],Gallery:["Galeria"],audio:["plik d\u017awi\u0119kowy"],music:["muzyka"],image:["obrazek"],blog:["blog"],post:["wpis"],"Embedded content from %s":["Tre\u015b\u0107 osadzona z %s"],"Write title\u2026":["Wprowad\u017a tytu\u0142\u2026"],"Fixed background":["Nieruchome t\u0142o"],"Edit image":["Edytuj obrazek"],"%1$s (%2$s)":["%1$s (%2$s)"],Code:["Kod"],"Write code\u2026":["Wprowad\u017a kod..."],Categories:["Kategorie"],"Show hierarchy":["Poka\u017c hierarchi\u0119"],"Show post counts":["Pokazuj liczb\u0119 wpis\xf3w"],"Display as dropdown":["Wy\u015bwietl jako rozwijaln\u0105 list\u0119"],"Add text\u2026":["Dodaj tekst..."],Apply:["Zastosuj"],"Text color":["Kolor tekstu"],"Block has been deleted or is unavailable.":["Blok zosta\u0142 usuni\u0119ty lub jest niedost\u0119pny."],"Reusable blocks":["Bloki wielokrotnego u\u017cycia"],Cancel:["Anuluj"],Edit:["Edytuj"],"Use URL":["U\u017cyj adresu URL"],Audio:["Plik d\u017awi\u0119kowy"],"HTML anchor":["Kotwica HTML"],"Full width":["Pe\u0142na szeroko\u015b\u0107"],"Wide width":["Zwi\u0119kszona szeroko\u015b\u0107"],Widgets:["Wid\u017cety"],"Align right":["Wyr\xf3wnaj do prawej"],"Align center":["Wyr\xf3wnaj do \u015brodka"],"Align left":["Wyr\xf3wnaj do lewej"],"Add title":["Dodaj tytu\u0142"],Comment:["Komentarz"],Metadata:["Metadane"],"Select Category":["Wybierz kategori\u0119"],"(Untitled)":["(Bez nazwy)"]}},1341,[]); __d(function(e,o,a,t,i,r,s){i.exports={100:["100"],"Nested blocks will fill the width of this container. Toggle to constrain.":[],"You are currently in zoom-out mode.":[],"The Queen of Hearts.":[],"The Mad Hatter.":[],"The Cheshire Cat.":[],"The White Rabbit.":[],"Alice.":[],"Gather blocks in a container.":[],"Inner blocks use content width":[],Constrained:[],"Spacing Control":[],"Custom (%s)":[],"All sides":[],"Show label":[],"Embed a podcast player from Pocket Casts.":[],"66 / 33":[],"33 / 66":[],"Nested blocks use content width with options for full and wide widths.":[],"Copy block":[],"block title\x04Categories List":[],"Show empty categories":[],"block description\x04Gather blocks in a layout container.":[],"Link sides":[],"Unlink sides":[],"Quote citation":[],"Arrange blocks vertically.":[],Stack:[],"Arrange blocks horizontally.":[],Week:[],"Group by:":[],"single horizontal line\x04Row":[],"Alignment option\x04None":[],"Vertical alignment":[],"Align items bottom":[],"Align items center":[],"Align items top":[],Unwrap:[],"block description\x04Create a list item.":[],"block title\x04List item":[],"View Preview":[],"Largest size":[],"Smallest size":[],"%s link":[],"Preference activated - %s":[],"Preference deactivated - %s":[],"Draft saved.":[],"Set custom size":[],"Use size preset":[],"Indicates this palette is created by the user.\x04Custom":[],"Indicates this palette comes from the theme.\x04Custom":[],"Indicates this palette comes from WordPress.\x04Default":[],"Indicates this palette comes from the theme.\x04Theme":[],"%s applied.":[],"%s removed.":[],"Embed Wolfram notebook content.":[],"Allow to wrap to multiple lines":[],"block style label\x04Plain":[],"Embed Pinterest pins, boards, and profiles.":[],bookmark:[],"Show only top level categories":[],"https://wordpress.org/support/article/page-jumps/":[],Featured:[],Highlight:[],"You do not have permission to create Pages.":[],"Block spacing":[],"Max %s wide":[],"block description\x04Display content in multiple columns, with blocks added to each column.":[],"Minimum height":[],"block description\x04Create structured content in rows and columns to display information.":[],"Preload value\x04None":[],"noun; Audio block parameter\x04Preload":[],"Media item link option\x04None":[],Justification:[],"Loading options\u2026":[],"All gallery image sizes updated to: %s":[],"All gallery images updated to not open in new tab":[],"All gallery images updated to open in new tab":[],"All gallery image links updated to: %s":[],"If uploading to a gallery all files need to be image formats":[],Flow:[],Flex:[],"Name of the file\x04Armstrong_Small_Step":[],"No published posts found.":[],"Autoplay may cause usability issues for some users.":[],Radius:[],"Link radii":[],"Unlink radii":[],"Bottom right":[],"Bottom left":[],"Top right":[],"Top left":[],"block keyword\x04link":[],"block keyword\x04movie":[],"block description\x04Embed a video from your media library or upload a new one.":[],"block keyword\x04poem":[],"block keyword\x04poetry":[],"block description\x04Insert poetry. Use special spacing formats. Or quote song lyrics.":[],"block description\x04This block is deprecated. Please use the Columns block instead.":[],"block description\x04A cloud of your most used tags.":[],"block style label\x04Stripes":[],"block description\x04Add white space between blocks and customize its height.":[],"block style label\x04Pill Shape":[],"block style label\x04Logos Only":[],"block description\x04Display icons linking to your social media profiles or sites.":[],"block description\x04Display an icon linking to a social media profile or site.":[],"block description\x04Insert additional custom elements with a WordPress shortcode.":[],"block style label\x04Dots":[],"block style label\x04Wide Line":[],"block keyword\x04divider":[],"block keyword\x04hr":[],"block keyword\x04horizontal-line":[],"block description\x04Create a break between ideas or sections with a horizontal separator.":[],"block keyword\x04find":[],"block description\x04Help visitors find your content.":[],"block keyword\x04feed":[],"block keyword\x04atom":[],"block description\x04Display entries from any RSS or Atom feed.":[],"block keyword\x04cite":[],"block keyword\x04blockquote":[],"block description\x04Give special visual emphasis to a quote from your text.":[],"block description\x04Add text that respects your spacing and tabs, and also allows styling.":[],"block keyword\x04text":[],"block description\x04Start with the basic building block of all narrative.":[],"block keyword\x04pagination":[],"block keyword\x04next page":[],"block description\x04Separate your content into a multi-page experience.":[],"block keyword\x04read more":[],"block description\x04Content before this block will be shown in the excerpt on your archives page.":[],"block description\x04Your site doesn\u2019t include support for this block.":[],"block keyword\x04video":[],"block keyword\x04image":[],"block description\x04Set media and words side-by-side for a richer layout.":[],"block keyword\x04numbered list":[],"block keyword\x04ordered list":[],"block keyword\x04bullet list":[],"block description\x04Create a bulleted or numbered list.":[],"block keyword\x04recent posts":[],"block description\x04Display a list of your most recent posts.":[],"block keyword\x04recent comments":[],"block description\x04Display a list of your most recent comments.":[],"block style label\x04Rounded":[],"block style label\x04Default":[],"block keyword\x04picture":[],"block keyword\x04photo":[],"block keyword\x04img":[],"block description\x04Insert an image to make a visual statement.":[],"block keyword\x04embed":[],"block description\x04Add custom HTML code and preview it as you edit.":[],"block keyword\x04subtitle":[],"block keyword\x04title":[],"block keyword\x04section":[],"block keyword\x04row":[],"block keyword\x04wrapper":[],"block keyword\x04container":[],"block keyword\x04photos":[],"block keyword\x04images":[],"block description\x04Display multiple images in a rich gallery.":[],"block description\x04Use the classic WordPress editor.":[],"block keyword\x04download":[],"block keyword\x04pdf":[],"block keyword\x04document":[],"block description\x04Add a link to a downloadable file.":[],"block description\x04Add an image or video with a text overlay \u2014 great for headers.":[],"block description\x04A single column within a columns block.":[],"block description\x04Display code snippets that respect your spacing and tabs.":[],"block description\x04Display a list of all categories.":[],"block keyword\x04archive":[],"block keyword\x04posts":[],"block description\x04A calendar of your site\u2019s posts.":[],"block description\x04Prompt visitors to take action with a group of button-style links.":[],"block style label\x04Outline":[],"block style label\x04Fill":[],"block description\x04Prompt visitors to take action with a button-style link.":[],"block keyword\x04recording":[],"block keyword\x04podcast":[],"block keyword\x04sound":[],"block keyword\x04music":[],"block description\x04Embed a simple audio player.":[],"block description\x04Display a date archive of your posts.":[],"Points (pt)":[],"Picas (pc)":[],"Inches (in)":[],"Millimeters (mm)":[],"Centimeters (cm)":[],"x-height of the font (ex)":[],"Width of the zero (0) character (ch)":[],"Viewport largest dimension (vmax)":[],"Viewport smallest dimension (vmin)":[],"Percent (%)":[],Margin:[],"Customize the width for all elements that are assigned to the center or wide columns.":[],Wide:[],"Widget types":[],"Custom template created. You're in template mode now.":[],"Embed of %s.":[],"PDF embed":[],"Add citation":[],"Add quote":[],"Add caption":[],"Relative to root font size (rem)\x04rems":[],"Relative to parent font size (em)\x04ems":[],Border:[],"Your site does not have any posts, so there is nothing to display here at the moment.":[],"Block cannot be rendered inside itself.":[],Indent:[],Outdent:[],Ordered:[],Unordered:[],"Space between items":[],"Add an anchor":[],Align:[],"block title\x04Social Icon":[],"block title\x04Social Icons":[],"block title\x04Tag Cloud":[],"block title\x04Video":[],"block title\x04Verse":[],"block title\x04Text Columns (deprecated)":[],"block title\x04Table":[],"block title\x04Spacer":[],"block title\x04Shortcode":[],"block title\x04Separator":[],"block title\x04Group":[],"block title\x04Search":[],"block title\x04RSS":[],"block title\x04Reusable block":[],"block title\x04Pullquote":[],"block title\x04Preformatted":[],"block title\x04Page Break":[],"block title\x04More":[],"block title\x04Unsupported":[],"block title\x04List":[],"block title\x04Latest Posts":[],"block title\x04Latest Comments":[],"block title\x04Media & Text":[],"block title\x04Custom HTML":[],"block title\x04File":[],"block title\x04Cover":[],"block title\x04Column":[],"block title\x04Columns":[],"block title\x04Code":[],"block title\x04Calendar":[],"block title\x04Buttons":[],"block title\x04Button":[],"block title\x04Audio":[],"block title\x04Archives":[],"block title\x04Gallery":[],"block title\x04Quote":[],"block title\x04Heading":[],"block title\x04Image":[],"block title\x04Paragraph":[],"text direction\x04ltr":["ltr"],"Block vertical alignment setting\x04Align bottom":[],"Block vertical alignment setting\x04Align middle":[],"Block vertical alignment setting\x04Align top":[],"Wood thrush singing in Central Park, NYC.":[],"Write verse\u2026":[],"Verse text":[],"Column %d text":[],"Table caption text":[],"Footer cell text":[],"Body cell text":[],"Header cell text":[],"Pullquote citation text":[],"Pullquote text":[],"Preformatted text":[],"List text":[],Vertical:[],Horizontal:[],"Heading text":[],"Editing template. Changes made here affect all posts and pages that use the template.":[],"%1$s %2$s":["%1$s %2$s"],Themes:["Temas"],"Viewport height (vh)":[],"Viewport width (vw)":[],"Relative to root font size (rem)":[],"Relative to parent font size (em)":[],"Pixels (px)":[],"Percentage (%)":[],"Button width":[],"Remove blocks":["Remover blocos"],"Button inside":[],"Button outside":[],"No button":[],Radial:["Radial"],Linear:["Linear"],"Add link to featured image":["Adicionar liga\xe7\xe3o para imagem de destaque"],"Find out more":["Saiba mais"],"Insert column after":["Inserir coluna depois"],"Insert column before":["Inserir coluna antes"],"Insert row after":["Inserir linha depois"],"Insert row before":["Inserir linha antes"],"Contact us":["Contacte-nos"],Base:["Base"],"Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.":["Utilize a tecla Tab e as teclas das setas para escolher um novo local para o bloco. Utilize as setas para a esquerda e direita para mover entre n\xedveis. Uma vez escolhido o local, prima a tecla Enter ou Espa\xe7o para mover o bloco."],Mixed:["Misto"],Right:["Direita"],Left:["Esquerda"],Bottom:["Fundo"],Top:["Topo"],"You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.":["Est\xe1 no modo de navega\xe7\xe3o. Navegue pelos blocos atrav\xe9s da tecla Tab e das teclas das setas. Utilize as setas para a esquerda e direita para mover entre n\xedveis. Para sair do modo de navega\xe7\xe3o e editar o bloco seleccionado, prima a tecla Enter."],Orientation:[],Design:["Design"],Text:["Texto"],"Widget areas":["\xc1reas de widgets"],"Number of tags":[],White:["Branco"],Black:["Preto"],"Browser default":["Defini\xe7\xe3o do navegador"],"%1$s Block. Row %2$d":["Bloco de %1$s. Linha %2$d"],Typography:["Tipografia"],Content:["Conte\xfado"],"Menu Location":["Localiza\xe7\xe3o do menu"],Menu:["Menu"],"25 / 50 / 25":["25 / 50 / 25"],"33 / 33 / 33":["33 / 33 / 33"],"50 / 50":["50 / 50"],User:["Utilizador"],"Post Type":["Tipo de conte\xfado"],Site:["Site"],"Media file":["Ficheiro multim\xe9dia"],"Change heading level":["Alterar n\xedvel do t\xedtulo"],survey:["pesquisa"],social:["redes sociais"],"Global Styles":["Estilos globais"],"Social Icon":["Rede social"],"block keyword\x04links":[],"Display featured image":["Mostrar imagem de destaque"],"Featured image settings":["Op\xe7\xf5es da imagem de destaque"],"Embed a TikTok video.":["Incorporar um v\xeddeo do TikTok."],Solid:["S\xf3lido"],Angle:["\xc2ngulo"],"%s Block":["Bloco %s"],"%1$s Block. %2$s":["Bloco %1$s. %2$s"],"%1$s Block. Column %2$d":["Bloco de %1$s. Coluna %2$d"],"%1$s Block. Column %2$d. %3$s":["Bloco de %1$s. Coluna %2$d. %3$s"],"%1$s Block. Row %2$d. %3$s":["Bloco de %1$s. Linha %2$d. %3$s"],Theme:["Tema"],"Footer label":["Legenda do rodap\xe9"],"Header label":["Legenda do cabe\xe7alho"],"Level %1$s. %2$s":["N\xedvel %1$s. %2$s"],"Level %s. Empty.":["N\xedvel %s. Vazio."],Empty:["Vazia"],"Link label":["Legenda da liga\xe7\xe3o"],"Matt Mullenweg":["Matt Mullenweg"],"EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;":["EXT. XANADU - FAINT DAWN - 1940 (MINIATURA)\nJanela, muito pequena vista \xe0 dist\xe2ncia, iluminada.\nAo redor h\xe1 um ecr\xe3 quase totalmente negro. Agora, \xe0 medida que a c\xe2mara se move devagar em direc\xe7\xe3o \xe0 janela, que mais parece um selo de correios no quadro, surgem outras formas;"],"Suspendisse commodo neque lacus, a dictum orci interdum et.":["Suspendisse commodo neque lacus, a dictum orci interdum et."],"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.":["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis."],Background:[],"Image size":["Tamanho da imagem"],Replace:["Substituir"],"You are currently in edit mode. To return to the navigation mode, press Escape.":["De momento est\xe1 em modo de edi\xe7\xe3o. Para voltar ao modo de navega\xe7\xe3o, prima Escape."],"You are probably offline.":["Provavelmente est\xe1 offline."],"Justify items right":["Justificar itens \xe0 direita"],"Justify items center":["Justificar itens ao centro"],"Justify items left":["Justificar itens \xe0 esquerda"],"Change items justification":[],"// A \u201cblock\u201d is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );":[],"Add link":[],podcast:["podcast"],"WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river.":["O QUE fazia ele, o grande deus P\xe3,\n\tNos juncos \xe0 beira rio?\nA estragar e espalhar destrui\xe7\xe3o,\nA chapinhar com cascos de bode,\nA destruir os l\xedrios dourados\n Que flutuavam com a lib\xe9lula no rio."],"Menu Item":["Item de menu"],"Generic label for block inserter button\x04Add block":["Adicionar bloco"],"Site Title":["T\xedtulo do site"],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Falha ao carregar o conte\xfado multim\xe9dia. Se for uma fotografia ou imagem de grandes dimens\xf5es, por favor reduza o tamanho e tente novamente."],Midnight:["Meia-noite"],"Electric grass":["Verde el\xe9ctrico"],"Pale ocean":["Turquesa p\xe1lida"],"Luminous dusk":["Crep\xfasculo luminoso"],"Blush bordeaux":["Vermelho bord\xf4"],"Blush light purple":["Vermelho violeta claro"],"Cool to warm spectrum":["Espectro de frio a quente"],"Very light gray to cyan bluish gray":["Cinzento muito claro a cinzento azulado ciano"],"Luminous vivid orange to vivid red":["Laranja vivo luminoso a vermelho vivo"],"Luminous vivid amber to luminous vivid orange":["\xc2mbar vivo luminoso a laranja vivo luminoso"],"Light green cyan to vivid green cyan":["Ciano verde claro a ciano verde vivo"],"Vivid cyan blue to vivid purple":["Azul ciano vivo a roxo vivo"],"December 6, 2018":["6 de Dezembro de 2018"],"February 21, 2019":["21 de Fevereiro de 2019"],"May 7, 2019":["7 de Maio de 2019"],"Release Date":["Data de lan\xe7amento"],"Jazz Musician":["M\xfasico de Jazz"],Version:["Vers\xe3o"],"Six.":["Seis."],"Five.":["Cinco."],"Four.":["Quatro."],"Three.":["Tr\xeas."],"Two.":["Dois."],"One.":["Um."],"One of the hardest things to do in technology is disrupt yourself.":["Uma das coisas mais dif\xedceis de fazer em tecnologia \xe9 ser-se disruptivo consigo mesmo."],"\u2014 Kobayashi Issa (\u4e00\u8336)":["\u2014 Kobayashi Issa (\u4e00\u8336)"],"The wren
Earns his living
Noiselessly.":["A carri\xe7a
Faz a sua vida
Silenciosamente."],"Welcome to the wonderful world of blocks\u2026":["Boas-vindas ao maravilhoso mundo dos blocos\u2026"],Dimensions:["Dimens\xf5es"],"Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim.":["Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim."],"Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit.":["Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit."],"Call to Action":["Chamada para ac\xe7\xe3o"],"In quoting others, we cite ourselves.":["Ao citar outros, citamos-nos a n\xf3s mesmos."],"Mont Blanc appears\u2014still, snowy, and serene.":["O Mont Blanc emerge \u2014 est\xe1tico, nevado e sereno."],"In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.":["Num lugar da Mancha, de cujo nome n\xe3o quero lembrar-me, vivia, n\xe3o h\xe1 muito, um fidalgo, dos de lan\xe7a em cabido, adarga antiga, rocim fraco, e galgo corredor."],Add:["Adicionar"],"Attachment page":["P\xe1gina de anexo"],"Border radius":["Raio da borda"],"Reverse list numbering":["Inverter ordem num\xe9rica"],"Start value":["Valor inicial"],"Ordered list settings":["Op\xe7\xf5es da lista ordenada"],"Clear Media":["Limpar conte\xfado multim\xe9dia"],"Change column alignment":["Alterar alinhamento da coluna"],"Align column right":["Alinhar coluna \xe0 direita"],"Align column center":["Alinhar coluna ao centro"],"Align column left":["Alinhar coluna \xe0 esquerda"],Color:["Cor"],"Vivid purple":["Roxo vivo"],Custom:["Personalizado"],"Learn more about anchors":["Saiba mais sobre \xe2ncoras."],"Enter a word or two \u2014 without spaces \u2014 to make a unique web address just for this block, called an \u201canchor.\u201d Then, you\u2019ll be able to link directly to this section of your page.":[],"Open in new tab":["Abrir num novo separador"],"Learn more about embeds":["Saiba mais sobre c\xf3digos incorporados"],"https://wordpress.org/support/article/embeds/":["https://wordpress.org/support/article/embeds/"],"Three columns; wide center column":["Tr\xeas colunas; coluna central larga"],"Three columns; equal split":["Tr\xeas colunas; divis\xe3o igual"],"Two columns; two-thirds, one-third split":["Duas colunas; divis\xe3o dois ter\xe7os, um ter\xe7o"],"Two columns; one-third, two-thirds split":["Duas colunas; divis\xe3o um ter\xe7o, dois ter\xe7os"],"Two columns; equal split":["Duas colunas; divis\xe3o igual"],"Create Table":["Criar tabela"],"Insert a table for sharing data.":["Inserir uma tabela para partilhar dados."],"Block rendered as empty.":["Bloco processado como vazio."],"Footer section":["Sec\xe7\xe3o de rodap\xe9"],"Header section":["Sec\xe7\xe3o de cabe\xe7alho"],"Sorting and filtering":["Ordem e filtros"],"Post meta settings":["Op\xe7\xf5es dos metadados"],"Post content settings":["Op\xe7\xf5es do conte\xfado dos artigos"],"Column settings":["Op\xe7\xf5es da coluna"],"This color combination may be hard for people to read.":["Esta combina\xe7\xe3o de cores pode dificultar a leitura."],Group:["Grupo"],"Crop image to fill entire column":["Recortar a imagem para preencher toda a coluna"],"Play inline":["Reproduzir em linha"],"Add a block":["Adicionar um bloco"],"Block vertical alignment setting label\x04Change vertical alignment":["Alterar alinhamento vertical"],Taxonomy:["Taxonomia"],"- Select -":["- Seleccionar -"],Default:["Por omiss\xe3o"],Search:["Pesquisar"],"Optional placeholder\u2026":["Placeholder opcional\u2026"],"Add label\u2026":["Adicionar legenda\u2026"],Calendar:["Calend\xe1rio"],"block style\x04Default":["Por omiss\xe3o"],Back:["Voltar"],"Max number of words in excerpt":["N\xfamero m\xe1ximo de palavras do excerto"],"Display excerpt":["Mostrar excerto"],"Display date":["Mostrar data"],"Display author":["Mostrar autor"],"Edit RSS URL":["Editar URL do RSS"],"Embed Amazon Kindle content.":["Incorporar conte\xfado do Amazon Kindle."],ebook:["ebook"],"Embed Crowdsignal (formerly Polldaddy) content.":["Incorporar conte\xfados do Crowdsignal (antigo Polldaddy)."],"Warning: the link has been inserted but may have errors. Please test it.":["Aten\xe7\xe3o: a liga\xe7\xe3o foi inserida mas pode conter erros. Por favor verifique."],"%s block selected.":["%s bloco seleccionado.","%s blocos seleccionados."],Thumbnail:["Miniatura"],"Full Size":["Tamanho original"],"Align text right":["Alinhar texto \xe0 direita"],"Align text center":["Alinhar texto ao centro"],"Align text left":["Alinhar texto \xe0 esquerda"],"Drag images, upload new ones or select files from your library.":["Arraste imagens, carregue novas ou seleccione ficheiros da sua biblioteca."],"font size name\x04Huge":["Muito grande"],"font size name\x04Large":["Grande"],"font size name\x04Medium":["M\xe9dio"],"font size name\x04Small":["Pequeno"],"font size name\x04Normal":["Normal"],"button label\x04Download":["Descarregar"],"block title\x04Embed":["Incorpora\xe7\xe3o"],"block title\x04Classic":["Cl\xe1ssico"],"Link edited.":["Liga\xe7\xe3o editada."],"Link removed.":["Liga\xe7\xe3o removida."],Media:["Multim\xe9dia"],"block description\x04Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\xe1zar":[],"block description\x04Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":[],"Resize for smaller devices":["Redimensionar para dispositivos mais pequenos"],"This embed may not preserve its aspect ratio when the browser is resized.":["Esta incorpora\xe7\xe3o poder\xe1 n\xe3o preservar o r\xe1cio largura:altura ao redimensionar o navegador."],"This embed will preserve its aspect ratio when the browser is resized.":["Esta incorpora\xe7\xe3o ir\xe1 preservar o r\xe1cio largura:altura ao redimensionar o navegador."],"Embed an Animoto video.":["Incorporar um v\xeddeo do Animoto."],"Embed a Vimeo video.":["Incorporar um v\xeddeo do Vimeo."],"Embed Flickr content.":["Incorporar um conte\xfado do Flickr."],"Embed Spotify content.":["Incorporar um conte\xfado do Spotify."],"Embed SoundCloud content.":["Incorporar um conte\xfado do SoundCloud."],"Embed a WordPress post.":["Incorporar um artigo do WordPress."],"Embed a WordPress.tv video.":["Incorporar um v\xeddeo da WordPress.tv"],"Embed a VideoPress video.":["Incorporar um v\xeddeo e VideoPress."],"Embed a Tumblr post.":["Incorporar um artigo do Tumblr."],"Embed a TED video.":["Incorporar um v\xeddeo de TED."],"Embed Speaker Deck content.":["Incorporar um conte\xfado de Speaker Deck."],"Embed a YouTube video.":["Incorporar um v\xeddeo do YouTube."],"Embed SmugMug content.":["Incorporar um conte\xfado de SmugMug."],"Embed Slideshare content.":["Incorporar um conte\xfado do Slideshare."],"Embed Scribd content.":["Incorporar um conte\xfado do Scribd."],"Embed Screencast content.":["Incorporar um conte\xfado do Screencast."],"Embed ReverbNation content.":["Incorporar um conte\xfado de ReverbNation."],"Embed a Reddit thread.":["Incorporar um t\xf3pico do Reddit."],"Embed Mixcloud content.":["Incorporar um conte\xfado do Mixcloud."],"Embed a tweet.":["Incorporar um tweet."],"Embed Kickstarter content.":["Incorporar um conte\xfado do Kickstarter."],"Embed Issuu content.":["Incorporar um conte\xfado do Issuu."],"Embed Imgur content.":["Incorporar um conte\xfado do Imgur."],"Embed a Dailymotion video.":["Incorporar um v\xeddeo do Dailymotion."],"Embed CollegeHumor content.":["Incorporar um conte\xfado do CollegeHumor."],"Embed Cloudup content.":["Incorporar um conte\xfado de Cloudup."],"Insert from URL":["Inserir de um URL"],Year:["Ano"],Day:["Dia"],Month:["M\xeas"],"Media area":["\xc1rea de multim\xe9dia"],"Show media on right":["Mostrar multim\xe9dia \xe0 direita"],"Show media on left":["Mostrar multim\xe9dia \xe0 esquerda"],Cover:["Capa"],HTML:["HTML"],"Write HTML\u2026":["Escreva HTML\u2026"],"Media settings":["Op\xe7\xf5es de multim\xe9dia"],Overlay:["Sobreposi\xe7\xe3o"],Backtick:["Ap\xf3strofo"],Period:["Ponto"],Comma:["V\xedrgula"],"Change alignment":["Alterar alinhamento"],"Change text alignment":["Alterar alinhamento do texto"],"Row count":["N\xfamero de linhas"],"Column count":["N\xfamero de colunas"],"block description\x04Create and save content to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":[],"Code is Poetry":["C\xf3digo \xe9 poesia"],"Untitled Reusable block":[],Reusable:["Reutiliz\xe1veis"],"The response is not a valid JSON response.":["A resposta n\xe3o \xe9 uma resposta JSON v\xe1lida."],Muted:["Silenciado"],"Display avatar":["Mostrar avatar"],"Number of comments":["N\xfamero de coment\xe1rios"],Auto:["Autom\xe1tico"],Preload:["Pr\xe9-carregar"],"Cyan bluish gray":["Cinzento azulado ciano"],"Vivid cyan blue":["Azul ciano vivo"],"Pale cyan blue":["Azul ciano p\xe1lido"],"Vivid green cyan":["Ciano verde vivo"],"Light green cyan":["Ciano verde claro"],"Luminous vivid amber":["\xc2mbar vivo luminoso"],"Luminous vivid orange":["Laranja vivo luminoso"],"Vivid red":["Vermelho vivo"],"Pale pink":["Rosa p\xe1lido"],"Show download button":["Mostrar bot\xe3o de descarregar"],"Link to":["Ligar a"],File:["Ficheiro"],Loop:["Loop"],Autoplay:["Reprodu\xe7\xe3o autom\xe1tica"],"Playback controls":["Controlos de reprodu\xe7\xe3o"],"Replace image":["Substituir imagem"],"View the autosave":["Ver c\xf3pia autom\xe1tica"],"There is an autosave of this post that is more recent than the version below.":["Existe uma c\xf3pia autom\xe1tica deste artigo que \xe9 mais recente do que a vers\xe3o abaixo."],"Enter URL here\u2026":["Digite um URL aqui\u2026"],"Pin to toolbar":["Fixar na barra de ferramentas"],"Unpin from toolbar":["Desafixar da barra de ferramentas"],"Fixed width table cells":["C\xe9lulas de tabela com largura fixa"],"block description\x04Add a block that displays content pulled from other sites, like Twitter or YouTube.":[],"Error loading block: %s":["Erro ao carregar bloco: %s"],"Close plugin":["Fechar plugin"],"Link settings":["Defini\xe7\xf5es da liga\xe7\xe3o"],"Page break":["Quebra de p\xe1gina"],Height:["Altura"],Width:["Largura"],"Thumbnails are not cropped.":["As miniaturas n\xe3o s\xe3o cortadas."],"Thumbnails are cropped to align.":["As miniaturas s\xe3o cortadas para ficarem alinhadas."],"Code editor selected":["Editor de c\xf3digo seleccionado"],"Visual editor selected":["Editor visual seleccionado"],Plugins:["Plugins"],"Trashing failed":["Falhou ao mover para o lixo"],"Updating failed.":["Falhou ao actualizar."],"Scheduling failed.":["Falhou ao agendar."],"Publishing failed.":["Falhou ao publicar."],Embeds:["Conte\xfados incorporados"],Blocks:["Blocos"],Undo:["Anular"],Redo:["Refazer"],"Convert to regular blocks":["Converter para blocos normais"],"More options":["Mais op\xe7\xf5es"],Remove:["Remover"],"Copied!":["Copiado!"],Settings:["Op\xe7\xf5es"],Reset:["Repor"],"An unknown error occurred.":["Ocorreu um erro desconhecido."],"No results.":["Sem resultados."],"%d result found, use up and down arrow keys to navigate.":["%d resultado encontrado, use as teclas de seta para cima e para baixo para navegar.","%d resultados encontrados, use as teclas de seta para cima e para baixo para navegar."],"(no title)":["(sem t\xedtulo)"],URL:["URL"],Close:["Fechar"],"Edit link":["Editar liga\xe7\xe3o"],Link:["Liga\xe7\xe3o"],Strikethrough:["Rasurado"],Italic:["It\xe1lico"],Bold:["Negrito"],"Remove link":["Remover liga\xe7\xe3o"],"Number of items":["N\xfamero de itens"],All:["Tudo"],Category:["Categoria"],"Z \u2192 A":["Z \u2192 A"],"A \u2192 Z":["A \u2192 Z"],"Oldest to newest":["Do mais antigo para o mais recente"],"Newest to oldest":["Do mais recente para o mais antigo"],"Order by":["Ordernar por"],Video:["V\xeddeo"],"New Column":["Nova coluna"],"Delete column":["Eliminar coluna"],"Delete row":["Eliminar linha"],"Edit table":["Editar tabela"],Table:["Tabela"],Shortcode:["Shortcode"],"Write preformatted text\u2026":["Escreva um texto pr\xe9-formatado\u2026"],"Read more":["Ler mais"],"Indent list item":["Aumentar indenta\xe7\xe3o do elemento da lista"],"Outdent list item":["Reduzir indenta\xe7\xe3o do elemento da lista"],"Convert to ordered list":["Converter para lista ordenada"],"Convert to unordered list":["Converter para lista n\xe3o ordenada"],List:["Lista"],"Display post date":["Mostrar data dos artigos"],"Grid view":["Vista de grelha"],"List view":["Vista de lista"],Size:["Tamanho"],Image:["Imagem"],Preview:["Pr\xe9-visualizar"],Heading:["T\xedtulo"],"Heading %d":["T\xedtulo %d"],"Heading settings":["Defini\xe7\xf5es do t\xedtulo"],None:["Nenhum"],"Media File":["Ficheiro multim\xe9dia"],"Attachment Page":["P\xe1gina de anexo"],"Crop images":["Cortar imagens"],Gallery:["Galeria"],audio:["\xe1udio"],music:["m\xfasica"],image:["imagem"],blog:["blog"],post:["artigo","artigos"],"Embedded content from %s":["Incorporar conte\xfado de %s"],"Write title\u2026":["Escreva um t\xedtulo\u2026"],"Fixed background":["Fundo fixo"],"Edit image":["Editar imagem"],"%1$s (%2$s)":["%1$s (%2$s)"],Code:["C\xf3digo"],"Write code\u2026":["Escreva algum c\xf3digo\u2026"],Categories:["Categorias"],"Show hierarchy":["Mostrar hierarquia"],"Show post counts":["Mostrar n\xfamero de artigos"],"Display as dropdown":["Mostrar como selector"],"Add text\u2026":["Adicionar texto\u2026"],Apply:["Aplicar"],"Text color":[],"Block has been deleted or is unavailable.":["O bloco foi eliminado ou est\xe1 indispon\xedvel."],"Reusable blocks":["Blocos reutiliz\xe1veis"],Cancel:["Cancelar"],Edit:["Editar"],"Use URL":["Usar URL"],Audio:["\xc1udio"],"HTML anchor":["\xc2ncora HTML"],"Full width":["Toda a largura"],"Wide width":["Grande"],Widgets:["Widgets"],"Align right":["Alinhar \xe0 direita"],"Align center":["Centrar"],"Align left":["Alinhar \xe0 esquerda"],"Add title":["Adicionar t\xedtulo"],Comment:["Coment\xe1rio"],Metadata:["Metadados"],"Select Category":["Seleccionar categoria"],"(Untitled)":["(Sem t\xedtulo)"]}},1342,[]); __d(function(e,o,a,t,i,r,s){i.exports={100:["100"],"Nested blocks will fill the width of this container. Toggle to constrain.":[],"You are currently in zoom-out mode.":[],"The Queen of Hearts.":[],"The Mad Hatter.":[],"The Cheshire Cat.":[],"The White Rabbit.":[],"Alice.":["Alice."],"Gather blocks in a container.":[],"Inner blocks use content width":[],Constrained:["Restrito"],"Spacing Control":["Controle de espa\xe7amento"],"Custom (%s)":["Personalizado (%s)"],"All sides":["Todos os lados"],"Show label":["Mostrar r\xf3tulo"],"Embed a podcast player from Pocket Casts.":[],"66 / 33":["66 / 33"],"33 / 66":["33 / 66"],"Nested blocks use content width with options for full and wide widths.":[],"Copy block":["Copiar bloco"],"block title\x04Categories List":["Lista de categorias"],"Show empty categories":[],"block description\x04Gather blocks in a layout container.":["Re\xfana blocos em um cont\xeainer de layout."],"Link sides":["Conectar lados"],"Unlink sides":["Desconectar lados"],"Quote citation":[],"Arrange blocks vertically.":["Organize os blocos na vertical."],Stack:["Pilha"],"Arrange blocks horizontally.":["Organize os blocos na horizontal."],Week:["Semana"],"Group by:":["Agrupar por:"],"single horizontal line\x04Row":["Linha"],"Alignment option\x04None":["Nenhum"],"Vertical alignment":["Alinhamento vertical"],"Align items bottom":["Alinhar itens na parte inferior"],"Align items center":["Alinhar itens ao centro"],"Align items top":["Alinhar itens no topo"],Unwrap:["N\xe3o envolver"],"block description\x04Create a list item.":["Cria um item de lista."],"block title\x04List item":["Item de lista"],"View Preview":["Ver pr\xe9-visualiza\xe7\xe3o"],"Largest size":["Tamanho maior"],"Smallest size":["Tamanho menor"],"%s link":["Link para %s"],"Preference activated - %s":["Prefer\xeancia ativada - %s"],"Preference deactivated - %s":["Prefer\xeancia desativada - %s"],"Draft saved.":["Rascunho salvo."],"Set custom size":["Definir tamanho personalizado"],"Use size preset":["Use tamanho preestabelecido"],"Indicates this palette is created by the user.\x04Custom":["Personalizado"],"Indicates this palette comes from the theme.\x04Custom":["Personalizado"],"Indicates this palette comes from WordPress.\x04Default":["Padr\xe3o"],"Indicates this palette comes from the theme.\x04Theme":["Tema"],"%s applied.":["%s aplicado."],"%s removed.":["%s exclu\xeddo."],"Embed Wolfram notebook content.":["Incorporar conte\xfado do notebook Wolfram."],"Allow to wrap to multiple lines":["Permitir quebra de linhas"],"block style label\x04Plain":["Simples"],"Embed Pinterest pins, boards, and profiles.":["Incorporar pins, pastas e perfis do Pinterest."],bookmark:["favorito"],"Show only top level categories":["Mostrar somente as categorias de n\xedvel superior"],"https://wordpress.org/support/article/page-jumps/":["https://wordpress.org/support/article/page-jumps/"],Featured:["Em destaque"],Highlight:["Destaque"],"You do not have permission to create Pages.":["Sem permiss\xe3o para criar p\xe1ginas."],"Block spacing":["Espa\xe7amento do bloco"],"Max %s wide":["M\xe1ximo %s de largura"],"block description\x04Display content in multiple columns, with blocks added to each column.":["Exibe conte\xfado em m\xfaltiplas colunas, com blocos adicionados a cada coluna."],"Minimum height":["Altura m\xednima"],"block description\x04Create structured content in rows and columns to display information.":["Crie conte\xfado estruturado em linhas e colunas para exibir informa\xe7\xf5es."],"Preload value\x04None":["Nenhum"],"noun; Audio block parameter\x04Preload":["Pr\xe9-carregamento"],"Media item link option\x04None":["Nenhum"],Justification:["Justificado"],"Loading options\u2026":["Carregando op\xe7\xf5es\u2026"],"All gallery image sizes updated to: %s":["Todos os tamanhos de imagem da galeria atualizados para: %s"],"All gallery images updated to not open in new tab":["Todas as imagens de galeria foram atualizadas para n\xe3o abrir em uma nova aba"],"All gallery images updated to open in new tab":["Todas as imagens de galeria foram atualizadas para abrir em uma nova aba"],"All gallery image links updated to: %s":["Todos os links das imagens de galeria foram atualizadas para: %s"],"If uploading to a gallery all files need to be image formats":["Para serem enviados para a galeria, todos os arquivos precisam ter formatos de imagem"],Flow:["Fluxo"],Flex:["Flex"],"Name of the file\x04Armstrong_Small_Step":["Armstrong_Small_Step"],"No published posts found.":["Nenhum post publicado encontrado."],"Autoplay may cause usability issues for some users.":["Execu\xe7\xe3o autom\xe1tica pode causar problemas de usabilidade para alguns usu\xe1rios."],Radius:["Raio"],"Link radii":["Unir radius"],"Unlink radii":["N\xe3o unir radius"],"Bottom right":["Em baixo \xe0 direita"],"Bottom left":["Em baixo \xe0 esquerda"],"Top right":["Em cima \xe0 direita"],"Top left":["Em cima \xe0 esquerda"],"block keyword\x04link":["link"],"block keyword\x04movie":["filme"],"block description\x04Embed a video from your media library or upload a new one.":["Incorpore um video da sua biblioteca de m\xeddias ou envie um novo."],"block keyword\x04poem":["poema"],"block keyword\x04poetry":["poesia"],"block description\x04Insert poetry. Use special spacing formats. Or quote song lyrics.":["Escreva uma poesia. Use um formato de espa\xe7amento especial. Ou cite letras de m\xfasicas."],"block description\x04This block is deprecated. Please use the Columns block instead.":["Este bloco est\xe1 obsoleto. Use o bloco Colunas no lugar dele."],"block description\x04A cloud of your most used tags.":["Uma nuvem com as tags mais usadas."],"block style label\x04Stripes":["Listras"],"block description\x04Add white space between blocks and customize its height.":["Adicione um espa\xe7o entre blocos e personalize sua altura."],"block style label\x04Pill Shape":["Forma de p\xedlula"],"block style label\x04Logos Only":["Apenas logos"],"block description\x04Display icons linking to your social media profiles or sites.":["Exibir \xedcones com links para seus perfis de redes sociais ou sites."],"block description\x04Display an icon linking to a social media profile or site.":["Exibe um \xedcone com um link para um perfil de rede social ou site. "],"block description\x04Insert additional custom elements with a WordPress shortcode.":["Insira elementos personalizados adicionais com um shortcode de WordPress."],"block style label\x04Dots":["Pontos"],"block style label\x04Wide Line":["Linha ampla"],"block keyword\x04divider":["divisor"],"block keyword\x04hr":["hr"],"block keyword\x04horizontal-line":["linha horizontal"],"block description\x04Create a break between ideas or sections with a horizontal separator.":["Crie uma divis\xe3o entre par\xe1grafos ou se\xe7\xf5es com uma linha horizontal."],"block keyword\x04find":["busca"],"block description\x04Help visitors find your content.":["Ajude os visitantes a encontrar seu conte\xfado."],"block keyword\x04feed":["feed"],"block keyword\x04atom":["atom"],"block description\x04Display entries from any RSS or Atom feed.":["Exibir posts a partir de qualquer feed RSS ou Atom."],"block keyword\x04cite":["citar"],"block keyword\x04blockquote":["cita\xe7\xe3o"],"block description\x04Give special visual emphasis to a quote from your text.":["D\xea uma enfase visual especial a uma cita\xe7\xe3o do seu texto."],"block description\x04Add text that respects your spacing and tabs, and also allows styling.":["Adicione um texto que mant\xe9m espa\xe7amento e tabula\xe7\xe3o, e que tamb\xe9m permita estiliza\xe7\xe3o."],"block keyword\x04text":["texto"],"block description\x04Start with the basic building block of all narrative.":["Inicie com o bloco de constru\xe7\xe3o b\xe1sico de toda narrativa."],"block keyword\x04pagination":["pagina\xe7\xe3o"],"block keyword\x04next page":["pr\xf3xima p\xe1gina"],"block description\x04Separate your content into a multi-page experience.":["Separe seu conte\xfado em uma experi\xeancia multip\xe1gina."],"block keyword\x04read more":["leia mais"],"block description\x04Content before this block will be shown in the excerpt on your archives page.":["O conte\xfado antes deste bloco ser\xe1 mostrado no resumo na sua p\xe1gina de arquivos."],"block description\x04Your site doesn\u2019t include support for this block.":["Seu site n\xe3o oferece suporte para este bloco."],"block keyword\x04video":["v\xeddeo"],"block keyword\x04image":["imagem"],"block description\x04Set media and words side-by-side for a richer layout.":["Coloque m\xeddia e texto lado a lado para um layout mais elegante."],"block keyword\x04numbered list":["lista numerada"],"block keyword\x04ordered list":["lista ordenada"],"block keyword\x04bullet list":["lista com marcadores"],"block description\x04Create a bulleted or numbered list.":["Crie uma lista com marcadores ou numerada."],"block keyword\x04recent posts":["posts recentes"],"block description\x04Display a list of your most recent posts.":["Exibir uma lista dos posts mais recentes."],"block keyword\x04recent comments":["coment\xe1rios recentes"],"block description\x04Display a list of your most recent comments.":["Exibe uma lista dos seus coment\xe1rios mais recentes."],"block style label\x04Rounded":["Arredondado"],"block style label\x04Default":["Padr\xe3o"],"block keyword\x04picture":["imagem"],"block keyword\x04photo":["foto"],"block keyword\x04img":["img"],"block description\x04Insert an image to make a visual statement.":["Insira uma imagem para ilustrar suas ideias."],"block keyword\x04embed":["incorporar"],"block description\x04Add custom HTML code and preview it as you edit.":["Adicione um c\xf3digo HTML personalizado e pr\xe9-visualize conforme edita."],"block keyword\x04subtitle":["subt\xedtulo"],"block keyword\x04title":["t\xedtulo"],"block keyword\x04section":["se\xe7\xe3o"],"block keyword\x04row":["linha"],"block keyword\x04wrapper":["inv\xf3lucro"],"block keyword\x04container":["cont\xeainer"],"block keyword\x04photos":["fotos"],"block keyword\x04images":["imagens"],"block description\x04Display multiple images in a rich gallery.":["Exibe m\xfaltiplas imagens em formato de galeria."],"block description\x04Use the classic WordPress editor.":["Use o editor cl\xe1ssico do WordPress."],"block keyword\x04download":["baixar"],"block keyword\x04pdf":["pdf"],"block keyword\x04document":["documento"],"block description\x04Add a link to a downloadable file.":["Adicione um link para baixar um arquivo."],"block description\x04Add an image or video with a text overlay \u2014 great for headers.":["Adicione uma imagem ou v\xeddeo com um texto sobreposto \u2014 \xf3timo para cabe\xe7alhos."],"block description\x04A single column within a columns block.":["Uma \xfanica coluna dentro de um bloco de colunas."],"block description\x04Display code snippets that respect your spacing and tabs.":["Exiba trechos de c\xf3digo respeitando seu espa\xe7amento e tabula\xe7\xe3o."],"block description\x04Display a list of all categories.":["Exiba uma lista de todas as categorias."],"block keyword\x04archive":["arquivo"],"block keyword\x04posts":["posts"],"block description\x04A calendar of your site\u2019s posts.":["Um calend\xe1rio com os posts do seu site."],"block description\x04Prompt visitors to take action with a group of button-style links.":["Solicite que os visitantes tomem uma a\xe7\xe3o com um grupo de bot\xf5es com estilo de links."],"block style label\x04Outline":["Contorno"],"block style label\x04Fill":["Preenchimento"],"block description\x04Prompt visitors to take action with a button-style link.":["Solicite que os visitantes tomem uma a\xe7\xe3o com um bot\xe3o com estilo de link."],"block keyword\x04recording":["grava\xe7\xe3o"],"block keyword\x04podcast":["podcast"],"block keyword\x04sound":["som"],"block keyword\x04music":["m\xfasica"],"block description\x04Embed a simple audio player.":["Incorpora um reprodutor de \xe1udio simples."],"block description\x04Display a date archive of your posts.":["Exibir um arquivo de data de seus posts."],"Points (pt)":["Pontos (pt)"],"Picas (pc)":["Paicas (pc)"],"Inches (in)":["Polegadas (in)"],"Millimeters (mm)":["Mil\xedmetros (mm)"],"Centimeters (cm)":["Cent\xedmetros (cm)"],"x-height of the font (ex)":["altura-x da fonte (ex)"],"Width of the zero (0) character (ch)":[" Largura do caractere zero (ch)"],"Viewport largest dimension (vmax)":["Largura m\xe1xima da viewport (vmax)"],"Viewport smallest dimension (vmin)":["Largura m\xednima da viewport (vmin)"],"Percent (%)":["Porcentagem (%)"],Margin:["Margem"],"Customize the width for all elements that are assigned to the center or wide columns.":["Personalize a largura de todos os elementos atribu\xeddos a colunas centrais ou amplas."],Wide:["Amplo"],"Widget types":["Tipos de widgets"],"Custom template created. You're in template mode now.":["Modelo personalizado criado. Voc\xea est\xe1 no modo de modelo agora."],"Embed of %s.":["Incorporado de %s."],"PDF embed":["Incorporar PDF"],"Add citation":["Adicionar cita\xe7\xe3o"],"Add quote":["Adicionar cita\xe7\xe3o"],"Add caption":["Adicionar legenda"],"Relative to root font size (rem)\x04rems":["rems"],"Relative to parent font size (em)\x04ems":["ems"],Border:["Borda"],"Your site does not have any posts, so there is nothing to display here at the moment.":["Seu site ainda n\xe3o tem nenhum post, portando n\xe3o h\xe1 o que exibir aqui por enquanto."],"Block cannot be rendered inside itself.":["O bloco n\xe3o pode ser renderizado dentro de si mesmo."],Indent:["Aumentar recuo"],Outdent:["Diminuir recuo"],Ordered:["Ordenada"],Unordered:["N\xe3o ordenada"],"Space between items":["Espa\xe7o entre os itens"],"Add an anchor":["Adicionar uma \xe2ncora"],Align:["Alinhar"],"block title\x04Social Icon":["\xcdcone de rede social"],"block title\x04Social Icons":["\xcdcones de redes sociais"],"block title\x04Tag Cloud":["Nuvem de tags"],"block title\x04Video":["V\xeddeo"],"block title\x04Verse":["Verso"],"block title\x04Text Columns (deprecated)":["Colunas de texto (obsoleto)"],"block title\x04Table":["Tabela"],"block title\x04Spacer":["Espa\xe7ador"],"block title\x04Shortcode":["Shortcode"],"block title\x04Separator":["Separador"],"block title\x04Group":["Grupo"],"block title\x04Search":["Pesquisa"],"block title\x04RSS":["RSS"],"block title\x04Reusable block":["Bloco reutiliz\xe1vel"],"block title\x04Pullquote":["Cita\xe7\xe3o destacada"],"block title\x04Preformatted":["Pr\xe9-formatado"],"block title\x04Page Break":["Quebra de p\xe1gina"],"block title\x04More":["Leia mais"],"block title\x04Unsupported":["N\xe3o suportado"],"block title\x04List":["Lista"],"block title\x04Latest Posts":["Posts mais recentes"],"block title\x04Latest Comments":["Coment\xe1rios mais recentes"],"block title\x04Media & Text":["M\xeddia e texto"],"block title\x04Custom HTML":["HTML personalizado"],"block title\x04File":["Arquivo"],"block title\x04Cover":["Cobertura"],"block title\x04Column":["Coluna"],"block title\x04Columns":["Colunas"],"block title\x04Code":["C\xf3digo"],"block title\x04Calendar":["Calend\xe1rio"],"block title\x04Buttons":["Bot\xf5es"],"block title\x04Button":["Bot\xe3o"],"block title\x04Audio":["\xc1udio"],"block title\x04Archives":["Arquivos"],"block title\x04Gallery":["Galeria"],"block title\x04Quote":["Cita\xe7\xe3o"],"block title\x04Heading":["T\xedtulo"],"block title\x04Image":["Imagem"],"block title\x04Paragraph":["Par\xe1grafo"],"text direction\x04ltr":["ltr"],"Block vertical alignment setting\x04Align bottom":["Alinha \xe0 base"],"Block vertical alignment setting\x04Align middle":["Alinhar no meio"],"Block vertical alignment setting\x04Align top":["Alinhar ao topo"],"Wood thrush singing in Central Park, NYC.":["Tordo cantando no Central Park, NYC."],"Write verse\u2026":["Escrever verso..."],"Verse text":["Texto do verso"],"Column %d text":["Texto da coluna %d"],"Table caption text":["Texto da legenda da tabela"],"Footer cell text":["Texto da c\xe9lula do rodap\xe9"],"Body cell text":["Texto da c\xe9lula do corpo"],"Header cell text":["Texto da c\xe9lula do cabe\xe7alho"],"Pullquote citation text":["Texto da cita\xe7\xe3o"],"Pullquote text":["Texto da cita\xe7\xe3o"],"Preformatted text":["Texto pr\xe9-formatado"],"List text":["Texto da lista"],Vertical:["Vertical"],Horizontal:["Horizontal"],"Heading text":["Texto do t\xedtulo"],"Editing template. Changes made here affect all posts and pages that use the template.":["Editando modelo. Mudan\xe7as feitas aqui afetam todos os posts e p\xe1ginas que usam o modelo."],"%1$s %2$s":["%1$s %2$s"],Themes:["Temas"],"Viewport height (vh)":["Altura da visualiza\xe7\xe3o (vh)"],"Viewport width (vw)":["Largura da visualiza\xe7\xe3o (vh)"],"Relative to root font size (rem)":["Tamanho relativo da fonte do elemento raiz (rem)"],"Relative to parent font size (em)":["Tamanho relativo do elemento ascendente (em)"],"Pixels (px)":["P\xedxeis (px)"],"Percentage (%)":["Porcentagem (%)"],"Button width":["Largura do bot\xe3o"],"Remove blocks":["Remover blocos"],"Button inside":["Bot\xe3o interno"],"Button outside":["Bot\xe3o externo"],"No button":["Sem bot\xe3o"],Radial:["Radial"],Linear:["Linear"],"Add link to featured image":["Adicionar link para imagem em destaque"],"Find out more":["Descubra mais"],"Insert column after":["Inserir coluna depois"],"Insert column before":["Inserir coluna antes"],"Insert row after":["Inserir linha depois"],"Insert row before":["Inserir linha antes"],"Contact us":["Fale conosco"],Base:["Base"],"Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.":["Use a tecla Tab e as setas do teclado para escolher um novo local para o bloco. Use as setas da esquerda e direita para mover entre n\xedveis. Uma vez escolhido, pressione Enter ou Espa\xe7o para mover o bloco."],Mixed:["Misturado"],Right:["Direita"],Left:["Esquerda"],Bottom:["Base"],Top:["Topo"],"You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.":["No momento voc\xea est\xe1 no modo de navega\xe7\xe3o. Navegue pelos blocos usando a tecla Tab e as teclas de seta. Use as teclas seta Esquerda e Direita para mover-se entre n\xedveis aninhados. Para sair do modo de navega\xe7\xe3o e editar o bloco selecionado, pressione Enter."],Orientation:["Orienta\xe7\xe3o"],Design:["Design"],Text:["Texto"],"Widget areas":["\xc1reas de widget"],"Number of tags":["N\xfamero de tags"],White:["Branco"],Black:["Preto"],"Browser default":["Navegador padr\xe3o"],"%1$s Block. Row %2$d":["Bloco %1$s. Linha %2$d"],Typography:["Tipografia"],Content:["Conte\xfado"],"Menu Location":["Localiza\xe7\xe3o de menu"],Menu:["Menu"],"25 / 50 / 25":["25 / 50 / 25"],"33 / 33 / 33":["33 / 33 / 33"],"50 / 50":["50 / 50"],User:["Usu\xe1rio"],"Post Type":["Tipo de post"],Site:["Site"],"Media file":["Arquivo de m\xeddia"],"Change heading level":["Mudar o n\xedvel do t\xedtulo"],survey:["pesquisa"],social:["social"],"Global Styles":["Estilos globais"],"Social Icon":["\xcdcone de rede social"],"block keyword\x04links":["links"],"Display featured image":["Mostrar imagem destacada"],"Featured image settings":["Configura\xe7\xf5es da imagem destacada"],"Embed a TikTok video.":["Incorporar um v\xeddeo do TikTok."],Solid:["S\xf3lido"],Angle:["\xc2ngulo"],"%s Block":["Bloco %s"],"%1$s Block. %2$s":["Bloco %1$s. %2$s"],"%1$s Block. Column %2$d":["Bloco %1$s. Coluna %2$d"],"%1$s Block. Column %2$d. %3$s":["Bloco %1$s. Coluna %2$d. %3$s"],"%1$s Block. Row %2$d. %3$s":["Bloco %1$s. Linha %2$d. %3$s"],Theme:["Tema"],"Footer label":["R\xf3tulo do rodap\xe9"],"Header label":["R\xf3tulo do cabe\xe7alho"],"Level %1$s. %2$s":["N\xedvel %1$s. %2$s"],"Level %s. Empty.":["N\xedvel %s. Vazio."],Empty:["Vazia"],"Link label":["R\xf3tulo do link"],"Matt Mullenweg":["Matt Mullenweg"],"EXT. XANADU - FAINT DAWN - 1940 (MINIATURE)\nWindow, very small in the distance, illuminated.\nAll around this is an almost totally black screen. Now, as the camera moves slowly towards the window which is almost a postage stamp in the frame, other forms appear;":["XT. XANADU - FAINT DAWN - 1940 (MINIATURA)\nJanela muito pequena \xe0 dist\xe2ncia, iluminada.\nTudo ao redor disso \xe9 uma tela quase totalmente preta. Agora, conforme a c\xe2mera se move lentamente em dire\xe7\xe3o \xe0 janela, que \xe9 quase um selo postal no quadro, outras formas aparecem;"],"Suspendisse commodo neque lacus, a dictum orci interdum et.":["Suspendisse commodo neque lacus, a dictum orci interdum et."],"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.":["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis."],Background:["Fundo"],"Image size":["Tamanho da imagem"],Replace:["Substituir"],"You are currently in edit mode. To return to the navigation mode, press Escape.":["No momento voc\xea est\xe1 no modo de edi\xe7\xe3o. Para retornar ao modo de navega\xe7\xe3o, pressione Esc."],"You are probably offline.":["Voc\xea provavelmente est\xe1 offline."],"Justify items right":["Justificar itens \xe0 direita"],"Justify items center":["Justificar itens ao centro"],"Justify items left":["Justificar itens \xe0 direita"],"Change items justification":["Alterar alinhamento dos itens"],"// A \u201cblock\u201d is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );":["// Um \"bloco\" \xe9 um termo abstrato\n// para descrever unidades de marca\xe7\xe3o que\n// ao serem dispostas em conjunto, formam o\n// conte\xfado ou leiaute de uma p\xe1gina.\nregisterBlockType( name, settings );"],"Add link":["Adicionar link"],podcast:["podcast"],"WHAT was he doing, the great god Pan,\n\tDown in the reeds by the river?\nSpreading ruin and scattering ban,\nSplashing and paddling with hoofs of a goat,\nAnd breaking the golden lilies afloat\n With the dragon-fly on the river.":["Eis que temos aqui a Poesia,\na grande Poesia.\nQue n\xe3o oferece signos\nnem linguagem espec\xedfica, n\xe3o respeita\nsequer os limites do idioma. Ela flui, como um rio.\ncomo o sangue nas art\xe9rias,\nt\xe3o espont\xe2nea que nem se sabe como foi escrita."],"Menu Item":["Item do menu"],"Generic label for block inserter button\x04Add block":["Adicionar bloco"],"Site Title":["T\xedtulo do site"],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Falha ao enviar a m\xeddia. Se for uma foto ou imagem grande, reduza o tamanho e tente novamente."],Midnight:["Meia-noite"],"Electric grass":["Grama el\xe9trica"],"Pale ocean":["Oceano p\xe1lido"],"Luminous dusk":["Sombra luminosa"],"Blush bordeaux":["Bordeaux corado"],"Blush light purple":["Roxo claro corado"],"Cool to warm spectrum":["Legal para entusiasmar o espectro"],"Very light gray to cyan bluish gray":["Cinza muito claro a cinza azulado"],"Luminous vivid orange to vivid red":["Laranja v\xedvido luminoso a vermelho v\xedvido"],"Luminous vivid amber to luminous vivid orange":["\xc2mbar v\xedvido luminoso a laranja v\xedvido luminoso"],"Light green cyan to vivid green cyan":["Ciano verde claro a ciano verde v\xedvido"],"Vivid cyan blue to vivid purple":["Azul ciano v\xedvido a roxo v\xedvido"],"December 6, 2018":["6 de dezembro de 2018"],"February 21, 2019":["21 de fevereiro de 2019"],"May 7, 2019":["7 de maio de 2019"],"Release Date":["Data de lan\xe7amento"],"Jazz Musician":["M\xfasico de Jazz"],Version:["Vers\xe3o"],"Six.":["Seis."],"Five.":["Cinco."],"Four.":["Quatro."],"Three.":["Tr\xeas."],"Two.":["Dois."],"One.":["Um."],"One of the hardest things to do in technology is disrupt yourself.":["Umas das coisas mais dif\xedceis de fazer em tecnologia \xe9 interromper a si mesmo."],"\u2014 Kobayashi Issa (\u4e00\u8336)":["\u2014 Kobayashi Issa (\u4e00\u8336)"],"The wren
Earns his living
Noiselessly.":["O carri\xe7o
ganha a vida
silenciosamente."],"Welcome to the wonderful world of blocks\u2026":["Boas-vindas ao maravilhoso mundo dos blocos..."],Dimensions:["Dimens\xf5es"],"Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim.":["Nam risus massa, ullamcorper consectetur eros fermentum, porta aliquet ligula. Sed vel mauris nec enim."],"Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit.":["Etiam et egestas lorem. Vivamus sagittis sit amet dolor quis lobortis. Integer sed fermentum arcu, id vulputate lacus. Etiam fermentum sem eu quam hendrerit."],"Call to Action":["Chamada para a\xe7\xe3o"],"In quoting others, we cite ourselves.":["Citando outros, citamos n\xf3s mesmos."],"Mont Blanc appears\u2014still, snowy, and serene.":["O Mont Blanc aparece, ainda, nevado e calmo."],"In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.":["Em uma vila de La Mancha, cujo nome n\xe3o desejo me lembrar, n\xe3o demorou muito tempo para que um daqueles cavalheiros mantivesse uma lan\xe7a no porta-lan\xe7as, uma fivela velha, um hack magro e um galgo para percorrer."],Add:["Adicionar"],"Attachment page":["P\xe1gina de anexo"],"Border radius":["Bordas arredondadas"],"Reverse list numbering":["Lista numerada reversa"],"Start value":["Valor de in\xedcio"],"Ordered list settings":["Configura\xe7\xf5es de lista ordenada"],"Clear Media":["Liberar m\xeddia"],"Change column alignment":["Mudar alinhamento da coluna"],"Align column right":["Alinhar coluna \xe0 direita"],"Align column center":["Alinhar coluna ao centro"],"Align column left":["Alinhar coluna \xe0 esquerda"],Color:["Cor"],"Vivid purple":["Roxo intenso"],Custom:["Personalizado"],"Learn more about anchors":["Saiba mais sobre \xe2ncoras"],"Enter a word or two \u2014 without spaces \u2014 to make a unique web address just for this block, called an \u201canchor.\u201d Then, you\u2019ll be able to link directly to this section of your page.":["Digite uma ou duas palavras, sem espa\xe7os, para criar um endere\xe7o \xfanico para este bloco, chamado \"\xe2ncora\". Ent\xe3o, voc\xea poder\xe1 apontar diretamente para esta se\xe7\xe3o da sua p\xe1gina."],"Open in new tab":["Abrir em uma nova aba"],"Learn more about embeds":["Saiba mais sobre c\xf3digos incorporados"],"https://wordpress.org/support/article/embeds/":["https://wordpress.org/support/article/embeds/"],"Three columns; wide center column":["Tr\xeas colunas com a do meio maior"],"Three columns; equal split":["Tr\xeas colunas iguais"],"Two columns; two-thirds, one-third split":["Duas colunas divididas em dois ter\xe7os e um ter\xe7o"],"Two columns; one-third, two-thirds split":["Duas colunas divididas em um ter\xe7o e dois ter\xe7os"],"Two columns; equal split":["Duas colunas iguais"],"Create Table":["Criar tabela"],"Insert a table for sharing data.":["Insira uma tabela para compartilhar dados."],"Block rendered as empty.":["Bloco exibido como vazio."],"Footer section":["Se\xe7\xe3o do rodap\xe9"],"Header section":["Se\xe7\xe3o do cabe\xe7alho"],"Sorting and filtering":["Ordem e filtros"],"Post meta settings":["Configura\xe7\xf5es de metadados do post"],"Post content settings":["Configura\xe7\xf5es do conte\xfado do post"],"Column settings":["Configura\xe7\xf5es da coluna"],"This color combination may be hard for people to read.":["Esta combina\xe7\xe3o de cores pode dificultar a leitura."],Group:["Grupo"],"Crop image to fill entire column":["Recortar a imagem para preencher toda a coluna"],"Play inline":["Reproduzir sem abrir em tela cheia"],"Add a block":["Adicionar um bloco"],"Block vertical alignment setting label\x04Change vertical alignment":["Mudar alinhamento vertical"],Taxonomy:["Taxonomia"],"- Select -":["- Selecionar -"],Default:["Padr\xe3o"],Search:["Pesquisar"],"Optional placeholder\u2026":["Texto de marca\xe7\xe3o opcional\u2026"],"Add label\u2026":["Adicionar r\xf3tulo\u2026"],Calendar:["Agenda"],"block style\x04Default":["Padr\xe3o"],Back:["Voltar"],"Max number of words in excerpt":["N\xfamero m\xe1ximo de palavras no resumo"],"Display excerpt":["Exibir resumo"],"Display date":["Exibir data"],"Display author":["Exibir autor"],"Edit RSS URL":["Editar URL do RSS"],"Embed Amazon Kindle content.":["Incorpore conte\xfado do Amazon Kindle"],ebook:["e-book"],"Embed Crowdsignal (formerly Polldaddy) content.":["Incorpore conte\xfado do Crowdsignal (anteriormente conhecido como Polldaddy)."],"Warning: the link has been inserted but may have errors. Please test it.":["Aten\xe7\xe3o: o link foi inserido, mas pode ter erros. \xc9 necess\xe1rio test\xe1-lo."],"%s block selected.":["%s bloco selecionado.","%s blocos selecionados."],Thumbnail:["Miniatura"],"Full Size":["Tamanho completo"],"Align text right":["Alinhar texto \xe0 direita"],"Align text center":["Alinhar texto ao centro"],"Align text left":["Alinhar texto \xe0 esquerda"],"Drag images, upload new ones or select files from your library.":["Arraste imagens, envie novas ou selecione as da sua biblioteca."],"font size name\x04Huge":["Enorme"],"font size name\x04Large":["Grande"],"font size name\x04Medium":["M\xe9dio"],"font size name\x04Small":["Pequeno"],"font size name\x04Normal":["Normal"],"button label\x04Download":["Baixar"],"block title\x04Embed":["M\xeddia incorporada"],"block title\x04Classic":["Cl\xe1ssico"],"Link edited.":["Link editado."],"Link removed.":["Link removido."],Media:["M\xeddia"],"block description\x04Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\xe1zar":["D\xea \xeanfase visual ao texto de cita\xe7\xe3o. \"Ao citar outros, citamos a n\xf3s mesmos.\" \u2014 Julio Cort\xe1zar"],"block description\x04Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":["Apresente novas se\xe7\xf5es e organize os conte\xfados para ajudar os visitantes (e mecanismos de pesquisa) a entender a estrutura do seu conte\xfado."],"Resize for smaller devices":["Ajustar tamanho para dispositivos menores"],"This embed may not preserve its aspect ratio when the browser is resized.":["\xc9 poss\xedvel que esse arquivo incorporado n\xe3o preserve sua propor\xe7\xe3o quando o navegador for redimensionado."],"This embed will preserve its aspect ratio when the browser is resized.":["Esse arquivo incorporado preservar\xe1 sua propor\xe7\xe3o quando o navegador for redimensionado."],"Embed an Animoto video.":["Incorpore um v\xeddeo do Animoto."],"Embed a Vimeo video.":["Incorpore um v\xeddeo do Vimeo."],"Embed Flickr content.":["Incorpore conte\xfado do Flickr."],"Embed Spotify content.":["Incorpore conte\xfado do Spotify."],"Embed SoundCloud content.":["Incorpore conte\xfado do SoundCloud."],"Embed a WordPress post.":["Post do WordPress incorporado."],"Embed a WordPress.tv video.":["Incorpore um v\xeddeo do WordPress.tv."],"Embed a VideoPress video.":["Incorpore um v\xeddeo do VideoPress."],"Embed a Tumblr post.":["Incorpore uma publica\xe7\xe3o do Tumblr."],"Embed a TED video.":["Incorpore um v\xeddeo do TED."],"Embed Speaker Deck content.":["Incorpore conte\xfado do Speaker Deck."],"Embed a YouTube video.":["Incorpore um v\xeddeo do YouTube."],"Embed SmugMug content.":["Incorpore conte\xfado do SmugMug."],"Embed Slideshare content.":["Incorpore conte\xfado do Slideshare."],"Embed Scribd content.":["Incorpore conte\xfado do Scribd."],"Embed Screencast content.":["Incorpore conte\xfado do Screencast."],"Embed ReverbNation content.":["Incorpore conte\xfado do ReverbNaion."],"Embed a Reddit thread.":["Incorpore uma discuss\xe3o no Reddit."],"Embed Mixcloud content.":["Incorpore conte\xfado do Mixcloud."],"Embed a tweet.":["Incorpore um tweet."],"Embed Kickstarter content.":["Incorpore conte\xfado do Kickstarter."],"Embed Issuu content.":["Incorpore conte\xfado do Issuu."],"Embed Imgur content.":["Incorpore conte\xfado do Imgur."],"Embed a Dailymotion video.":["Incorpore um v\xeddeo do Dailymotion."],"Embed CollegeHumor content.":["Incorpore conte\xfado do CollegeHumor."],"Embed Cloudup content.":["Incorpore conte\xfado do Cloudup."],"Insert from URL":["Inserir a partir do URL"],Year:["Ano"],Day:["Dia"],Month:["M\xeas"],"Media area":["\xc1rea de m\xeddia"],"Show media on right":["Mostrar m\xeddia \xe0 direita"],"Show media on left":["Mostrar m\xeddia \xe0 esquerda"],Cover:["Cobertura"],HTML:["HTML"],"Write HTML\u2026":["Escreva HTML\u2026"],"Media settings":["Configura\xe7\xf5es de m\xeddia"],Overlay:["Sobreposi\xe7\xe3o"],Backtick:["Acento grave"],Period:["Ponto"],Comma:["V\xedrgula"],"Change alignment":["Mudar alinhamento"],"Change text alignment":["Mudar alinhamento do texto"],"Row count":["Quantidade de linhas"],"Column count":["Quantidade de colunas"],"block description\x04Create and save content to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":["Crie conte\xfado e salve-o para ser reutilizado em outros lugares do site. Atualize o bloco e as altera\xe7\xf5es ser\xe3o aplicadas em todos os locais que o conte\xfado foi usado."],"Code is Poetry":["C\xf3digo \xe9 poesia"],"Untitled Reusable block":["Bloco reutiliz\xe1vel sem t\xedtulo"],Reusable:["Reutiliz\xe1vel"],"The response is not a valid JSON response.":["A resposta n\xe3o \xe9 um JSON v\xe1lido."],Muted:["Mudo"],"Display avatar":["Exibir avatar"],"Number of comments":["N\xfamero de coment\xe1rios"],Auto:["Auto"],Preload:["Pr\xe9-carregar"],"Cyan bluish gray":["Cinza ciano azulado"],"Vivid cyan blue":["Azul ciano v\xedvido"],"Pale cyan blue":["Azul ciano p\xe1lido"],"Vivid green cyan":["Verde ciano v\xedvido"],"Light green cyan":["Verde ciano claro"],"Luminous vivid amber":["\xc2mbar luminoso v\xedvido"],"Luminous vivid orange":["Laranja v\xedvido luminoso"],"Vivid red":["Vermelho v\xedvido"],"Pale pink":["Rosa p\xe1lido"],"Show download button":["Mostrar bot\xe3o de download"],"Link to":["Apontar para"],File:["Arquivo"],Loop:["Loop"],Autoplay:["Reprodu\xe7\xe3o autom\xe1tica"],"Playback controls":["Controles de reprodu\xe7\xe3o"],"Replace image":["Substituir imagem"],"View the autosave":["Ver o salvamento autom\xe1tico"],"There is an autosave of this post that is more recent than the version below.":["Existe uma vers\xe3o salva automaticamente desta publica\xe7\xe3o que \xe9 mais recente do que a vers\xe3o abaixo."],"Enter URL here\u2026":["Digite o URL aqui..."],"Pin to toolbar":["Fixar na barra de ferramentas"],"Unpin from toolbar":["Desafixar da barra de ferramentas"],"Fixed width table cells":["C\xe9lulas da tabela de largura fixa"],"block description\x04Add a block that displays content pulled from other sites, like Twitter or YouTube.":["Insira um bloco que exibe conte\xfado carregado atrav\xe9s de outros sites, como Twitter ou YouTube."],"Error loading block: %s":["Erro ao carregar o bloco: %s"],"Close plugin":["Fechar plugin"],"Link settings":["Configura\xe7\xf5es do link"],"Page break":["Quebra de p\xe1gina"],Height:["Altura"],Width:["Largura"],"Thumbnails are not cropped.":["Miniaturas n\xe3o s\xe3o cortadas."],"Thumbnails are cropped to align.":["Miniaturas s\xe3o cortadas para alinhar."],"Code editor selected":["Editor de c\xf3digo selecionado"],"Visual editor selected":["Editor visual selecionado"],Plugins:["Plugins"],"Trashing failed":["Falha ao mover para lixeira"],"Updating failed.":["Falha ao atualizar."],"Scheduling failed.":["Falha ao agendar."],"Publishing failed.":["Falha ao publicar."],Embeds:["C\xf3digos incorporados"],Blocks:["Blocos"],Undo:["Desfazer"],Redo:["Refazer"],"Convert to regular blocks":["Converter para bloco normal"],"More options":["Mais op\xe7\xf5es"],Remove:["Remover"],"Copied!":["Copiado!"],Settings:["Configura\xe7\xf5es"],Reset:["Redefinir"],"An unknown error occurred.":["Um erro desconhecido ocorreu."],"No results.":["Nenhum resultado."],"%d result found, use up and down arrow keys to navigate.":["%d resultado encontrado, use as setas para cima e para baixo para navegar.","%d resultados encontrados, use as setas para cima e para baixo para navegar"],"(no title)":["(sem t\xedtulo)"],URL:["URL"],Close:["Fechar"],"Edit link":["Editar link"],Link:["Link"],Strikethrough:["Riscado"],Italic:["It\xe1lico"],Bold:["Negrito"],"Remove link":["Remover link"],"Number of items":["N\xfamero de itens"],All:["Todos"],Category:["Categoria"],"Z \u2192 A":["De Z \xe0 A"],"A \u2192 Z":["De A \xe0 Z"],"Oldest to newest":["Do mais antigo para o mais recente"],"Newest to oldest":["Do mais recente para o mais antigo"],"Order by":["Ordernar por"],Video:["V\xeddeos"],"New Column":["Nova coluna"],"Delete column":["Excluir coluna"],"Delete row":["Excluir linha"],"Edit table":["Editar tabela"],Table:["Tabela"],Shortcode:["Shortcode"],"Write preformatted text\u2026":["Escreva um texto pr\xe9-formatado..."],"Read more":["Leia mais"],"Indent list item":["Avan\xe7ar item da lista"],"Outdent list item":["Recuar item da lista"],"Convert to ordered list":["Converter para lista ordenada"],"Convert to unordered list":["Converter para lista n\xe3o ordenada"],List:["Lista"],"Display post date":["Exibir a data do post"],"Grid view":["Visualiza\xe7\xe3o em grade"],"List view":["Visualiza\xe7\xe3o em lista"],Size:["Tamanho"],Image:["Imagem"],Preview:["Visualizar"],Heading:["T\xedtulo"],"Heading %d":["T\xedtulo %d"],"Heading settings":["Configura\xe7\xf5es do cabe\xe7alho"],None:["Nenhum"],"Media File":["Arquivo de m\xeddia"],"Attachment Page":["P\xe1gina de anexo"],"Crop images":["Recortar imagens"],Gallery:["Galeria"],audio:["\xe1udio"],music:["m\xfasica"],image:["imagem"],blog:["blog"],post:["post"],"Embedded content from %s":["Conte\xfado incorporado de %s"],"Write title\u2026":["Escreva o t\xedtulo..."],"Fixed background":["Fundo fixo"],"Edit image":["Editar imagem"],"%1$s (%2$s)":["%1$s (%2$s)"],Code:["C\xf3digo"],"Write code\u2026":["Escreva o c\xf3digo\u2026"],Categories:["Categorias"],"Show hierarchy":["Mostrar hierarquia"],"Show post counts":["Mostrar n\xfamero de posts"],"Display as dropdown":["Mostrar como lista suspensa"],"Add text\u2026":["Adicionar texto..."],Apply:["Aplicar"],"Text color":["Cor do texto"],"Block has been deleted or is unavailable.":["O bloco foi exclu\xeddo ou est\xe1 indispon\xedvel."],"Reusable blocks":["Blocos reutiliz\xe1veis"],Cancel:["Cancelar"],Edit:["Editar"],"Use URL":["Usar URL"],Audio:["\xc1udios"],"HTML anchor":["\xc2ncora de HTML"],"Full width":["Largura total"],"Wide width":["Largura ampla"],Widgets:["Widgets"],"Align right":["Alinhar \xe0 direita"],"Align center":["Alinhar ao centro"],"Align left":["Alinhar \xe0 esquerda"],"Add title":["Adicionar t\xedtulo"],Comment:["Comentar"],Metadata:["Metadados"],"Select Category":["Selecionar categoria"],"(Untitled)":["(Sem t\xedtulo)"]}},1343,[]); @@ -2731,7 +2731,7 @@ __d(function(g,r,i,a,m,_e,d){var e=r(d[0]);Object.defineProperty(_e,"__esModule" __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=r(d[1]),n=r(d[2]),o=r(d[3]),c=t(r(d[4])),u=t(r(d[5])),s=r(d[6]);var k=(0,n.withSelect)(function(t,l){var n=l.rootClientId,c=t(s.store),u=c.getBlockOrder,k=c.canInsertBlockType;return{isLocked:!!(0,c.getTemplateLock)(n),blockClientIds:u(n),canInsertDefaultBlock:k((0,o.getDefaultBlockName)(),n)}})(function(t){var n=t.blockClientIds,o=t.rootClientId,s=t.canInsertDefaultBlock,k=t.isLocked,f=t.renderAppender,p=t.showSeparator;return k?null:f?(0,l.createElement)(f,{showSeparator:p}):s?(0,l.createElement)(c.default,{rootClientId:o,lastBlockClientId:n[n.length-1],containerStyle:u.default.blockListAppender,placeholder:n.length>0?'':null,showSeparator:p}):null});e.default=k},2725,[3,683,1360,1358,2719,2726,2628]); __d(function(g,r,i,a,m,e,d){m.exports={blockListAppender:{paddingLeft:16,paddingRight:16,paddingTop:12,paddingBottom:0,borderColor:"transparent"}}},2726,[]); __d(function(g,r,i,a,m,_e,d){var e=r(d[0]);Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.BlockListItem=void 0;var t=r(d[1]),n=e(r(d[2])),l=e(r(d[3])),o=e(r(d[4])),s=e(r(d[5])),u=e(r(d[6])),c=e(r(d[7])),f=e(r(d[8])),h=r(d[9]),p=r(d[10]),k=r(d[11]),b=r(d[12]),v=e(r(d[13])),y=e(r(d[14])),I=e(r(d[15])),B=e(r(d[16])),w=r(d[17]),C=["blockAlignment","clientId","isReadOnly","shouldShowInsertionPointBefore","shouldShowInsertionPointAfter","contentResizeMode","shouldShowInnerBlockAppender","parentWidth","marginHorizontal","blockName","blockWidth"];function W(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var H={flex:1},P=(function(e){(0,u.default)(P,e);var p,k,w=(p=P,k=W(),function(){var e,t=(0,f.default)(p);if(k){var n=(0,f.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,c.default)(this,e)});function P(){return(0,o.default)(this,P),w.apply(this,arguments)}return(0,s.default)(P,[{key:"getMarginHorizontal",value:function(){var e=this.props,t=e.blockAlignment,n=e.marginHorizontal,l=e.parentBlockAlignment,o=e.hasParents,s=e.blockName,u=e.parentBlockName,c=e.parentWidth,f=e.blockWidth,p=b.alignmentHelpers.isFullWidth,k=b.alignmentHelpers.isWideWidth,v=b.alignmentHelpers.isWider,y=b.alignmentHelpers.isContainerRelated;if(p(t))return o?n:0;if(k(t))return n;var I=Math.floor(h.Dimensions.get('window').width);if(p(l)&&!v(f,'medium'))return y(s)||v(I,'mobile')?n:2*n;if(y(u)&&!y(s)&&(c===I||v(I,'mobile')))return n;return n}},{key:"getContentStyles",value:function(e){var t=this.props,n=t.blockAlignment,l=t.blockName,o=t.hasParents,s=t.parentBlockName,u=b.alignmentHelpers.isFullWidth,c=b.alignmentHelpers.isContainerRelated;return[e,u(n)&&!o&&{width:B.default.fullAlignment.width},!n&&o&&!c(s)&&c(l)&&{paddingHorizontal:B.default.fullAlignmentPadding.paddingLeft}]}},{key:"renderContent",value:function(){var e=this.props,o=e.blockAlignment,s=e.clientId,u=e.isReadOnly,c=e.shouldShowInsertionPointBefore,f=e.shouldShowInsertionPointAfter,p=e.contentResizeMode,k=e.shouldShowInnerBlockAppender,I=e.parentWidth,B=e.marginHorizontal,w=e.blockName,W=e.blockWidth,P=(0,l.default)(e,C),A='stretch'===p&&H,R=b.alignmentHelpers.isContainerRelated;return(0,t.createElement)(b.ReadableContentView,{align:o,style:[A,R(w)&&I&&{maxWidth:I+2*B}]},(0,t.createElement)(h.View,{style:this.getContentStyles(A),pointerEvents:u?'box-only':'auto'},c&&(0,t.createElement)(y.default,null),(0,t.createElement)(v.default,(0,n.default)({key:s,showTitle:!1,clientId:s,parentWidth:I},P,{marginHorizontal:this.getMarginHorizontal(),blockWidth:W})),!k()&&f&&(0,t.createElement)(y.default,null)))}},{key:"render",value:function(){var e=this.props,n=e.parentWidth,l=e.blockWidth,o=e.isGridItem;if(!l)return null;if(o){var s=this.props,u=s.numOfColumns,c=s.tileCount,f=s.tileIndex;return(0,t.createElement)(I.default,{maxWidth:n,numOfColumns:u,tileCount:c,index:f},this.renderContent())}return this.renderContent()}}]),P})(t.Component);_e.BlockListItem=P;var A=(0,k.compose)([(0,p.withSelect)(function(e,t){var n=t.rootClientId,l=t.isStackedHorizontally,o=t.clientId,s=e(w.store),u=s.getBlockOrder,c=s.getBlockInsertionPoint,f=s.isBlockInsertionPointVisible,h=s.getSettings,p=s.getBlockParents,k=s.getBlock,b=u(n),v=c(),y=f(),I=!l&&y&&v.rootClientId===n&&(0===b.length||b[v.index]===o),B=!l&&y&&v.rootClientId===n&&b.length===v.index&&b[v.index-1]===o,C=h().readOnly,W=k(o)||{},H=W.attributes,P=W.name,A=(H||{}).align,R=p(o,!0),S=!!R.length,x=S?k(R[0]):{};return{shouldShowInsertionPointBefore:I,shouldShowInsertionPointAfter:B,isReadOnly:C,hasParents:S,blockAlignment:A,parentBlockAlignment:((null==x?void 0:x.attributes)||{}).align,blockName:P,parentBlockName:(x||{}).name}})])(P);_e.default=A},2727,[3,683,29,4,6,7,8,10,13,17,1360,1385,1705,2728,2714,2756,2757,2628]); -__d(function(g,r,i,a,m,_e,d){var e=r(d[0]);Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var t=r(d[1]),l=e(r(d[2])),o=e(r(d[3])),n=e(r(d[4])),c=e(r(d[5])),s=e(r(d[6])),u=e(r(d[7])),f=e(r(d[8])),h=r(d[9]),k=r(d[10]),p=r(d[11]),B=r(d[12]),b=r(d[13]),y=r(d[14]),v=r(d[15]),S=e(r(d[16])),I=e(r(d[17])),W=e(r(d[18])),C=e(r(d[19])),E=r(d[20]),T=e(r(d[21]));function w(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var R=[];function F(e){var l=e.attributes,o=e.clientId,n=e.contentStyle,c=e.getBlockWidth,s=e.insertBlocksAfter,u=e.isSelected,f=e.mergeBlocks,B=e.name,b=e.onBlockFocus,y=e.onChange,S=e.onDeleteBlock,W=e.onReplace,C=e.parentWidth,E=e.parentBlockAlignment,T=e.wrapperProps,w=e.blockWidth,F=e.baseGlobalStyles,A=(0,p.useMobileGlobalStylesColors)(),x=(0,v.useSetting)('typography.fontSizes')||R,P=(0,p.useGlobalStyles)(),V=(0,t.useMemo)(function(){return(0,p.getMergedGlobalStyles)(F,P,T.style,l,A,B,x)},[A,P,JSON.stringify(T.style),JSON.stringify((0,k.pick)(l,p.GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES))]);return(0,t.createElement)(p.GlobalStylesContext.Provider,{value:V},(0,t.createElement)(I.default,{name:B,isSelected:u,attributes:l,setAttributes:y,onFocus:b,onReplace:W,insertBlocksAfter:s,mergeBlocks:f,wrapperProps:T,style:V,clientId:o,parentWidth:C,contentStyle:n,onDeleteBlock:S,blockWidth:w,parentBlockAlignment:E}),(0,t.createElement)(h.View,{onLayout:c}))}var A=(function(e){(0,s.default)(v,e);var k,B,b=(k=v,B=w(),function(){var e,t=(0,f.default)(k);if(B){var l=(0,f.default)(this).constructor;e=Reflect.construct(t,arguments,l)}else e=t.apply(this,arguments);return(0,u.default)(this,e)});function v(){var e;return(0,o.default)(this,v),(e=b.apply(this,arguments)).insertBlocksAfter=e.insertBlocksAfter.bind((0,c.default)(e)),e.onFocus=e.onFocus.bind((0,c.default)(e)),e.getBlockWidth=e.getBlockWidth.bind((0,c.default)(e)),e.state={blockWidth:e.props.blockWidth-2*e.props.marginHorizontal},e.anchorNodeRef=(0,t.createRef)(),e}return(0,n.default)(v,[{key:"onFocus",value:function(){var e=this.props,t=e.firstToSelectId,l=e.isSelected,o=e.onSelect;l||o(t)}},{key:"insertBlocksAfter",value:function(e){this.props.onInsertBlocks(e,this.props.order+1),e[0]&&this.props.onSelect(e[0].clientId)}},{key:"getBlockWidth",value:function(e){var t=e.nativeEvent.layout,l=this.state.blockWidth,o=Math.floor(t.width);l&&o&&l!==o&&this.setState({blockWidth:o})}},{key:"getBlockForType",value:function(){var e=this.state.blockWidth;return(0,t.createElement)(F,(0,l.default)({},this.props,{onBlockFocus:this.onFocus,insertBlocksAfter:this.insertBlocksAfter,getBlockWidth:this.getBlockWidth,blockWidth:e}))}},{key:"renderBlockTitle",value:function(){return(0,t.createElement)(h.View,{style:S.default.blockTitle},(0,t.createElement)(h.Text,null,"BlockType: ",this.props.name))}},{key:"render",value:function(){var e=this,l=this.props,o=l.attributes,n=l.blockType,c=l.clientId,s=l.icon,u=l.isSelected,f=l.isValid,k=l.order,B=l.title,b=l.isDimmed,v=l.isTouchable,I=l.onDeleteBlock,E=l.isStackedHorizontally,w=l.isParentSelected,R=l.getStylesFromColorScheme,F=l.marginVertical,A=l.marginHorizontal,x=l.isInnerBlockSelected,P=l.name,V=l.draggingEnabled,D=l.draggingClientId;if(!o||!n)return null;var _=this.state.blockWidth,G=o.align,H=(0,y.__experimentalGetAccessibleBlockLabel)(n,o,k+1),L=p.alignmentHelpers.isFullWidth,M=p.alignmentHelpers.isContainerRelated,N=!(u||x),z=Math.floor(h.Dimensions.get('window').width),O=_===z,J=_0)||I||!b(o,!0),j=v(o);return{icon:x,name:T||'core/missing',order:S,title:A,attributes:w,blockType:F,draggingClientId:j,draggingEnabled:J,isSelected:I,isInnerBlockSelected:W,isValid:R,isParentSelected:M,firstToSelectId:L,isTouchable:z,baseGlobalStyles:O,wrapperProps:V(w,F.getEditWrapperProps)}}),(0,B.withDispatch)(function(e,t,l){var o=l.select,n=e(E.store),c=n.insertBlocks,s=n.mergeBlocks,u=n.replaceBlocks,f=n.selectBlock,h=n.updateBlockAttributes;return{mergeBlocks:function(e){var l=t.clientId,n=o(E.store),c=n.getPreviousBlockClientId,u=n.getNextBlockClientId;if(e){var f=u(l);f&&s(l,f)}else{var h=c(l);h&&s(h,l)}},onInsertBlocks:function(e,l){c(e,l,t.rootClientId)},onSelect:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.clientId,l=arguments.length>1?arguments[1]:void 0;f(e,l)},onChange:function(e){h(t.clientId,e)},onReplace:function(e,l){u([t.clientId],e,l)}}}),b.withPreferredColorScheme])(A);_e.default=D},2728,[3,683,29,6,7,12,8,10,13,17,1364,1705,1360,1385,1358,1701,2729,2624,2730,2733,2628,2737]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0]);Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var t=r(d[1]),l=e(r(d[2])),o=e(r(d[3])),n=e(r(d[4])),c=e(r(d[5])),s=e(r(d[6])),u=e(r(d[7])),f=e(r(d[8])),h=r(d[9]),k=r(d[10]),p=r(d[11]),B=r(d[12]),b=r(d[13]),y=r(d[14]),v=r(d[15]),S=e(r(d[16])),I=e(r(d[17])),C=e(r(d[18])),W=e(r(d[19])),T=r(d[20]),E=e(r(d[21]));function w(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var R=[];function F(e){var l=e.attributes,o=e.clientId,n=e.contentStyle,c=e.getBlockWidth,s=e.insertBlocksAfter,u=e.isSelected,f=e.onMerge,B=e.name,b=e.onBlockFocus,y=e.onChange,S=e.onDeleteBlock,C=e.onReplace,W=e.parentWidth,T=e.parentBlockAlignment,E=e.wrapperProps,w=e.blockWidth,F=e.baseGlobalStyles,A=(0,p.useMobileGlobalStylesColors)(),P=(0,v.useSetting)('typography.fontSizes')||R,x=(0,p.useGlobalStyles)(),V=(0,t.useMemo)(function(){return(0,p.getMergedGlobalStyles)(F,x,E.style,l,A,B,P)},[A,x,JSON.stringify(E.style),JSON.stringify((0,k.pick)(l,p.GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES))]);return(0,t.createElement)(p.GlobalStylesContext.Provider,{value:V},(0,t.createElement)(I.default,{name:B,isSelected:u,attributes:l,setAttributes:y,onFocus:b,onReplace:C,insertBlocksAfter:s,mergeBlocks:f,wrapperProps:E,style:V,clientId:o,parentWidth:W,contentStyle:n,onDeleteBlock:S,blockWidth:w,parentBlockAlignment:T}),(0,t.createElement)(h.View,{onLayout:c}))}var A=(function(e){(0,s.default)(v,e);var k,B,b=(k=v,B=w(),function(){var e,t=(0,f.default)(k);if(B){var l=(0,f.default)(this).constructor;e=Reflect.construct(t,arguments,l)}else e=t.apply(this,arguments);return(0,u.default)(this,e)});function v(){var e;return(0,o.default)(this,v),(e=b.apply(this,arguments)).insertBlocksAfter=e.insertBlocksAfter.bind((0,c.default)(e)),e.onFocus=e.onFocus.bind((0,c.default)(e)),e.getBlockWidth=e.getBlockWidth.bind((0,c.default)(e)),e.state={blockWidth:e.props.blockWidth-2*e.props.marginHorizontal},e.anchorNodeRef=(0,t.createRef)(),e}return(0,n.default)(v,[{key:"onFocus",value:function(){var e=this.props,t=e.firstToSelectId,l=e.isSelected,o=e.onSelect;l||o(t)}},{key:"insertBlocksAfter",value:function(e){this.props.onInsertBlocks(e,this.props.order+1),e[0]&&this.props.onSelect(e[0].clientId)}},{key:"getBlockWidth",value:function(e){var t=e.nativeEvent.layout,l=this.state.blockWidth,o=Math.floor(t.width);l&&o&&l!==o&&this.setState({blockWidth:o})}},{key:"getBlockForType",value:function(){var e=this.state.blockWidth;return(0,t.createElement)(F,(0,l.default)({},this.props,{onBlockFocus:this.onFocus,insertBlocksAfter:this.insertBlocksAfter,getBlockWidth:this.getBlockWidth,blockWidth:e}))}},{key:"renderBlockTitle",value:function(){return(0,t.createElement)(h.View,{style:S.default.blockTitle},(0,t.createElement)(h.Text,null,"BlockType: ",this.props.name))}},{key:"render",value:function(){var e=this,l=this.props,o=l.attributes,n=l.blockType,c=l.clientId,s=l.icon,u=l.isSelected,f=l.isValid,k=l.order,B=l.title,b=l.isDimmed,v=l.isTouchable,I=l.onDeleteBlock,T=l.isStackedHorizontally,w=l.isParentSelected,R=l.getStylesFromColorScheme,F=l.marginVertical,A=l.marginHorizontal,P=l.isInnerBlockSelected,x=l.name,V=l.draggingEnabled,D=l.draggingClientId;if(!o||!n)return null;var _=this.state.blockWidth,G=o.align,M=(0,y.__experimentalGetAccessibleBlockLabel)(n,o,k+1),O=p.alignmentHelpers.isFullWidth,H=p.alignmentHelpers.isContainerRelated,N=!(u||P),L=Math.floor(h.Dimensions.get('window').width),z=_===L,j=_0)||I||!b(o,!0),J=v(o);return{icon:P,name:E||'core/missing',order:S,title:A,attributes:w,blockType:F,draggingClientId:J,draggingEnabled:j,isSelected:I,isInnerBlockSelected:C,isValid:R,isParentSelected:H,firstToSelectId:O,isTouchable:L,baseGlobalStyles:z,wrapperProps:V(w,F.getEditWrapperProps)}}),(0,B.withDispatch)(function(e,t,l){var o=e(T.store),n=o.insertBlocks,c=o.mergeBlocks,s=o.replaceBlocks,u=o.selectBlock,f=o.updateBlockAttributes,h=o.moveBlocksToPosition,k=o.removeBlock;return{onMerge:function(e){var o=t.clientId,n=t.rootClientId,f=l.select(T.store),p=f.getPreviousBlockClientId,B=f.getNextBlockClientId,b=f.getBlock,v=f.getBlockAttributes,S=f.getBlockName,I=f.getBlockOrder;if(e){if(n){var C=B(n);if(C){if(S(n)!==S(C))return void c(n,C);var W=v(n),E=v(C);if(Object.keys(W).every(function(e){return W[e]===E[e]}))return void l.batch(function(){h(I(C),C,n),k(C,!1)})}}var w=B(o);if(!w)return;var R=(0,y.switchToBlockType)(b(w),'*');R&&R.length?s(w,R):c(o,w)}else{var F=p(o);if(F)c(F,o);else if(n){var A=p(n);if(A&&S(n)===S(A)){var P=v(n),x=v(A);if(Object.keys(P).every(function(e){return P[e]===x[e]}))return void l.batch(function(){h(I(n),n,A),k(n,!1)})}var V=(0,y.switchToBlockType)(b(n),'*');V&&V.length&&l.batch(function(){s(n,V),u(V[0].clientId,0)})}}},onInsertBlocks:function(e,l){n(e,l,t.rootClientId)},onSelect:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.clientId,l=arguments.length>1?arguments[1]:void 0;u(e,l)},onChange:function(e){f(t.clientId,e)},onReplace:function(e,l){s([t.clientId],e,l)}}}),b.withPreferredColorScheme])(A);_e.default=D},2728,[3,683,29,6,7,12,8,10,13,17,1364,1705,1360,1385,1358,1701,2729,2624,2730,2733,2628,2737]); __d(function(g,r,i,a,m,e,d){m.exports={blockHolder:{flexGrow:1,flexShrink:1,flexBasis:"auto"},solidBorderColor:{borderColor:"#0087be"},solidBorderColorDark:{borderColor:"#5198d9"},dashedBorderColor:{borderColor:"#87a6bc"},dashedBorderColorDark:{borderColor:"#3c434a"},borderFullWidth:{left:0,right:0},containerBorderFullWidth:{left:-6,right:-6},dimmed:{opacity:1},blockTitle:{backgroundColor:"#87a6bc",paddingLeft:8,paddingTop:4,paddingBottom:4},aztec_container:{flexGrow:1,flexShrink:1,flexBasis:0},blockCode:{fontFamily:"menlo"},blockText:{minHeight:50},neutralToolbar:{marginLeft:-16,marginRight:-16},solidBorder:{position:"absolute",top:-12,bottom:0,left:-12,right:-12,borderWidth:1,borderRadius:4,borderStyle:"solid",zIndex:1},dashedBorder:{position:"absolute",top:-6,bottom:-6,left:-6,right:-6,borderWidth:1,borderRadius:2,borderStyle:"dashed"},fullWidthPadding:{paddingTop:12,paddingRight:12,paddingBottom:12,paddingLeft:12}}},2729,[]); __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var k=t.blockTitle,f=t.icon,_=t.clientId,p=(0,n.sprintf)((0,n.__)('%s block. This block has invalid content'),k),v=(0,o.useSelect)(function(t){return{block:(0,t(b.store).getBlock)(_)}},[_]).block,h=(0,o.useDispatch)(b.store).replaceBlock,y=function(t){var c=t.name,l=t.attributes,n=t.innerBlocks;return(0,s.createBlock)(c,l,n)};return(0,c.createElement)(l.TouchableWithoutFeedback,{onPress:function(){h(v.clientId,y(v))},accessible:!0,accessibilityRole:'button'},(0,c.createElement)(u.default,{title:k,message:(0,n.__)('Problem displaying block. \nTap to attempt block recovery.'),icon:f,accessibilityLabel:p}))};var c=r(d[1]),l=r(d[2]),n=r(d[3]),o=r(d[4]),s=r(d[5]),u=t(r(d[6])),b=r(d[7])},2730,[3,683,17,1296,1360,1358,2731,2628]); __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=r(d[1]),o=t(r(d[2])),c=t(r(d[3])),n=r(d[4]),s=r(d[5]),f=r(d[6]),u=r(d[7]),v=t(r(d[8])),y=["title","message","icon","iconClass","preferredColorScheme","getStylesFromColorScheme"];var C=(0,f.withPreferredColorScheme)(function(t){var f=t.title,C=t.message,S=t.icon,h=t.iconClass,E=t.preferredColorScheme,w=t.getStylesFromColorScheme,_=(0,c.default)(t,y);S=S&&(0,u.normalizeIconObject)(S);var k="warning-icon-"+E,p=w(v.default.title,v.default.titleDark),D=w(v.default.message,v.default.messageDark);return(0,l.createElement)(n.View,(0,o.default)({style:w(v.default.container,v.default.containerDark)},_),S&&(0,l.createElement)(n.View,{style:v.default.icon},(0,l.createElement)(s.Icon,{className:h||k,icon:S&&S.src?S.src:S})),f&&(0,l.createElement)(n.Text,{style:p},f),C&&(0,l.createElement)(n.Text,{style:D},C))});e.default=C},2731,[3,683,29,4,17,1705,1385,1358,2732]); @@ -2762,7 +2762,7 @@ __d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.d __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=r(d[1]),n=r(d[2]),o=t(r(d[3]));var u=function(t){var u=t.numOfColumns,f=t.children,v=t.tileCount,c=t.index,h=t.maxWidth,_=v-1,s=Math.floor(_/u),M=Math.floor(c/u)===s?_%u+1:u;return(0,l.createElement)(n.View,{style:[{width:h/M},o.default.gridItem]},f)};e.default=u},2756,[3,683,17,2757]); __d(function(g,r,i,a,m,e,d){m.exports={stretch:{flexGrow:1,flexShrink:1,flexBasis:0},fullAlignment:{marginLeft:0,width:"100%"},fullAlignmentPadding:{paddingTop:16,paddingRight:16,paddingBottom:16,paddingLeft:16},gridItem:{overflow:"visible"}}},2757,[]); __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[1]),o=t(r(d[2])),u=r(d[3]),l=r(d[4]);var c=function(t){var c=t.children,f=t.clientId,v=t.rootClientId,s=t.onLayout,y=(0,l.useBlockListContext)(),I=y.blocksLayouts,L=y.updateBlocksLayouts;(0,n.useEffect)(function(){return function(){L(I,{clientId:f,shouldRemove:!0})}},[]);var k=(0,n.useCallback)(function(t){var n=t.nativeEvent.layout;L(I,(0,o.default)({clientId:f,rootClientId:v},n)),s&&s(t)},[f,v,L,s]);return(0,n.createElement)(u.View,{onLayout:k},c)};e.default=c},2758,[3,683,29,17,2739]); -__d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=r(d[1]),n=r(d[2]),o=r(d[3]),c=r(d[4]),u=t(r(d[5])),f=t(r(d[6]));var s=function(t){var s=t.marginHorizontal,v=void 0===s?u.default.defaultBlock.marginLeft:s,k=t.marginVertical,p=void 0===k?u.default.defaultBlock.marginTop:k,I=t.rootClientId,b=(0,c.useSelect)(function(t){return{blockClientIds:(0,t(o.store).getBlockOrder)(I)}},[I]).blockClientIds,V={marginVertical:-p,marginHorizontal:-v};return(0,l.createElement)(n.View,{style:V,testID:"block-list-wrapper"},b.map(function(t){return(0,l.createElement)(f.default,{clientId:t,key:t,marginHorizontal:v,marginVertical:p})}))};e.default=s},2759,[3,683,17,1701,1360,2715,2728]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=r(d[1]),n=r(d[2]),o=r(d[3]),c=r(d[4]),u=t(r(d[5])),f=t(r(d[6]));var s=function(t){var s=t.marginHorizontal,v=void 0===s?u.default.defaultBlock.marginLeft:s,k=t.marginVertical,I=void 0===k?u.default.defaultBlock.marginTop:k,p=t.rootClientId,b=(0,c.useSelect)(function(t){return{blockClientIds:(0,t(o.store).getBlockOrder)(p)}},[p]).blockClientIds,C={marginVertical:-I,marginHorizontal:-v};return(0,l.createElement)(n.View,{style:C,testID:"block-list-wrapper"},b.map(function(t){return(0,l.createElement)(f.default,{clientId:t,rootClientId:p,key:t,marginHorizontal:v,marginVertical:I})}))};e.default=s},2759,[3,683,17,1701,1360,2715,2728]); __d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(l){var s=l.clientId,f=void 0===s?null:s,v=l.value,k=l.selection,B=l.onChange,I=void 0===B?u:B,h=l.onInput,C=void 0===h?u:h,S=(0,t.useRegistry)(),_=S.dispatch(c.store),E=_.resetBlocks,b=_.resetSelection,p=_.replaceInnerBlocks,P=_.setHasControlledInnerBlocks,R=_.__unstableMarkNextChangeAsNotPersistent,N=S.select(c.store),y=N.getBlockName,L=N.getBlocks,M=(0,t.useSelect)(function(n){return!f||n(c.store).areInnerBlocksControlled(f)},[f]),j=(0,n.useRef)({incoming:null,outgoing:[]}),x=(0,n.useRef)(!1),A=function(){v&&(R(),f?S.batch(function(){P(f,!0);var n=v.map(function(n){return(0,o.cloneBlock)(n)});x.current&&(j.current.incoming=n),R(),p(f,n)}):(x.current&&(j.current.incoming=v),E(v)))},H=(0,n.useRef)(C),O=(0,n.useRef)(I);(0,n.useEffect)(function(){H.current=C,O.current=I},[C,I]),(0,n.useEffect)(function(){j.current.outgoing.includes(v)?j.current.outgoing[j.current.outgoing.length-1]===v&&(j.current.outgoing=[]):L(f)!==v&&(j.current.outgoing=[],A(),k&&b(k.selectionStart,k.selectionEnd,k.initialPosition))},[v,f]),(0,n.useEffect)(function(){M||(j.current.outgoing=[],A())},[M]),(0,n.useEffect)(function(){var n=S.select(c.store),t=n.getSelectionStart,o=n.getSelectionEnd,u=n.getSelectedBlocksInitialCaretPosition,l=n.isLastBlockChangePersistent,s=n.__unstableIsLastBlockChangeIgnored,v=n.areInnerBlocksControlled,k=L(f),B=l(),I=!1;x.current=!0;var h=S.subscribe(function(){if(null===f||null!==y(f)){var n=!f||v(f);if(n){var c=l(),h=L(f),C=h!==k;if(k=h,C&&(j.current.incoming||s()))return j.current.incoming=null,void(B=c);var S=I&&!C&&c&&!B;if(C||S){B=c,j.current.outgoing.push(k);var _=B?O.current:H.current;_(k,{selection:{selectionStart:t(),selectionEnd:o(),initialPosition:u()}})}I=C}}});return function(){return h()}},[S,f])};var n=r(d[0]),t=r(d[1]),o=r(d[2]),c=r(d[3]),u=function(){}},2760,[683,1360,1358,2628]); __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.JustifyToolbar=e.JustifyContentControl=void 0;var o=r(d[1]),n=t(r(d[2])),u=t(r(d[3]));e.JustifyContentControl=function(t){return(0,o.createElement)(u.default,(0,n.default)({},t,{isToolbar:!1}))};e.JustifyToolbar=function(t){return(0,o.createElement)(u.default,(0,n.default)({},t,{isToolbar:!0}))}},2761,[3,683,29,2762]); __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[1]),o=t(r(d[2])),c=r(d[3]),l=r(d[4]),s=r(d[5]),u={left:l.justifyLeft,center:l.justifyCenter,right:l.justifyRight,'space-between':l.justifySpaceBetween};var f=function(t){var f=t.allowedControls,p=void 0===f?['left','center','right','space-between']:f,v=t.isCollapsed,_=void 0===v||v,y=t.onChange,b=t.value,C=t.popoverProps,h=t.isToolbar,j=function(t){y(t===b?void 0:t)},w=b?u[b]:u.left,k=[{name:'left',icon:l.justifyLeft,title:(0,s.__)('Justify items left'),isActive:'left'===b,onClick:function(){return j('left')}},{name:'center',icon:l.justifyCenter,title:(0,s.__)('Justify items center'),isActive:'center'===b,onClick:function(){return j('center')}},{name:'right',icon:l.justifyRight,title:(0,s.__)('Justify items right'),isActive:'right'===b,onClick:function(){return j('right')}},{name:'space-between',icon:l.justifySpaceBetween,title:(0,s.__)('Space between items'),isActive:'space-between'===b,onClick:function(){return j('space-between')}}],A=h?c.ToolbarGroup:c.ToolbarDropdownMenu,J=h?{isCollapsed:_}:{};return(0,n.createElement)(A,(0,o.default)({icon:w,popoverProps:C,label:(0,s.__)('Change items justification'),controls:k.filter(function(t){return p.includes(t.name)})},J))};e.default=f},2762,[3,683,29,1705,1905,1296]); @@ -3175,7 +3175,7 @@ __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{ __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(r(d[1])),o=t(r(d[2])),c=r(d[3]),l=r(d[4]);function u(t){var n=t.phrasingContentSchema,c=(0,o.default)({},n,{ul:{},ol:{attributes:['type','start','reversed']}});return['ul','ol'].forEach(function(t){c[t].children={li:{children:c}}}),c}function f(t){return t.flatMap(function(t){var o=t.name,c=t.attributes,l=t.innerBlocks,u=void 0===l?[]:l;return'core/list-item'===o?[c.content].concat((0,n.default)(f(u))):f(u)})}var s={from:[{type:'block',isMultiBlock:!0,blocks:['core/paragraph','core/heading'],transform:function(t){var n=[];if(t.length>1)n=t.map(function(t){var n=t.content;return(0,c.createBlock)('core/list-item',{content:n})});else if(1===t.length){var o=(0,l.create)({html:t[0].content});n=(0,l.split)(o,'\n').map(function(t){return(0,c.createBlock)('core/list-item',{content:(0,l.toHTMLString)({value:t})})})}return(0,c.createBlock)('core/list',{anchor:t.anchor},n)}},{type:'raw',selector:'ol,ul',schema:function(t){return{ol:u(t).ol,ul:u(t).ul}},transform:r(d[5]).createListBlockFromDOMElement}].concat((0,n.default)(['*','-'].map(function(t){return{type:'prefix',prefix:t,transform:function(t){return(0,c.createBlock)('core/list',{},[(0,c.createBlock)('core/list-item',{content:t})])}}})),(0,n.default)(['1.','1)'].map(function(t){return{type:'prefix',prefix:t,transform:function(t){return(0,c.createBlock)('core/list',{ordered:!0},[(0,c.createBlock)('core/list-item',{content:t})])}}}))),to:[].concat((0,n.default)(['core/paragraph','core/heading'].map(function(t){return{type:'block',blocks:[t],transform:function(n,o){return f(o).map(function(n){return(0,c.createBlock)(t,{content:n})})}}})),[{type:'block',blocks:['*'],transform:function(t,n){return f(n).map(function(t){return(0,c.createBlock)('core/paragraph',{content:t})})}}])};e.default=s},3169,[3,53,29,1358,1657,3162]); __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.init=void 0,Object.defineProperty(e,"metadata",{enumerable:!0,get:function(){return o.default}}),e.settings=e.name=void 0;var n=t(r(d[1])),u=r(d[2]),f=t(r(d[3])),o=t(r(d[4])),l=t(r(d[5])),c=t(r(d[6])),s=o.default.name;e.name=s;var v={icon:u.listItem,edit:l.default,save:c.default,merge:function(t,u){return(0,n.default)({},t,{content:t.content+u.content})}};e.settings=v;e.init=function(){return(0,f.default)({name:s,metadata:o.default,settings:v})}},3170,[3,29,1905,2966,3171,3172,3186]); __d(function(t,e,i,s,r,o,l){r.exports={$schema:"https://schemas.wp.org/trunk/block.json",apiVersion:2,name:"core/list-item",title:"List item",category:"text",parent:["core/list"],description:"Create a list item.",textdomain:"default",attributes:{placeholder:{type:"string"},content:{type:"string",source:"html",selector:"li",default:"",__experimentalRole:"content"}},supports:{className:!1,__experimentalSelector:"li"}}},3171,[]); -__d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var w,y,E=t.attributes,B=t.setAttributes,C=t.onReplace,L=t.clientId,x=t.style,S=(0,l.useState)(),P=(0,n.default)(S,2),R=P[0],V=P[1],M=E.placeholder,O=E.content,T=(0,k.useSelect)(function(t){var l=t(s.store),o=l.getBlockAttributes,n=l.getBlockCount,c=l.getBlockIndex,u=l.getBlockParentsByBlockName,f=l.getBlockRootClientId,k=u(L,'core/list-item',!0).length,v=c(L),p=n(L)>0,b=f(L),_=o(b),I=n(b),h=_||{},w=h.ordered,y=h.reversed,E=h.start;return{blockIndex:v,hasInnerBlocks:p,indentationLevel:k,numberOfListItems:I,ordered:w,reversed:y,start:E}},[L]),A=T.blockIndex,N=T.hasInnerBlocks,j=T.indentationLevel,U=T.numberOfListItems,W=T.ordered,q=T.reversed,z=T.start,D=(0,s.useBlockProps)((0,o.default)({},N&&_.default['wp-block-list-item__nested-blocks'])),F=(0,s.useInnerBlocksProps)(D,{allowedBlocks:['core/list'],useCompactList:!0}),G=(0,f.usePreferredColorSchemeStyle)(_.default['wp-block-list-item__list-item-placeholder'],_.default['wp-block-list-item__list-item-placeholder--dark']),H=(null==x?void 0:x.color)||(null==x?void 0:null==(w=x.baseColors)?void 0:null==(y=w.color)?void 0:y.text),J=(H||(null==G?void 0:G.color))+h,K=(0,o.default)({},x,(null==x?void 0:x.color)&&{placeholderColor:x.color+h}),Q=(0,l.useRef)(!1),X=(0,v.useEnter)({content:O,clientId:L},Q).onEnter,Y=(0,v.useSplit)(L),Z=(0,v.useMerge)(L),$=(0,l.useCallback)(function(t){if(!Q.current)return Y(t)},[L,Y]),ee=(0,l.useCallback)(function(t){if(!Q.current){for(var l=arguments.length,o=new Array(l>1?l-1:0),n=1;n0,b=f(L),_=o(b),I=n(b),h=_||{},w=h.ordered,y=h.reversed,B=h.start;return{blockIndex:v,hasInnerBlocks:p,indentationLevel:k,numberOfListItems:I,ordered:w,reversed:y,start:B}},[L]),N=A.blockIndex,j=A.hasInnerBlocks,U=A.indentationLevel,W=A.numberOfListItems,q=A.ordered,z=A.reversed,D=A.start,F=(0,s.useBlockProps)((0,o.default)({},j&&_.default['wp-block-list-item__nested-blocks'])),G=(0,s.useInnerBlocksProps)(F,{allowedBlocks:['core/list'],useCompactList:!0}),H=(0,f.usePreferredColorSchemeStyle)(_.default['wp-block-list-item__list-item-placeholder'],_.default['wp-block-list-item__list-item-placeholder--dark']),J=(null==x?void 0:x.color)||(null==x?void 0:null==(w=x.baseColors)?void 0:null==(y=w.color)?void 0:y.text),K=(J||(null==H?void 0:H.color))+h,Q=(0,o.default)({},x,(null==x?void 0:x.color)&&{placeholderColor:x.color+h}),X=(0,l.useRef)(!1),Y=(0,v.useEnter)({content:T,clientId:L},X).onEnter,Z=(0,v.useSplit)(L),$=(0,v.useMerge)(L,S),ee=(0,l.useCallback)(function(t){if(!X.current)return Z(t)},[L,Z]),te=(0,l.useCallback)(function(t){if(!X.current){for(var l=arguments.length,o=new Array(l>1?l-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:y();if((n=(0,t.castArray)(n)).length){var o=n[0];if(_(o)===s.name){var c=N(o);if(c){var u=O(o),f=n[n.length-1],v=b(u),C=v.slice(p(f)+1);k.batch(function(){if(C.length){var t=b(o)[0];if(!t){var s=(0,l.cloneBlock)(R(u),{},[]);t=s.clientId,I(s,0,o,!1),S(t,L(u))}B(C,u,t)}B(n,u,O(c),p(c)+1),b(u).length||h(u)})}}}},[])]};var t=r(d[0]),n=r(d[1]),o=r(d[2]),c=r(d[3]),l=r(d[4]),s=r(d[5])},3174,[1364,683,1360,1701,1358,3171]); __d(function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var u=(0,c.useSelect)(function(l){return l(o.store).getBlockIndex(t)>0},[t]),f=(0,c.useDispatch)(o.store),k=f.replaceBlocks,B=f.selectionChange,I=f.multiSelect,S=(0,c.useSelect)(o.store),h=S.getBlock,p=S.getPreviousBlockClientId,v=S.getSelectionStart,C=S.getSelectionEnd,_=S.hasMultiSelection,b=S.getMultiSelectedBlockClientIds;return[u,(0,n.useCallback)(function(){var n,c,o=_(),u=o?b():[t],f=u.map(function(t){return(0,s.cloneBlock)(h(t))}),S=p(t),y=(0,s.cloneBlock)(h(S));null!=(n=y.innerBlocks)&&n.length||(y.innerBlocks=[(0,s.createBlock)('core/list')]),(c=y.innerBlocks[y.innerBlocks.length-1].innerBlocks).push.apply(c,(0,l.default)(f));var M=v(),P=C();k([S].concat((0,l.default)(u)),[y]),o?I(f[0].clientId,f[f.length-1].clientId):B(f[0].clientId,P.attributeKey,P.clientId===M.clientId?M.offset:P.offset,P.offset)},[t])]};var l=t(r(d[1])),n=r(d[2]),c=r(d[3]),o=r(d[4]),s=r(d[5])},3175,[3,53,683,1360,1701,1358]); diff --git a/bundle/ios/App.js.map b/bundle/ios/App.js.map index b092a39e9a..f13f744366 100644 --- a/bundle/ios/App.js.map +++ b/bundle/ios/App.js.map @@ -1 +1 @@ -{"version":3,"sources":["__prelude__","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/metro-runtime/src/polyfills/require.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native/polyfills/console.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native/polyfills/error-guard.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native/polyfills/Object.es8.js","/Users/fluiddot/workspace/gutenberg-mobile/index.js","/Users/fluiddot/workspace/gutenberg-mobile/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/interopRequireDefault.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/classCallCheck.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/createClass.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/inherits.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/setPrototypeOf.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/typeof.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/assertThisInitialized.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/getPrototypeOf.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/init.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/eventReceiver.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/invariant/browser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/warnOnce.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/vendor/emitter/_EventEmitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/vendor/emitter/_EmitterSubscription.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/vendor/emitter/_EventSubscription.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/vendor/emitter/_EventSubscriptionVendor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Renderer/shims/ReactNative.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/extends.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactPrivate/ReactNativePrivateInitializeCore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/InitializeCore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpGlobals.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpPerformance.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpSystrace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Performance/Systrace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpErrorHandling.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/ExceptionsManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/wrapNativeSuper.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/isNativeFunction.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/construct.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/NativeExceptionsManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/TurboModule/TurboModuleRegistry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/BatchedBridge/NativeModules.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/slicedToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/arrayWithHoles.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/nonIterableRest.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/BatchedBridge/BatchedBridge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/toConsumableArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/iterableToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/nonIterableSpread.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/vendor/core/ErrorUtils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/stringifySafe.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/defineLazyObjectProperty.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/Platform.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/NativePlatformConstantsIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/Devtools/parseErrorStack.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/Devtools/parseHermesStack.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/stacktrace-parser/dist/stack-trace-parser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/polyfillPromise.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/PolyfillFunctions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Promise.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/node_modules/promise/setimmediate/es6-extensions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/node_modules/promise/setimmediate/core.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/node_modules/promise/setimmediate/done.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/node_modules/promise/setimmediate/finally.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpRegeneratorRuntime.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/regenerator/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/regenerator-runtime/runtime.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/FeatureDetection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpTimers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/Timers/JSTimers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/Timers/NativeTiming.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/Timers/immediateShim.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/Timers/queueMicrotask.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpXHR.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Network/XMLHttpRequest.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/get.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/superPropBase.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Blob/BlobManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Blob/NativeBlobModule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Blob/Blob.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Blob/BlobRegistry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/event-target-shim/dist/event-target-shim.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/GlobalPerformanceLogger.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/createPerformanceLogger.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/infoLog.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Network/RCTNetworking.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Network/NativeNetworkingIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Network/convertRequestBody.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/binaryToBase64.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/base64-js/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Network/FormData.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Network/fetch.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-fetch/dist/fetch.umd.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/WebSocket/WebSocket.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/WebSocket/NativeWebSocketModule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/WebSocket/WebSocketEvent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Blob/File.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Blob/FileReader.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Blob/NativeFileReaderModule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Blob/URL.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/abort-controller/dist/abort-controller.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpAlert.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Alert/Alert.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Alert/RCTAlertManager.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Alert/NativeAlertManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpNavigator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpBatchedBridge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/HeapCapture/HeapCapture.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/HeapCapture/NativeJSCHeapCapture.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Performance/SamplingProfiler.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Performance/NativeJSCSamplingProfiler.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/RCTLog.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/EventEmitter/RCTNativeAppEventEmitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/JSDevSupportModule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/NativeJSDevSupport.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/HMRClientProdShim.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/setUpSegmentFetcher.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactPrivate/ReactNativePrivateInterface.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/EventEmitter/RCTEventEmitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/TextInputState.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/codegenNativeCommands.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/AndroidTextInputViewConfig.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/View/ReactNativeViewViewConfig.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/View/ReactNativeViewViewConfigAndroid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/processColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/normalizeColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native/normalize-color/base.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/PlatformColorValueTypes.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/differ/insetsDiffer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/differ/sizesDiffer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/differ/matricesDiffer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/processTransform.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/MatrixMath.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/NativeComponent/NativeComponentRegistry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/NativeComponent/ViewConfig.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/UIManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/UIManagerInjection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/DummyUIManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/PaperUIManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/NativeUIManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/UIManagerProperties.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/getNativeComponentAttributes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/View/ReactNativeStyleAttributes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/differ/pointsDiffer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/processColorArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/resolveAssetSource.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native/assets/registry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/AssetSourceResolver.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/PixelRatio.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/Dimensions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/NativeDeviceInfo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/AssetUtils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native/assets/path-support.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/NativeModules/specs/NativeSourceCode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/verifyComponentAttributeEquivalence.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react/cjs/react.production.min.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/object-assign/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/RCTTextInputViewConfig.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/differ/deepDiffer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/flattenStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/ReactFiberErrorDialog.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/scheduler/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/scheduler/cjs/scheduler.production.min.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ActivityIndicator/ActivityIndicator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/StyleSheet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/View/View.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/View/ViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Text/TextAncestor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/UnimplementedViews/UnimplementedView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/codegenNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/requireNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Renderer/shims/createReactNativeComponentClass.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Button.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Text/Text.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedTextPropTypes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedColorPropType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedEdgeInsetsPropType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/prop-types/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/prop-types/factoryWithThrowingShims.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/prop-types/lib/ReactPropTypesSecret.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedStyleSheetPropType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/deprecatedCreateStrictShapeTypeChecker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedTextStylePropTypes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedViewStylePropTypes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedLayoutPropTypes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedShadowPropTypesIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedTransformPropTypes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/deprecatedPropType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Pressability/PressabilityDebug.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Pressability/usePressability.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Pressability/Pressability.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Pressability/HoverState.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Sound/SoundManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Sound/NativeSoundManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/Rect.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Pressability/PressabilityPerformanceEventEmitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Text/TextNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/View/ReactNativeViewAttributes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Touchable/TouchableNativeFeedback.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Touchable/TouchableOpacity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/Animated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/AnimatedMock.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/AnimatedEvent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedValue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedInterpolation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedNode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/NativeAnimatedHelper.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/NativeAnimatedModule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/NativeAnimatedTurboModule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedWithChildren.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Interaction/InteractionManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Interaction/TaskQueue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/AnimatedImplementation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedAddition.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedDiffClamp.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedDivision.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedModulo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedMultiplication.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedProps.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedTransform.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedSubtraction.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedTracking.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/nodes/AnimatedValueXY.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/animations/DecayAnimation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/animations/Animation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/animations/SpringAnimation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/SpringConfig.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/animations/TimingAnimation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/Easing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/bezier.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/createAnimatedComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/createAnimatedComponentInjection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/setAndForwardRef.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/components/AnimatedFlatList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Lists/FlatList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/defineProperty.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Lists/VirtualizeUtils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Lists/VirtualizedList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Lists/VirtualizedListContext.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Interaction/Batchinator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Lists/FillRateHelper.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/RefreshControl/RefreshControl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewStickyHeader.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Keyboard/Keyboard.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/LayoutAnimation/LayoutAnimation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/dismissKeyboard.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Keyboard/NativeKeyboardObserver.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Interaction/FrameRateLogger.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Interaction/NativeFrameRateLogger.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/processDecelerationRate.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/splitLayoutProps.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewContext.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewCommands.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Lists/ViewabilityHelper.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/components/AnimatedImage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/Image.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedImagePropType.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedImageSourcePropType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedImageStylePropTypes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/ImageAnalyticsTagContext.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/NativeImageLoaderIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/ImageViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/components/AnimatedScrollView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/components/AnimatedSectionList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Lists/SectionList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Lists/VirtualizedSectionList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/components/AnimatedText.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Animated/components/AnimatedView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/DatePicker/DatePickerIOS.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/DatePicker/RCTDatePickerNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/ImageBackground.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/InputAccessoryView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Keyboard/KeyboardAvoidingView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/MaskedView/MaskedViewIOS.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/MaskedView/RCTMaskedViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Modal/Modal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Modal/ModalInjection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Modal/NativeModalManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Modal/RCTModalHostViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/AppContainer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/RootTag.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/I18nManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/NativeI18nManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Pressable/Pressable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Pressable/useAndroidRippleForView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ProgressViewIOS/ProgressViewIOS.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ProgressViewIOS/RCTProgressViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/SafeAreaView/SafeAreaView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/SegmentedControlIOS/RCTSegmentedControlNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Slider/Slider.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Slider/SliderNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/StatusBar/StatusBar.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Switch/Switch.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/useMergeRefs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Switch/AndroidSwitchNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Switch/SwitchNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/TextInput.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedTextInputPropTypes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedViewPropTypes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedViewAccessibility.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/nullthrows/nullthrows.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Touchable/Touchable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Touchable/BoundingDimensions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Touchable/PooledClass.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Touchable/Position.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Touchable/TouchableHighlight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Touchable/TouchableWithoutFeedback.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ActionSheetIOS/ActionSheetIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ActionSheetIOS/NativeActionSheetManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/Appearance.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/NativeAppearance.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/DebugEnvironment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/AppRegistry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/DisplayMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/HeadlessJsTaskError.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/BugReporting/BugReporting.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/NativeModules/specs/NativeRedBox.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/BugReporting/NativeBugReporting.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/BugReporting/dumpReactTree.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/SceneTracker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/renderApplication.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/PerformanceLoggerContext.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/ReactNative/getCachedComponentWithDebugName.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/BackHandler.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Renderer/shims/ReactFabric.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/AppState/AppState.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/logError.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/AppState/NativeAppState.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Storage/AsyncStorage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Storage/NativeAsyncLocalStorage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Storage/NativeAsyncSQLiteDBStorage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Clipboard/Clipboard.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/Clipboard/NativeClipboard.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/DatePickerAndroid/DatePickerAndroid.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/DeviceInfo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/DevSettings.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/NativeModules/specs/NativeDevSettings.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/ImagePickerIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/NativeImagePickerIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Linking/Linking.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Linking/NativeLinkingManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Linking/NativeIntentAndroid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/LogBox/LogBox.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Interaction/PanResponder.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Interaction/TouchHistoryMath.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/PermissionsAndroid/PermissionsAndroid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/PermissionsAndroid/NativePermissionsAndroid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/PushNotificationIOS/PushNotificationIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Settings/Settings.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Settings/NativeSettingsManager.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Share/Share.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Share/NativeShareModule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Components/ToastAndroid/ToastAndroid.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/useColorScheme.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/use-subscription/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/use-subscription/cjs/use-subscription.production.min.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Utilities/useWindowDimensions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/UTFSequence.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Vibration/Vibration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Vibration/NativeVibration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/YellowBox/YellowBoxDeprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/DeprecatedPropTypes/DeprecatedPointPropType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/State.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/EventType.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/handlersRegistry.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/utils.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/RNGestureHandlerModule.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/Directions.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/gestureHandlerRootHOC.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-is/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-is/cjs/react-is.production.min.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/GestureHandlerRootView.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/TapGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/createHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isEqual.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseIsEqual.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseIsEqualDeep.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_Stack.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_ListCache.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_listCacheClear.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_listCacheDelete.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_assocIndexOf.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/eq.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_listCacheGet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_listCacheHas.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_listCacheSet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_stackClear.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_stackDelete.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_stackGet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_stackHas.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_stackSet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_Map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_getNative.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseIsNative.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isFunction.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseGetTag.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_Symbol.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_root.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_freeGlobal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_getRawTag.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_objectToString.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isObject.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_isMasked.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_coreJsData.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_toSource.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_getValue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_MapCache.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_mapCacheClear.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_Hash.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_hashClear.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_nativeCreate.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_hashDelete.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_hashGet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_hashHas.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_hashSet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_mapCacheDelete.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_getMapData.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_isKeyable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_mapCacheGet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_mapCacheHas.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_mapCacheSet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_equalArrays.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_SetCache.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_setCacheAdd.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_setCacheHas.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_arraySome.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_cacheHas.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_equalByTag.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_Uint8Array.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_mapToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_setToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_equalObjects.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_getAllKeys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseGetAllKeys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_arrayPush.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_getSymbols.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_arrayFilter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/stubArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/keys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_arrayLikeKeys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseTimes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isArguments.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseIsArguments.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isObjectLike.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isBuffer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/stubFalse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_isIndex.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isTypedArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseIsTypedArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isLength.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseUnary.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_nodeUtil.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_baseKeys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_isPrototype.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_nativeKeys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_overArg.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/isArrayLike.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_getTag.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_DataView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_Promise.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_Set.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/_WeakMap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestureHandlerCommon.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/ActionType.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/ForceTouchGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/PlatformConstants.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/LongPressGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/PanGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/PinchGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/RotationGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/FlingGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/createNativeWrapper.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/NativeViewGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/GestureDetector.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/gesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/reanimatedWrapper.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/Animated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/ReanimatedEventEmitter.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/ReanimatedModule.native.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/ReanimatedModuleCompat.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/PlatformChecker.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedEvent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedNode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedValue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedSet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/val.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedBlock.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/InternalAnimatedValue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/interpolate.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/operators.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedOperator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedCond.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedFunction.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedCallFunc.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedParam.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedClock.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/evaluateOnce.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedCall.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedAlways.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/createEventObjectProxyPolyfill.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedProps.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedTransform.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash.isequal/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/WorkletEventHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/NativeReanimated/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/js-reanimated/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/js-reanimated/JSReanimated.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/js-reanimated/MapperRegistry.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/js-reanimated/Mapper.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/js-reanimated/MutableValue.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/NativeReanimated/NativeReanimated.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/setAndForwardRef.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/LayoutAnimationRepository.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/core.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/styleAnimation.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/util.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/Colors.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/timing.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/Easing.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/Easing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/base.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedStartClock.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedStopClock.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedClockTest.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedDebug.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedConcat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedBezier.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/Bezier.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/UpdateProps.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/ConfigHelper.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/platform-specific/RNRenderer.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/commonTypes.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/spring.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/decay.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/delay.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/repeat.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/animation/sequence.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/core/AnimatedCode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/useCode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/animations/decay.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/animations/timing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/animations/spring.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/animations/Animation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/Transitioning.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/animations/SpringUtils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/useValue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/animations/backwardCompatibleAnimWrapper.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/acc.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/color.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/diff.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/diffClamp.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/interpolateColors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated1/derived/onChange.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/component/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/component/FlatList.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/component/WrappedComponents.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/commonTypes.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/Hooks.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/useAnimatedStyle.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/useSharedValue.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/utils.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/ViewDescriptorsSet.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/useAnimatedGestureHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/useAnimatedReaction.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/useAnimatedRef.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/NativeMethods.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/useAnimatedScrollHandler.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/hook/useDerivedValue.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/interpolation.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/interpolateColor.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/PropAdapters.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/animationBuilder/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultTransitions/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/utils.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-reanimated/src/reanimated2/commonTypes.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/getShadowNodeFromRef.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/gestureObjects.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/flingGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/forceTouchGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/gestureComposition.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/longPressGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/panGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/pinchGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/rotationGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/tapGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/nativeGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/handlers/gestures/manualGesture.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/GestureButtons.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/GestureHandlerButton.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/fabric/RNGestureHandlerButtonNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/touchables/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/touchables/TouchableNativeFeedback.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/touchables/TouchableWithoutFeedback.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/touchables/GenericTouchable.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/touchables/TouchableOpacity.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/touchables/TouchableHighlight.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/GestureComponents.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/Swipeable.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-gesture-handler/src/components/DrawerLayout.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/createHooks.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/createAddHook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/validateNamespace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/validateHookName.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/createRemoveHook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/createHasHook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/createRunHook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/createCurrentHook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/createDoingHook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/hooks/src/createDidHook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/interopRequireDefault.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/src/create-interpolate-element.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/slicedToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/arrayWithHoles.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/nonIterableRest.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/toConsumableArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/iterableToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/nonIterableSpread.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/src/react.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/extends.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/src/react-platform.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/src/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/src/platform.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/src/serialize.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/node_modules/is-plain-object/dist/is-plain-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/change-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/tslib/tslib.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/camel-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/pascal-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/no-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lower-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/capital-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/upper-case-first/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/constant-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/upper-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/dot-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/header-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/param-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/path-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/sentence-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/snake-case/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/escape-html/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/escape-html/node_modules/@babel/runtime/helpers/interopRequireDefault.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/escape-html/src/escape-greater.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/element/src/raw-html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/src/globals.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-get-random-values/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/fast-base64-decode/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/url/url.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/punycode/punycode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/querystring/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/querystring/decode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/querystring/encode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/path-browserify/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/htmlparser2-without-node-native/lib/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/htmlparser2-without-node-native/lib/Parser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/htmlparser2-without-node-native/lib/Tokenizer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/entities/lib/decode_codepoint.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/entities/maps/decode.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/entities/maps/entities.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/entities/maps/legacy.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/entities/maps/xml.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/inherits/inherits_browser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/eventemitter2/lib/eventemitter2.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domhandler/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domelementtype/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domhandler/lib/node.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domhandler/lib/element.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/htmlparser2-without-node-native/lib/FeedHandler.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/htmlparser2-without-node-native/lib/ProxyHandler.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domutils/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domutils/lib/stringify.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/dom-serializer/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/dom-serializer/node_modules/domelementtype/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/entities/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/entities/lib/encode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/entities/lib/decode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domutils/lib/traversal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domutils/lib/manipulation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domutils/lib/querying.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domutils/lib/legacy.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/domutils/lib/helpers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/htmlparser2-without-node-native/lib/CollectingHandler.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/nwmatcher/src/nwmatcher-noqsa.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSStyleDeclaration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/parse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSStyleSheet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/StyleSheet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSStyleRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSImportRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/MediaList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSMediaRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSFontFaceRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSKeyframeRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSKeyframesRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSValueExpression.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSValue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/CSSDocumentRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/MatcherList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssom/lib/clone.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/CSSStyleDeclaration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/parsers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/alignmentBaseline.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/azimuth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/background.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundImage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundRepeat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundAttachment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundPosition.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundClip.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundOrigin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundPositionX.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundPositionY.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundRepeatX.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundRepeatY.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/backgroundSize.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/baselineShift.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/border.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderBottom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderBottomWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderBottomStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderBottomColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderBottomLeftRadius.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderBottomRightRadius.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderCollapse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderImage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderImageOutset.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderImageRepeat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderImageSlice.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderImageSource.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderImageWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderLeft.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderLeftWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderLeftStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderLeftColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderRadius.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderRight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderRightWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderRightStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderRightColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderSpacing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderTop.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderTopWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderTopStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderTopColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderTopLeftRadius.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/borderTopRightRadius.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/bottom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/boxShadow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/boxSizing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/captionSide.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/clear.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/clip.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/color.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/colorInterpolation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/colorInterpolationFilters.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/colorProfile.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/colorRendering.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/content.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/counterIncrement.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/counterReset.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/cssFloat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/cue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/cueAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/cueBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/cursor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/direction.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/display.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/dominantBaseline.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/elevation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/emptyCells.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/enableBackground.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fill.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fillOpacity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fillRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/filter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/floodColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/floodOpacity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/font.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fontFamily.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fontSize.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fontStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fontVariant.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fontWeight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/lineHeight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fontSizeAdjust.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/fontStretch.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/glyphOrientationHorizontal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/glyphOrientationVertical.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/height.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/imageRendering.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/kerning.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/left.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/letterSpacing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/lightingColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/listStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/listStyleImage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/listStylePosition.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/listStyleType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/margin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/marginBottom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/marginLeft.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/marginRight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/marginTop.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/marker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/markerEnd.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/markerMid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/markerOffset.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/markerStart.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/marks.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/mask.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/maxHeight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/maxWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/minHeight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/minWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/opacity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/orphans.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/outline.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/outlineColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/outlineOffset.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/outlineStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/outlineWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/overflow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/overflowX.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/overflowY.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/padding.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/paddingBottom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/paddingLeft.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/paddingRight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/paddingTop.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/page.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pageBreakAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pageBreakBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pageBreakInside.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pause.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pauseAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pauseBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pitch.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pitchRange.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/playDuring.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/pointerEvents.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/position.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/quotes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/resize.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/richness.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/right.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/shapeRendering.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/size.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/speak.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/speakHeader.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/speakNumeral.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/speakPunctuation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/speechRate.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/src.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/stopColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/stopOpacity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/stress.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/stroke.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/strokeDasharray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/strokeDashoffset.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/strokeLinecap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/strokeLinejoin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/strokeMiterlimit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/strokeOpacity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/strokeWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/tableLayout.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textAlign.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textAnchor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textDecoration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textIndent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textLineThrough.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textLineThroughColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textLineThroughMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textLineThroughStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textLineThroughWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textOverflow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textOverline.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textOverlineColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textOverlineMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textOverlineStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textOverlineWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textRendering.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textShadow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textTransform.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textUnderline.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textUnderlineColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textUnderlineMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textUnderlineStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/textUnderlineWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/top.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/unicodeBidi.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/unicodeRange.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/vectorEffect.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/verticalAlign.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/visibility.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/voiceFamily.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/volume.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimationDelay.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimationDirection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimationDuration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimationFillMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimationIterationCount.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimationName.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimationPlayState.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAnimationTimingFunction.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAppearance.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitAspectRatio.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBackfaceVisibility.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBackgroundClip.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBackgroundComposite.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBackgroundOrigin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBackgroundSize.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderAfterColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderAfterStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderAfterWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderBeforeColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderBeforeStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderBeforeWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderEnd.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderEndColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderEndStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderEndWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderFit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderHorizontalSpacing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderImage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderRadius.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderStart.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderStartColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderStartStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderStartWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBorderVerticalSpacing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxAlign.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxDirection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxFlex.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxFlexGroup.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxLines.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxOrdinalGroup.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxOrient.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxPack.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxReflect.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitBoxShadow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColorCorrection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnAxis.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnBreakAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnBreakBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnBreakInside.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnCount.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnGap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnRule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnRuleColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnRuleStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnRuleWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnSpan.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumnWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitColumns.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFilter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlexAlign.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlexDirection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlexFlow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlexItemAlign.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlexLinePack.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlexOrder.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlexPack.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlexWrap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlowFrom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFlowInto.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFontFeatureSettings.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFontKerning.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFontSizeDelta.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFontSmoothing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitFontVariantLigatures.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitHighlight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitHyphenateCharacter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitHyphenateLimitAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitHyphenateLimitBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitHyphenateLimitLines.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitHyphens.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLineAlign.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLineBoxContain.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLineBreak.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLineClamp.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLineGrid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLineSnap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLocale.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLogicalHeight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitLogicalWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginAfterCollapse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginBeforeCollapse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginBottomCollapse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginCollapse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginEnd.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginStart.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarginTopCollapse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarquee.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarqueeDirection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarqueeIncrement.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarqueeRepetition.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarqueeSpeed.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMarqueeStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMask.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskAttachment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskBoxImage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskBoxImageOutset.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskBoxImageRepeat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskBoxImageSlice.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskBoxImageSource.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskBoxImageWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskClip.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskComposite.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskImage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskOrigin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskPosition.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskPositionX.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskPositionY.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskRepeat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskRepeatX.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskRepeatY.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaskSize.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMatchNearestMailBlockquoteColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaxLogicalHeight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMaxLogicalWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMinLogicalHeight.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitMinLogicalWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitNbspMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitOverflowScrolling.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPaddingAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPaddingBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPaddingEnd.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPaddingStart.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPerspective.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPerspectiveOrigin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPerspectiveOriginX.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPerspectiveOriginY.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitPrintColorAdjust.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitRegionBreakAfter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitRegionBreakBefore.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitRegionBreakInside.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitRegionOverflow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitRtlOrdering.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitSvgShadow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTapHighlightColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextCombine.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextDecorationsInEffect.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextEmphasis.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextEmphasisColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextEmphasisPosition.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextEmphasisStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextFillColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextOrientation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextSecurity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextSizeAdjust.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextStroke.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextStrokeColor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTextStrokeWidth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransform.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransformOrigin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransformOriginX.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransformOriginY.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransformOriginZ.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransformStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransition.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransitionDelay.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransitionDuration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransitionProperty.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitTransitionTimingFunction.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitUserDrag.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitUserModify.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitUserSelect.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitWrap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitWrapFlow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitWrapMargin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitWrapPadding.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitWrapShapeInside.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitWrapShapeOutside.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitWrapThrough.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/webkitWritingMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/whiteSpace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/widows.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/width.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/wordBreak.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/wordSpacing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/wordWrap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/writingMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/zIndex.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/builtins/cssstyle/lib/properties/zoom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/level3/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/level3/core.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/level2/core.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/level1/core.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/level3/xpath.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/level3/html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/level2/html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/level3/ls.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/browser/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/browser/htmltodom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/browser/htmlencoding.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/browser/domtohtml.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/browser/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/jsdom-jscore-rn/lib/jsdom/selectors/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-url-polyfill/auto.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-url-polyfill/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-url-polyfill/package.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-url-polyfill/js/URL.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/webidl2js-wrapper.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/lib/URL.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions/lib/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/lib/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/lib/URL-impl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/lib/url-state-machine.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/punycode/punycode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/lib/infra.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/lib/urlencoded.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/lib/URLSearchParams.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/whatwg-url-without-unicode/lib/URLSearchParams-impl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-url-polyfill/js/URLSearchParams.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-url-polyfill/node_modules/buffer/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/ieee754/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/features/array/flat-map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/stable/array/flat-map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/es/array/flat-map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/modules/es.array.flat-map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/export.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/global.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-get-own-property-descriptor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/descriptors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/fails.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/function-call.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-property-is-enumerable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/create-property-descriptor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/to-indexed-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/indexed-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/function-uncurry-this.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/classof-raw.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/require-object-coercible.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/to-property-key.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/to-primitive.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/is-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/is-callable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/is-symbol.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/get-built-in.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-is-prototype-of.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/use-symbol-as-uid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/native-symbol.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/engine-v8-version.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/engine-user-agent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/get-method.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/a-callable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/try-to-string.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/ordinary-to-primitive.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/well-known-symbol.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/shared.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/is-pure.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/shared-store.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/set-global.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/has-own-property.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/to-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/uid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/ie8-dom-define.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/document-create-element.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/create-non-enumerable-property.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-define-property.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/an-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/redefine.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/inspect-source.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/internal-state.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/native-weak-map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/shared-key.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/hidden-keys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/function-name.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/copy-constructor-properties.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/own-keys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-get-own-property-names.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-keys-internal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/array-includes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/to-absolute-index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/to-integer-or-infinity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/length-of-array-like.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/to-length.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/enum-bug-keys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-get-own-property-symbols.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/is-forced.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/flatten-into-array.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/is-array.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/function-bind-context.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/array-species-create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/array-species-constructor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/is-constructor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/classof.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/to-string-tag-support.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/modules/es.array.unscopables.flat-map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/add-to-unscopables.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-define-properties.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/object-keys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/core-js/internals/entry-unbind.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-bridge/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/src/jsdom-patches.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/src/initial-html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/src/setup-locale.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/i18n/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/i18n/src/sprintf.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/memize/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/sprintf-js/src/sprintf.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/i18n/src/create-i18n.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/tannin/build/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@tannin/plural-forms/build/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@tannin/compile/build/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@tannin/postfix/build/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@tannin/evaluate/build/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/i18n/src/default-i18n.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/ar.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/bg.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/bo.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/ca.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/cs.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/cy.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/da.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/de.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/en-au.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/en-ca.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/en-gb.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/en-nz.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/en-za.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/el.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/es.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/es-ar.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/es-cl.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/es-cr.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/fa.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/fr.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/gl.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/he.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/hr.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/hu.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/id.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/is.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/it.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/ja.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/ka.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/ko.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/nb.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/nl.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/nl-be.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/pl.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/pt.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/pt-br.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/ro.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/ru.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/sk.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/sq.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/sr.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/sv.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/th.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/tr.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/uk.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/ur.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/vi.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/zh-cn.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/i18n-cache/data/zh-tw.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/src/setup.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/turbo-combine-reducers/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/default-registry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/registry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/lodash/lodash.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/deprecated/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/redux-store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/redux/lib/redux.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/objectSpread2.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/equivalent-key-map/equivalent-key-map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/redux-routine/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/redux-routine/src/is-generator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/redux-routine/src/runtime.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/utils/helpers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/utils/keys.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/controls/builtin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/utils/is.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/controls/async.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/utils/dispatcher.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rungen/dist/controls/wrap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/is-promise/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/redux-routine/src/is-action.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/is-plain-object/dist/is-plain-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/utils/create-higher-order-component/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/utils/debounce/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/utils/throttle/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/compose.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/pipe.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/if-condition/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/pure/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/is-shallow-equal/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/is-shallow-equal/src/objects.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/is-shallow-equal/src/arrays.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/with-global-events/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/with-global-events/listener.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/with-instance-id/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-instance-id/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/with-safe-timeout/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/with-state/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/higher-order/with-preferred-color-scheme/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-preferred-color-scheme/index.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-constrained-tabbing/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-dragging/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-isomorphic-layout-effect/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-focus-outside/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-keyboard-shortcut/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-media-query/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-previous/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-reduced-motion/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-viewport-match/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-async-list/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/priority-queue/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/priority-queue/src/request-idle-callback.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/requestidlecallback/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-preferred-color-scheme-style/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-resize-observer/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-debounce/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/use-memo-one/dist/use-memo-one.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-throttle/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-merge-refs/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/compose/src/hooks/use-ref-effect/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/controls.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/factory.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/promise-middleware.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/resolvers-cache-middleware.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/redux-store/thunk-middleware.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/redux-store/metadata/reducer.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/redux-store/metadata/utils.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/redux-store/metadata/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/redux-store/metadata/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/utils/emitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/plugins/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/plugins/persistence/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/plugins/persistence/storage/default.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/plugins/persistence/storage/object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/with-select/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/use-select/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/registry-provider/use-registry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/registry-provider/context.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/async-mode-provider/use-async-mode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/async-mode-provider/context.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/with-dispatch/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/use-dispatch/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/use-dispatch/use-dispatch.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/use-dispatch/use-dispatch-with-map.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/with-registry/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/registry-provider/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/data/src/components/async-mode-provider/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/colord/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/colord/plugins/names.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/colord/plugins/a11y.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/focusable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/tabbable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/compute-caret-rect.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/get-rectangle-from-range.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/utils/assert-is-defined.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/document-has-text-selection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/document-has-uncollapsed-selection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/input-field-has-uncollapsed-selection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-text-field.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-html-input-element.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/document-has-selection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/get-scroll-container.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/get-computed-style.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/get-offset-parent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-entirely-selected.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-input-or-text-area.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-form-element.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-horizontal-edge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-edge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-rtl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/get-range-height.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-selection-forward.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/hidden-caret-range-from-point.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/caret-range-from-point.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-number-input.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-vertical-edge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/place-caret-at-horizontal-edge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/place-caret-at-edge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/place-caret-at-vertical-edge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/replace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/insert-after.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/remove.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/unwrap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/replace-tag.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/wrap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/strip-html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/safe-html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-empty.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/remove-invalid-html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/clean-node-list.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/phrasing-content.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/dom/is-element.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/dom/src/data-transfer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/registration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/i18n-block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/factory.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/v1.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/rng-browser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/stringify.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/validate.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/regex.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/v3.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/v35.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/parse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/md5-browser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/v4.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/v5.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/sha1-browser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/nil.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/uuid/dist/version.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/rememo/rememo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/remove-accents/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/store/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/parser/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-serialization-default-parser/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/autop/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/serializer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/parser/serialize-raw-block.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/validation/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/toArray.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/simple-html-tokenizer/dist/simple-html-tokenizer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/html-entities/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/validation/logger.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/parser/convert-legacy-block.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/parser/get-block-attributes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/hpq/dist/hpq.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/matchers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/node.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/children.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/parser/apply-block-deprecated-versions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/parser/apply-built-in-validation-fixes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/parser/fix-custom-classname.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/paste-handler.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/html-to-blocks.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/get-raw-transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/normalise-blocks.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/special-comment-converter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/comment-remover.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/is-inline-content.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/phrasing-content-reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/head-remover.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/ms-list-converter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/list-reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/image-corrector.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/blockquote-normaliser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/div-normaliser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/figure-content-reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/shortcode-converter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/shortcode/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/markdown-converter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/showdown/dist/showdown.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/iframe-remover.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/google-docs-uid-remover.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/html-formatting-remover.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/br-remover.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/empty-paragraph-remover.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/slack-paragraph-corrector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/raw-handling/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/categories.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/api/templates.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blocks/src/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/conservative-map-item.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/get-normalized-comma-separable.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/if-matching-action.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/forward-resolver.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/on-sub-key.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/replace-action.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/with-weak-map-cache.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/utils/is-raw-attribute.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/queried-data/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/queried-data/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/queried-data/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/queried-data/get-query-parts.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/is-url.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/is-email.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-protocol.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/is-valid-protocol.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-authority.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/is-valid-authority.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-path.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/is-valid-path.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-query-string.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/build-query-string.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/is-valid-query-string.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-path-and-query-string.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-fragment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/is-valid-fragment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/add-query-args.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-query-args.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-query-arg.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/has-query-arg.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/remove-query-args.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/prepend-http.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/safe-decode-uri.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/safe-decode-uri-component.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/filter-url-for-display.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/clean-for-slug.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/get-filename.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/url/src/normalize-path.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/queried-data/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/entities.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/middlewares/nonce.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/middlewares/root-url.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/middlewares/namespace-endpoint.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/middlewares/preloading.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/middlewares/fetch-all-middleware.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/middlewares/http-v1.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/middlewares/user-locale.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/middlewares/media-upload.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/api-fetch/src/utils/response.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/batch/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/batch/create-batch.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/batch/default-processor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/name.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/selectors.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/resolvers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/locks/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/locks/engine.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/locks/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/locks/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/locks/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/entity-provider.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/entity-types/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/fetch/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/fetch/__experimental-fetch-link-suggestions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/fetch/__experimental-fetch-url-data.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/hooks/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/hooks/use-entity-record.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/hooks/use-query-select.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/hooks/memoize.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/hooks/constants.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/hooks/use-entity-records.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/core-data/src/hooks/use-resource-permissions.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/apply-format.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/normalise-formats.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/is-format-equal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/concat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/create-element.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/special-characters.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/get-active-format.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/get-active-formats.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/get-active-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/get-text-content.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/is-collapsed.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/is-empty.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/join.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/register-format-type.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/remove-format.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/remove.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/insert.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/replace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/insert-line-separator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/insert-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/slice.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/split.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/to-dom.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/to-tree.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/get-format-type.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/to-html-string.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/toggle-format.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/a11y/src/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/a11y/src/filter-message.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/unregister-format-type.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/component/use-anchor-ref.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/component/use-anchor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/component/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-aztec/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-aztec/src/AztecView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/keycodes/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/keycodes/src/platform.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-aztec/src/AztecInputState.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/compat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/align.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/primitives/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/primitives/src/svg/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/ReactNativeSVG.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Shape.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/SvgTouchableMixin.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Rect.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractProps.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractFill.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractBrush.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractColor.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractOpacity.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractStroke.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractLengthList.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractTransform.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/Matrix2D.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/transform.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractResponder.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/util.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Circle.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Ellipse.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Polygon.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Path.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractPolyPoints.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Polyline.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Line.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Svg.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractViewBox.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/G.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractText.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Text.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/TSpan.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/TextPath.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Use.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Image.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Symbol.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Defs.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/LinearGradient.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/extract/extractGradient.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/lib/units.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/RadialGradient.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Stop.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/ClipPath.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Pattern.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Mask.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/elements/Marker.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/xml.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/src/css.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/common/List.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/common/SyntaxError.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/utils/createCustomError.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/common/TokenStream.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/tokenizer/const.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/tokenizer/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/tokenizer/char-code-definitions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/Lexer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/error.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/definition-syntax/generate.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/utils/names.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/generic.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/tokenizer/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/common/adopt-buffer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/generic-an-plus-b.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/generic-urange.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/definition-syntax/parse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/definition-syntax/tokenizer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/definition-syntax/SyntaxError.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/definition-syntax/walk.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/prepare-tokens.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/match-graph.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/match.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/trace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/search.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/lexer/structure.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/definition-syntax/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/parser/create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/common/OffsetToLocation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/parser/sequence.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/generator/create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/generator/sourceMap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/node_modules/source-map/lib/source-map-generator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/node_modules/source-map/lib/base64-vlq.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/node_modules/source-map/lib/base64.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/node_modules/source-map/lib/util.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/node_modules/source-map/lib/array-set.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/node_modules/source-map/lib/mapping-list.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/convertor/create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/walker/create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/utils/clone.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/config/mix.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/config/lexer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/data/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/mdn-data/css/at-rules.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/mdn-data/css/properties.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/mdn-data/css/syntaxes.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/data/patch.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/AnPlusB.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Atrule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Raw.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/AtrulePrelude.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/AttributeSelector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Block.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Brackets.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/CDC.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/CDO.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/ClassSelector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Combinator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Comment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Declaration.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/DeclarationList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Dimension.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Function.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Hash.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Identifier.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/IdSelector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/MediaFeature.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/MediaQuery.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/MediaQueryList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Nth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Number.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Operator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Parentheses.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Percentage.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Ratio.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Rule.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Selector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/SelectorList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/String.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/StyleSheet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/TypeSelector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/UnicodeRange.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Url.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/Value.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/node/WhiteSpace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/config/parser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/scope/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/scope/default.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/scope/selector.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/scope/value.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/function/expression.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/function/var.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/atrule/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/atrule/font-face.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/atrule/import.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/atrule/media.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/atrule/page.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/atrule/supports.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/dir.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/has.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/lang.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/matches.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/common/selectorList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/not.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/nth-child.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/common/nthWithOfClause.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/nth-last-child.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/nth-last-of-type.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/common/nth.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/nth-of-type.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/pseudo/slotted.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/lib/syntax/config/walker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-tree/package.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-select/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/domutils/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/domutils/lib/stringify.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/domutils/lib/traversal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/domutils/lib/manipulation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/domutils/lib/querying.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/domutils/lib/legacy.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/domutils/lib/helpers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/boolbase/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-select/lib/compile.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-what/lib/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-what/lib/parse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-what/lib/stringify.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-select/lib/sort.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-select/lib/procedure.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-select/lib/general.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-select/lib/attributes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/css-select/lib/pseudos.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/nth-check/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/nth-check/parse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-svg/node_modules/nth-check/compile.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/primitives/src/svg/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/primitives/src/horizontal-rule/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-hr/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/primitives/src/horizontal-rule/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/primitives/src/block-quotation/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/primitives/src/block-quotation/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/primitives/src/view/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/color-indicator/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/icon/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/add-card.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/add-submenu.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/add-template.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/align-center.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/align-justify.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/align-left.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/align-none.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/align-right.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/archive.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/arrow-down.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/arrow-left.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/arrow-right.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/arrow-up.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/at-symbol.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/aspect-ratio.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/audio.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/backup.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/block-default.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/block-meta.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/block-table.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/box.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/brush.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/bug.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/button.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/buttons.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/calendar.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/cancel-circle-filled.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/capture-photo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/capture-video.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/category.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/chart-bar.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/check.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/chevron-down.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/chevron-left.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/chevron-left-small.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/chevron-right.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/chevron-right-small.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/chevron-up.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/chevron-up-down.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/classic.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/close.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/close-small.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/cloud-upload.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/cloud.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/code.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/cog.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/color.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/column.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/columns.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/copy.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/comment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/comment-author-avatar.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/comment-author-name.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/comment-content.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/comment-reply-link.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/comment-edit-link.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/cover.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/create.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/crop.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/currency-dollar.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/currency-euro.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/currency-pound.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/custom-post-type.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/desktop.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/drag-handle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/download.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/pencil.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/external.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/file.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/filter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/flip-horizontal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/flip-vertical.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-bold.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-capitalize.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-indent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-indent-rtl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-italic.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-list-bullets.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-list-bullets-rtl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-list-numbered.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-list-numbered-rtl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-ltr.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-lowercase.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-outdent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-outdent-rtl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-rtl.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-strikethrough.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-underline.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/format-uppercase.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/fullscreen.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/gallery.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/globe.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/grid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/group.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/handle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/heading.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/help.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/help-filled.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/inbox.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/institution.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/home.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/html.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/image.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/info.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/insert-after.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/insert-before.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/justify-left.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/justify-center.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/justify-right.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/justify-space-between.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/key.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/keyboard-close.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/keyboard-return.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/layout.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/lifesaver.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/line-dashed.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/line-dotted.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/line-solid.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/link.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/link-off.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/list.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/list-item.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/list-view.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/lock.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/login.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/loop.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/map-marker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/media.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/media-and-text.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/megaphone.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/menu.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/mobile.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/more.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/more-horizontal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/more-horizontal-mobile.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/more-vertical.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/move-to.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/navigation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/not-found.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/overlay-text.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/page-break.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/custom-link.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/page.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/pages.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/paragraph.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/payment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/percent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/position-center.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/position-left.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/position-right.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/people.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/pin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/plugins.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/plus-circle-filled.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/plus-circle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/plus.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-author.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-categories.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-content.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-comments.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-comments-count.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-comments-form.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-date.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-excerpt.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-featured-image.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-list.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/post-terms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/previous.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/next.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/preformatted.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/pull-left.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/pull-right.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/pullquote.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/query-pagination.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/query-pagination-next.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/query-pagination-numbers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/query-pagination-previous.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/quote.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/receipt.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/redo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/remove-bug.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/remove-submenu.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/replace.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/reset.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/resize-corner-n-e.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/reusable-block.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/row.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/symbol.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/rotate-left.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/rotate-right.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/rss.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/search.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/separator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/settings.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/share.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/shield.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/shortcode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/shuffle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/site-logo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/stack.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/star-empty.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/star-filled.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/star-half.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/store.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/stretch-full-width.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/styles.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/shipping.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/stretch-wide.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/subscript.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/superscript.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/swatch.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/table-column-after.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/table-column-before.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/table-column-delete.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/table-row-after.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/table-row-before.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/table-row-delete.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/table.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/tag.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/symbol-filled.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/term-description.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/footer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/header.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/sidebar.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/text-color.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/tablet.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/title.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/tip.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/tool.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/trash.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/trending-down.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/trending-up.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/typography.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/undo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/ungroup.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/unlock.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/update.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/upload.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/verse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/video.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/warning.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/widget.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/icons/src/library/wordpress.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/color-indicator/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/color-settings/utils.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/color-palette/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/color-palette/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/color-picker/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-hsv-color-picker/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-hsv-color-picker/src/HsvColorPicker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-hsv-color-picker/src/HuePicker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-linear-gradient/index.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-linear-gradient/common.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/tinycolor2/tinycolor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-hsv-color-picker/src/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-hsv-color-picker/src/SaturationValuePicker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/color-picker/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/dashicon/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/dashicons/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/dropdown/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/dropdown-menu/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/classnames/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/button/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/tooltip/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/slot-fill/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/slot-fill/slot.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/slot-fill/context.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/slot-fill/fill.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/slot-fill/use-slot.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/slot-fill/provider.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/tooltip/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/icon/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/focal-point-picker/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-video/Video.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-video/TextTrackType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-video/FilterType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-video/DRMType.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-video/VideoResizeMode.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/focal-point-picker/focal-point.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/focal-point-picker/style.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/focal-point-picker/tooltip/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/focal-point-picker/tooltip/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/focal-point-picker/utils.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/utils/math.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-group/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-button/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-item/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/warning/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/warning/src/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-context/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-button/toolbar-button-container.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-group/toolbar-group-container.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-group/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-group/toolbar-group-collapsed.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar/toolbar-container.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toolbar-dropdown-menu/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/spinner/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/spinner/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/style-provider/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/base-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/textarea-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/panel/body.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/panel/body.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/panel/bottom-separator-cover.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/panel/bottom-separator-cover.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/panel/actions.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/panel/actions.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/text/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/native/dist/emotion-native.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/primitives-core/dist/emotion-primitives-core.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/primitives-core/node_modules/css-to-react-native/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/primitives-core/node_modules/postcss-value-parser/lib/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/primitives-core/node_modules/postcss-value-parser/lib/parse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/primitives-core/node_modules/postcss-value-parser/lib/walk.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/primitives-core/node_modules/postcss-value-parser/lib/stringify.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/primitives-core/node_modules/postcss-value-parser/lib/unit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/camelize/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-color-keywords/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/css-color-keywords/colors.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/react/dist/emotion-react.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/dist/emotion-cache.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/@emotion/sheet/dist/emotion-sheet.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/stylis/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/stylis/src/Enum.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/stylis/src/Utility.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/stylis/src/Parser.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/stylis/src/Tokenizer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/stylis/src/Prefixer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/stylis/src/Serializer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/cache/node_modules/stylis/src/Middleware.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/memoize/dist/memoize.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/react/dist/emotion-element-075f6e74.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/utils/dist/emotion-utils.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/serialize/dist/emotion-serialize.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/hash/dist/hash.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/unitless/dist/unitless.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@emotion/react/node_modules/@emotion/sheet/dist/emotion-sheet.browser.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/text/styles/text-mixins.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/text/styles/font-family.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/text/styles/emotion-css.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/utils/colors-values.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/utils/colors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/external-link/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/text-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/ripple.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/ripple.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/cellStyles.ios.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/cellStyles.android.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/toggle-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/switch-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/sandbox/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-webview/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-webview/lib/WebView.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-webview/lib/WebViewShared.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-webview/node_modules/escape-string-regexp/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-webview/lib/WebView.styles.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/sandbox/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/search-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/search-control/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/search-control/platform-style.ios.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/search-control/platform-style.android.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/select-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/picker-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/picker/index.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/picker/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/range-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/range-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/slider/src/js/Slider.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/slider/src/node_modules/@babel/runtime/helpers/interopRequireDefault.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/slider/src/node_modules/@babel/runtime/helpers/extends.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/slider/src/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/slider/src/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/slider/src/js/RNCSliderNativeComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/range-cell.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/range-text-input.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/utils/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/borderStyles.ios.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/borderStyles.android.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/stepper-cell/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/stepper-cell/stepper.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/stepper-cell/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/resizable-box/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/resizable-box/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/footer-message-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/footer-message-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/color-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/color-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/query-controls/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/query-controls/category-select.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/query-controls/terms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/tree-select/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/notice/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/blur/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/blur/src/BlurView.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-community/blur/src/VibrancyView.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/notice/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/notice/list.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/notices/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/notices/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/notices/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/notices/src/store/utils/on-sub-key.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/notices/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/notices/src/store/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/notices/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/radio-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/radio-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/unit-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/unit-control/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/unit-control/utils.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/disabled/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/draggable/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/draggable/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/higher-order/with-constrained-tabbing/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/higher-order/with-fallback-styles/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/higher-order/with-filters/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/font-size-picker/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/routers/src/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/routers/src/CommonActions.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/routers/src/BaseRouter.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/nanoid/non-secure/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/routers/src/StackRouter.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/routers/src/TabRouter.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/routers/src/DrawerRouter.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/routers/src/types.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/BaseNavigationContainer.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/EnsureSingleNavigator.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/NavigationBuilderContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/NavigationStateContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/UnhandledActionContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useScheduleUpdate.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useChildListeners.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useKeyedChildListeners.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useOptionsGetters.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useEventEmitter.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useSyncState.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/checkSerializable.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/createNavigatorFactory.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/Screen.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/NavigationHelpersContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/NavigationContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/NavigationRouteContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/CurrentRenderContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useNavigationBuilder.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/node_modules/react-is/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/node_modules/react-is/cjs/react-is.production.min.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useRegisterNavigator.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useDescriptors.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/SceneView.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/StaticContainer.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useNavigationCache.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useNavigationHelpers.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/types.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useOnAction.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useOnPreventRemove.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useFocusEvents.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useOnRouteFocus.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useFocusedListenersChildrenAdapter.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useOnGetState.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/isArrayEqual.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useCurrentRender.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useNavigation.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useRoute.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useFocusEffect.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useIsFocused.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/useNavigationState.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/getStateFromPath.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/node_modules/escape-string-regexp/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/query-string/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/strict-uri-encode/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/decode-uri-component/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/split-on-first/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/filter-obj/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/checkLegacyPathConfig.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/getPathFromState.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/getActionFromState.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/core/src/getFocusedRouteNameFromRoute.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/NavigationContainer.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/theming/ThemeProvider.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/theming/ThemeContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/theming/DefaultTheme.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/LinkingContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/useThenable.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/useLinking.native.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/useDocumentTitle.native.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/useBackButton.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/useScrollToTop.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/theming/DarkTheme.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/theming/useTheme.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/Link.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/useLinkProps.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/useLinkTo.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/useLinkBuilder.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/ServerContainer.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/ServerContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/native/src/types.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/font-size-picker/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/higher-order/with-focus-outside/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/higher-order/with-focus-return/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/higher-order/with-notices/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/higher-order/with-spoken-messages/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/autocompletion-items.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/autocomplete/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/autocomplete/autocompleter-ui.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/autocomplete/background-view.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/autocomplete/style.android.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/autocomplete/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/autocomplete/get-default-use-items.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/utils/strings.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-modal/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-modal/dist/modal.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/createAnimatableComponent.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/wrapStyleTransforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/getStyleValues.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/flattenStyle.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/getDefaultStyleValue.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/createAnimation.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/registry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/easing.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/attention-seekers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/bouncing-entrances.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/bouncing-exits.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/fading-entrances.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/fading-exits.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/flippers.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/lightspeed.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/sliding-entrances.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/sliding-exits.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/zooming-entrances.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-animatable/definitions/zooming-exits.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-modal/dist/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-modal/dist/modal.style.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area/lib/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area/lib/SafeArea.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area/lib/withSafeArea.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area/lib/TypeDefinition.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/cycle-picker-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/link-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/link-suggestion-item-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/link-suggestion-styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/gridicons/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/bottom-sheet-navigation/bottom-sheet-navigation-context.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/bottom-sheet-navigation/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/bottom-sheet-navigation/navigation-container.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/TransitionConfigs/CardStyleInterpolators.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-iphone-x-helper/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/conditional.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/TransitionConfigs/HeaderStyleInterpolators.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/TransitionConfigs/TransitionSpecs.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/TransitionConfigs/TransitionPresets.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/navigators/createStackNavigator.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Stack/StackView.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area-context/src/index.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area-context/src/SafeAreaContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area-context/src/NativeSafeAreaProvider.native.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area-context/src/SafeAreaView.native.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area-context/src/InitialWindow.native.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-safe-area-context/src/SafeArea.types.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/GestureHandler.native.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/GestureHandlerRefContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Stack/CardStack.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Screens.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-screens/src/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Core/ReactNativeVersion.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Header/HeaderSegment.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Header/HeaderBackButton.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/MaskedView.native.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/TouchableItem.native.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/BorderlessButton.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/assets/back-icon.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native/Libraries/Image/AssetRegistry.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/assets/back-icon-mask.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Header/HeaderBackground.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/memoize.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Stack/CardContainer.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Stack/Card.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/color/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/color-string/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/color-name/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/simple-swizzle/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/simple-swizzle/node_modules/is-arrayish/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/color/node_modules/color-convert/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/color/node_modules/color-convert/conversions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/color/node_modules/color-name/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/color/node_modules/color-convert/route.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Stack/CardSheet.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/CardAnimationContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/getDistanceForDirection.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/getInvertedMultiplier.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/HeaderHeightContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/HeaderShownContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/PreviousSceneContext.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/KeyboardManager.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Header/HeaderContainer.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Header/Header.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/Header/HeaderTitle.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/debounce.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/views/SafeAreaProviderCompat.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/useCardAnimation.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/useHeaderHeight.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-navigation/stack/src/utils/useGestureHandlerRef.tsx","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/layout-animation/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/keyboard-avoiding-view.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/sub-sheet/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/nav-bar/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/nav-bar/apply-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/nav-bar/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/nav-bar/action-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/nav-bar/back-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/chevron-back.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/nav-bar/heading.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/bottom-sheet-context.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet-select-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet-select-control/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/html-text-input/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/keyboard-avoiding-view/index.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/utils/use-is-floating-keyboard.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/keyboard-avoiding-view/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/html-text-input/style.ios.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/html-text-input/style.android.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/keyboard-aware-flat-list/index.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-keyboard-aware-scroll-view/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-keyboard-aware-scroll-view/lib/KeyboardAwareHOC.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-keyboard-aware-scroll-view/lib/KeyboardAwareScrollView.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-keyboard-aware-scroll-view/lib/KeyboardAwareFlatList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-keyboard-aware-scroll-view/lib/KeyboardAwareSectionList.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/readable-content-view/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/readable-content-view/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/cycle-select-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/gradient/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/gradient-parser/build/node.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/gradient/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/color-settings/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/color-settings/picker-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/color-settings/gradient-picker-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/custom-gradient-picker/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/custom-gradient-picker/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/custom-gradient-picker/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/custom-gradient-picker/serializer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/custom-gradient-picker/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/color-settings/palette.screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/segmented-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/segmented-control/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/color-settings/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/focal-point-settings-panel/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/focal-point-settings-panel/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet-text-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet-text-control/styles.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/footer-message-link/footer-message-link.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/bottom-sheet/footer-message-link/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-picker/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-clipboard/clipboard/dist/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-clipboard/clipboard/dist/Clipboard.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-clipboard/clipboard/dist/NativeClipboard.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@react-native-clipboard/clipboard/dist/useClipboard.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-picker/link-picker-results.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-picker/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-picker/link-picker-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-settings/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-settings/link-rel.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-settings/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-settings/link-settings-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-settings/link-settings-navigation.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/link-settings/image-link-destinations-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/image/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-fast-image/dist/index.cjs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/image/utils/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/image/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/image/icon-retry.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/image/image-editing-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/media-edit/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/image/icon-customize.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/inserter-button/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/inserter-button/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/inserter-button/sparkles.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/clipboard/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/audio-player/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/audio-player/styles.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/audio-player/audio-url-parser.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/badge/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/badge/style.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/utils/alignments.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/utils/use-unit-converter-to-mobile.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/global-styles-context/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/components/src/mobile/global-styles-context/utils.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/align.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-alignment-control/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-alignment-control/ui.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-alignment-control/use-available-alignments.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/layout.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/layouts/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/layouts/flex.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/layouts/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/gap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/use-block-props/use-block-refs.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/provider/block-refs-provider.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/spacing-sizes-control/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/spacing-sizes-control/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/spacing-sizes-control/all-input-control.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/spacing-sizes-control/spacing-input-control.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/use-setting/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-edit/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-edit/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-context/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-edit/context.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/defaults.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/defaults.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/array.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/selection.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/store/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/spacing-sizes-control/input-controls.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/spacing-sizes-control/axial-input-controls.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/spacing-sizes-control/linked-button.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/dimensions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inspector-controls/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inspector-controls/fill.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inspector-controls/groups.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/use-display-block-controls/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-settings/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-settings/button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-settings/container.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-settings/container.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inspector-controls/slot.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/margin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-popover/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-popover/use-popover-scroll.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/padding.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/layouts/flow.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/layouts/constrained.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/border/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/utils.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/constants.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/color/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/color/background.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/color/gradient.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/color/text.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/shadow/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/outline/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/spacing/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/spacing/padding.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/spacing/margin.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/style-engine/src/styles/typography/index.ts","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-alignment-control/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-controls/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-controls/fill.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-controls/hook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-controls/groups.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-controls/slot.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-icon/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-icon/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-vertical-alignment-control/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-vertical-alignment-control/ui.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-vertical-alignment-control/icons.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/colors/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/colors/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/colors/with-colors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/gradients/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/gradients/use-gradient.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/gradients/with-gradient.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/font-sizes/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/font-sizes/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/font-sizes/font-size-picker.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/font-sizes/with-font-sizes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/alignment-control/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/alignment-control/ui.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inner-blocks/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inner-blocks/button-block-appender.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/button-block-appender/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/menu.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/search-results.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/search-items.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-types-list/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-types-list/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/no-results.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/hooks/use-block-type-impressions.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/utils.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/tabs.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/block-types-tab.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/hooks/use-clipboard-block.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/hooks/use-block-types-state.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inserter/reusable-blocks-tab.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/insertion-point.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/button-block-appender/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inner-blocks/with-client-id.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inner-blocks/default-block-appender.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/default-block-appender/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/default-block-appender/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inner-blocks/use-nested-settings-update.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inner-blocks/use-inner-block-template-sync.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/inner-blocks/get-block-context.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list-appender/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list-appender/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block-list-item.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block-invalid-warning.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/warning/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/warning/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-mobile-toolbar/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-mobile-toolbar/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-mover/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-mover/mover-description.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-draggable/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-draggable/use-scroll-when-dragging.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block-list-context.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-draggable/draggable-chip.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-draggable/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-draggable/dropping-insertion-point.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-draggable/dropping-insertion-point.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/use-block-drop-zone/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/math.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/use-on-block-drop/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-mobile-toolbar/block-actions-menu.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/reusable-blocks/src/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/reusable-blocks/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/reusable-blocks/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/reusable-blocks/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/reusable-blocks/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/reusable-blocks/src/components/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/reusable-blocks/src/components/reusable-blocks-menu-items/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-switcher/block-transformations-menu.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/grid-item.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block-list-item.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block-list-item-cell.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block-list-compact.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/provider/use-block-sync.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/justify-content-control/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/justify-content-control/ui.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/line-height-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/line-height-control/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/plain-text/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/plain-text/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/autocomplete/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/autocompleters/block.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/autocompleters/link.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/remove-browser-shortcuts.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/file-paste-handler.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/format-toolbar-container.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/format-toolbar/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/use-native-props.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/embed-handler-picker.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/shortcut.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/toolbar-button.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/rich-text/input-event.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/media-replace-flow/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/media-placeholder/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/media-placeholder/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/media-upload/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/react-native-prompt-android/index.ios.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/media-upload-progress/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/media-upload-progress/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-media-update-progress/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-media-update-progress/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/url-input/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-caption/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-caption/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/caption/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/panel-color-settings/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/recursion-provider/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/contrast-checker/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/contrast-checker/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/colors-gradients/use-common-single-multiple-selects.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/video-player/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/video-player/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/video-player/gridicon-play.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-toolbar/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/ungroup-button/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/ungroup-button/icon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-variation-picker/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-variation-picker/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-styles/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-styles/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/token-list/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-styles/preview.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-styles/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/editor-styles/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/traverse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/traverse/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/ast/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/ast/parse.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/ast/stringify/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/ast/stringify/compress.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/ast/stringify/compiler.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/ast/stringify/identity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/transforms/url-rewrite.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/transform-styles/transforms/wrap.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/use-block-props/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/floating-toolbar/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/floating-toolbar/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/floating-toolbar/nav-up-icon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block-selection-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-title/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-title/use-block-display-title.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/use-block-display-information/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/subdirectory-icon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/block-list/block-selection-button.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/provider/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/provider/with-registry-provider.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/anchor.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/custom-class-name.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/generated-class-name.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/style.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/border.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/border-radius.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/border-radius-control/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/border-radius-control/all-input-control.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/border-radius-control/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/border-radius-control/input-controls.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/components/border-radius-control/linked-button.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/color.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/color-panel.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/typography.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/line-height.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/font-size.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/layout.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/layout.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/use-border-props.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/use-color-props.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/use-spacing-props.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/hooks/use-cached-truthy.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/elements/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/block-variation-transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-editor/src/utils/parse-css-unit-to-px.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/component/use-format-types.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/component/format-edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/remove-line-separator.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/get-format-colors.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/component/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/rich-text/src/component/toolbar-button-with-options.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/default-formats.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/bold/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/italic/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/link/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/link/modal.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/link/modal-screens/screens.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/link/modal-screens/link-settings-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/link/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/link/modal.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/link/modal-screens/link-picker-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/strikethrough/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/text-color/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/text-color/inline.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/text-color/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/text-color/inline.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/format-library/src/text-color/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/preferences/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/preferences/src/components/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/preferences/src/components/preference-toggle-menu-item/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/preferences/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/preferences/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/preferences/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/preferences/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/preferences/src/store/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/components/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/components/complementary-area/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/viewport/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/viewport/src/listener.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/viewport/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/viewport/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/viewport/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/viewport/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/viewport/src/if-viewport-matches.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/viewport/src/with-viewport-match.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/components/complementary-area-header/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/components/complementary-area-toggle/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/store/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/components/complementary-area-context/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/plugins/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/plugins/src/components/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/plugins/src/components/plugin-area/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/plugins/src/components/plugin-context/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/plugins/src/components/plugin-error-boundary/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/plugins/src/api/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/components/complementary-area-more-menu-item/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/components/action-item/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/interface/src/components/pinned-items/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/hooks/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/reducer.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/reducer.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/defaults.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/selectors.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/date/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/moment/moment.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/moment-timezone/moment-timezone.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/moment-timezone/moment-timezone-utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/moment-timezone/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/moment-timezone/data/packed/latest.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/utils/get-template-part-icon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/actions.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/actions.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/local-autosave.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/store/utils/notice-builder.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/autosave-monitor/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/post-title/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/post-title/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-history/redo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-history/undo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/provider/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/defaultSettings.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/stripTags.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/transposeAstralsToCountableChar.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/stripHTMLEntities.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/stripConnectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/stripRemovables.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/stripHTMLComments.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/stripShortcodes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/stripSpaces.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/wordcount/src/transposeHTMLEntitiesToCountableChars.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/paragraph/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/utils/init-block.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/paragraph/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/paragraph/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/paragraph/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/paragraph/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/paragraph/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/paragraph/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/utils/transformation-categories.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/image/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/blob/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/heading-level-dropdown.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/heading-level-icon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/autogenerate-anchors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/heading/shared.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/quote/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/quote/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/quote/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/quote/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/quote/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/quote/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/quote/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/shared.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/edit-wrapper.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/shared-icon.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/gallery.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/gallery-styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/use-image-sizes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/use-get-new-images.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/use-get-media.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/gap-styles.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/shared.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/gallery.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/gallery-image.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/gallery-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/gallery-image-style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/gallery-styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/tiles.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/tiles-styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/v1/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/gallery/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/archives/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/archives/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/archives/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/server-side-render/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/server-side-render/src/server-side-render.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/audio/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/audio/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/audio/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/audio/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/audio/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/audio/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/audio/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/audio/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/utils/migrate-font-family.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/utils/clean-empty-object.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/color-background.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/rich-text.ios.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/rich-text.android.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/button/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/calendar/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/calendar/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/calendar/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/calendar/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/categories/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/categories/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/categories/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/code/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/code/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/code/theme.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/code/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/code/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/code/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/code/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/code/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/variations.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/columnCalculations.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/column/column-preview.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/column/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/columns/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/column/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/column/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/column/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/column/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/column/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/shared.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/classnames/dedupe.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/controls.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/overlay-color-settings.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/focal-point-settings-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/use-cover-is-dark.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/cover/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/util.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/embed-controls.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/embed-link-settings.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/icons.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/embed-loading.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/embed-placeholder.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/embed-preview.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/embed-no-preview.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/wp-embed-preview.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/variations.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/embed/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/file/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/file/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/file/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/file/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/file/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/file/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/file/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/file/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/html/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/html/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/html/preview.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/html/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/html/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/html/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/html/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/media-container.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/media-container-icon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/icon-retry.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/media-container.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/media-text/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-comments/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-comments/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-comments/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-posts/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-posts/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-posts/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-posts/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-posts/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/latest-posts/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/ordered-list-settings.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/tag-name.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/hooks/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/hooks/use-outdent-list-item.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/hooks/use-indent-list-item.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/hooks/use-enter.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/hooks/use-space.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/hooks/use-split.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/hooks/use-merge.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/hooks/use-copy.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/utils.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/list-style-type.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/icons.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/list-item/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/missing/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/missing/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/missing/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/missing/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/missing/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/more/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/more/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/more/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/more/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/more/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/more/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/more/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/nextpage/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/nextpage/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/nextpage/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/nextpage/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/nextpage/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/nextpage/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/nextpage/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/preformatted/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/preformatted/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/preformatted/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/preformatted/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/preformatted/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/preformatted/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/preformatted/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/preformatted/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/shared.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/figure.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/figure.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/blockquote.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/blockquote.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/pullquote/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/block/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/block/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/block/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/block/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/block/edit-title.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/rss/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/rss/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/rss/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/search/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/search/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/search/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/search/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/search/variations.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/separator/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/separator/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/separator/use-deprecated-opacity.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/separator/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/separator/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/separator/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/separator/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/separator/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/shortcode/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/shortcode/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/shortcode/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/shortcode/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/shortcode/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/shortcode/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/shortcode/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/controls.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/style.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/spacer/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/table/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/table/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/table/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/table/state.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/table/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/table/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/table/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/table/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/text-columns/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/text-columns/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/text-columns/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/text-columns/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/text-columns/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/text-columns/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/verse/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/verse/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/verse/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/verse/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/verse/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/verse/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/verse/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/icon-retry.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/edit-common-settings.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/tracks.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/video/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/tag-cloud/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/tag-cloud/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/tag-cloud/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/tag-cloud/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/freeform/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/freeform/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/freeform/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/freeform/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/group/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/group/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/group/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/group/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/group/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/group/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/group/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/group/variations.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/buttons/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/buttons/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/buttons/transforms.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/buttons/transforms.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/buttons/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/buttons/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/buttons/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/buttons/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/social-list.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/variations.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/amazon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/bandcamp.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/behance.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/chain.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/codepen.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/deviantart.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/dribbble.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/dropbox.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/etsy.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/facebook.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/feed.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/fivehundredpx.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/flickr.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/foursquare.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/goodreads.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/google.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/github.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/instagram.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/lastfm.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/linkedin.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/mail.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/mastodon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/meetup.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/medium.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/patreon.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/pinterest.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/pocket.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/reddit.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/skype.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/snapchat.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/soundcloud.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/spotify.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/telegram.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/tiktok.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/tumblr.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/twitch.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/twitter.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/vimeo.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/vk.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/whatsapp.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/wordpress.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/yelp.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/icons/youtube.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-link/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-links/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-links/deprecated.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-links/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-links/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-links/block.json","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/block-library/src/social-links/save.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/provider/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/provider/with-registry-provider.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/provider/use-block-editor-settings.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/provider/use-block-editor-settings.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/utils/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/utils/media-upload/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/help-detail-navigation-screen.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/style.ios.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/style.android.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/help-topic-row.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/help-get-support-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/intro-to-blocks.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/view-sections.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/block-layout-collage.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/rich-text-light.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/rich-text-dark.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/embed-media-light.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/embed-media-dark.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/build-layouts-light.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/build-layouts-dark.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/add-blocks.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/add-light.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/add-dark.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/move-blocks.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/drag-and-drop-light.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/drag-and-drop-dark.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/move-light.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/move-dark.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/remove-blocks.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/options-light.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/options-dark.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/customize-blocks.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/settings-light.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/images/settings-dark.png","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/icon-move-blocks.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/editor-help/help-section-title.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/editor/src/components/deprecated.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/utils/meta-boxes.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/store/selectors.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/store/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/editor.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/components/layout/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/components/layout/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/components/header/header-toolbar/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/components/header/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/components/header/header-toolbar/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/components/visual-editor/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/components/visual-editor/header.native.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/edit-post/src/components/visual-editor/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/packages/react-native-editor/src/api-fetch-setup.js","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/index.js","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/ar.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/bg.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/bo.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/ca.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/cs.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/cy.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/da.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/de.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/en-au.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/en-ca.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/en-gb.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/en-nz.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/en-za.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/el.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/es.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/es-ar.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/es-cl.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/es-cr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/fa.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/fr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/gl.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/he.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/hr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/hu.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/id.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/is.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/it.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/ja.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/ka.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/ko.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/nb.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/nl.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/nl-be.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/pl.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/pt.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/pt-br.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/ro.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/ru.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/sk.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/sq.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/sr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/sv.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/th.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/tr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/uk.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/ur.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/vi.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/zh-cn.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/jetpack/data/zh-tw.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/index.js","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/ar.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/bg.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/bo.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/ca.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/cs.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/cy.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/da.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/de.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/en-au.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/en-ca.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/en-gb.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/en-nz.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/en-za.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/el.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/es.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/es-ar.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/es-cl.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/es-cr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/fa.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/fr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/gl.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/he.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/hr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/hu.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/id.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/is.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/it.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/ja.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/ka.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/ko.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/nb.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/nl.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/nl-be.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/pl.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/pt.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/pt-br.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/ro.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/ru.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/sk.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/sq.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/sr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/sv.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/th.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/tr.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/uk.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/ur.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/vi.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/zh-cn.json","/Users/fluiddot/workspace/gutenberg-mobile/src/i18n-cache/layout-grid/data/zh-tw.json","/Users/fluiddot/workspace/gutenberg-mobile/src/setup.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/interopRequireDefault.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/extends.js","/Users/fluiddot/workspace/gutenberg-mobile/src/text-font-weight-correct.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/toConsumableArray.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/iterableToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/nonIterableSpread.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/lodash/lodash.js","/Users/fluiddot/workspace/gutenberg-mobile/src/initial-html.js","/Users/fluiddot/workspace/gutenberg-mobile/src/analytics/index.js","/Users/fluiddot/workspace/gutenberg-mobile/src/analytics/redux/index.js","/Users/fluiddot/workspace/gutenberg-mobile/src/analytics/redux/tracked_events.js","/Users/fluiddot/workspace/gutenberg-mobile/src/strings-overrides.js","/Users/fluiddot/workspace/gutenberg-mobile/src/jetpack-editor-setup.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/get-jetpack-data.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/is-active.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/get-site-fragment.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/site-type-utils.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/get-jetpack-extension-availability.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/register-jetpack-plugin.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/index.jsx","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/style.scss","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/plan-utils.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/js-packages/shared-extension-utils/src/get-host-app-namespace.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/extended-blocks/core-embed/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/extended-blocks/core-embed/facebook.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/block-icons.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/node_modules/.pnpm/@automattic+color-studio@2.5.0/node_modules/@automattic/color-studio/dist/colors.json","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/extended-blocks/core-embed/instagram.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/extended-blocks/core-embed/loom.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/icons.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/icons.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/extended-blocks/core-embed/smartframe.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/videopress/editor.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/videopress/save.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/defineProperty.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/videopress/url.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/editor.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/block-category.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/editor.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/register-jetpack-block.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/index.json","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/render-material-icon.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/address/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/address/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/slicedToArray.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/arrayWithHoles.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/nonIterableRest.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/address/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/email/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/email/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/common.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/simple-input.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/email/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/node_modules/.pnpm/email-validator@2.0.4/node_modules/email-validator/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/phone/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/phone/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/contact-info/phone/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/editor.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/get-category-with-fallbacks.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/story-editing-button.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/icon-customize.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/icon.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/story/story_example-1.png","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/editor.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/block-styles.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/layout/index.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/classCallCheck.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/createClass.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/inherits.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/setPrototypeOf.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/typeof.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/assertThisInitialized.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/getPrototypeOf.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/node_modules/.pnpm/photon@4.0.0/node_modules/photon/dist/cjs/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/node_modules/.pnpm/crc32@0.2.2/node_modules/crc32/lib/crc32.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/node_modules/.pnpm/seed-random@2.2.0/node_modules/seed-random/index.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/debug/src/browser.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/debug/src/common.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/ms/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/image.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/layout/mosaic/index.js","/Users/fluiddot/workspace/gutenberg-mobile/gutenberg/node_modules/resize-observer-polyfill/dist/ResizeObserver.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/layout/column.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/layout/gallery.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/layout/row.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/layout/mosaic/ratios.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/layout/mosaic/resize.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v1/layout/square.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/layout/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/gallery-image/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/utils/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/layout/mosaic/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/layout/column.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/layout/gallery.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/layout/row.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/layout/mosaic/ratios.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v2/layout/square.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/layout/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/gallery-image/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/utils/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/layout/mosaic/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/layout/column.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/layout/gallery.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/layout/row.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/layout/mosaic/ratios.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/deprecated/v3/layout/square.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/settings.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout-picker.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/styles.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/save.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/gallery-image/edit.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/icons.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/gallery-image/save.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/utils/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/shared/is-offline-mode.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout/mosaic/index.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout/column.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout/gallery.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout/row.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout/mosaic/ratios.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout/mosaic/resize.native.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/layout/square.js","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery_example-1.jpg","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery_example-2.jpg","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery_example-3.jpg","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery_example-4.jpg","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery_example-5.jpg","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery_example-6.jpg","/Users/fluiddot/workspace/gutenberg-mobile/jetpack/projects/plugins/jetpack/extensions/blocks/tiled-gallery/editor.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/src/block-experiments-setup.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/index.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/variations.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/icons.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","/Users/fluiddot/workspace/gutenberg-mobile/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/variation-control/index.native.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/variation-control/style.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/constants.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/grid-defaults.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/higher-order.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/css-classname.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/edit.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid/save.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid-column/edit.native.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid-column/hooks/with-update-alignment.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid-column/edit.native.scss","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid-column/save.js","/Users/fluiddot/workspace/gutenberg-mobile/block-experiments/blocks/layout-grid/src/grid-column/deprecated.js"],"sourcesContent":["var __BUNDLE_START_TIME__=this.nativePerformanceNow?nativePerformanceNow():Date.now(),__DEV__=false,process=this.process||{},__METRO_GLOBAL_PREFIX__='';process.env=process.env||{};process.env.NODE_ENV=process.env.NODE_ENV||\"production\";","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @polyfill\n *\n * @format\n */\n\"use strict\";\n/* eslint-disable no-bitwise */\n\nglobal.__r = metroRequire;\nglobal[`${__METRO_GLOBAL_PREFIX__}__d`] = define;\nglobal.__c = clear;\nglobal.__registerSegment = registerSegment;\nvar modules = clear(); // Don't use a Symbol here, it would pull in an extra polyfill with all sorts of\n// additional stuff (e.g. Array.from).\n\nconst EMPTY = {};\nconst { hasOwnProperty } = {};\n\nif (__DEV__) {\n global.$RefreshReg$ = () => {};\n\n global.$RefreshSig$ = () => type => type;\n}\n\nfunction clear() {\n modules = Object.create(null); // We return modules here so that we can assign an initial value to modules\n // when defining it. Otherwise, we would have to do \"let modules = null\",\n // which will force us to add \"nullthrows\" everywhere.\n\n return modules;\n}\n\nif (__DEV__) {\n var verboseNamesToModuleIds = Object.create(null);\n var initializingModuleIds = [];\n}\n\nfunction define(factory, moduleId, dependencyMap) {\n if (modules[moduleId] != null) {\n if (__DEV__) {\n // (We take `inverseDependencies` from `arguments` to avoid an unused\n // named parameter in `define` in production.\n const inverseDependencies = arguments[4]; // If the module has already been defined and the define method has been\n // called with inverseDependencies, we can hot reload it.\n\n if (inverseDependencies) {\n global.__accept(moduleId, factory, dependencyMap, inverseDependencies);\n }\n } // prevent repeated calls to `global.nativeRequire` to overwrite modules\n // that are already loaded\n\n return;\n }\n\n const mod = {\n dependencyMap,\n factory,\n hasError: false,\n importedAll: EMPTY,\n importedDefault: EMPTY,\n isInitialized: false,\n publicModule: {\n exports: {}\n }\n };\n modules[moduleId] = mod;\n\n if (__DEV__) {\n // HMR\n mod.hot = createHotReloadingObject(); // DEBUGGABLE MODULES NAMES\n // we take `verboseName` from `arguments` to avoid an unused named parameter\n // in `define` in production.\n\n const verboseName = arguments[3];\n\n if (verboseName) {\n mod.verboseName = verboseName;\n verboseNamesToModuleIds[verboseName] = moduleId;\n }\n }\n}\n\nfunction metroRequire(moduleId) {\n if (__DEV__ && typeof moduleId === \"string\") {\n const verboseName = moduleId;\n moduleId = verboseNamesToModuleIds[verboseName];\n\n if (moduleId == null) {\n throw new Error(`Unknown named module: \"${verboseName}\"`);\n } else {\n console.warn(\n `Requiring module \"${verboseName}\" by name is only supported for ` +\n \"debugging purposes and will BREAK IN PRODUCTION!\"\n );\n }\n } //$FlowFixMe: at this point we know that moduleId is a number\n\n const moduleIdReallyIsNumber = moduleId;\n\n if (__DEV__) {\n const initializingIndex = initializingModuleIds.indexOf(\n moduleIdReallyIsNumber\n );\n\n if (initializingIndex !== -1) {\n const cycle = initializingModuleIds\n .slice(initializingIndex)\n .map(id => (modules[id] ? modules[id].verboseName : \"[unknown]\")); // We want to show A -> B -> A:\n\n cycle.push(cycle[0]);\n console.warn(\n `Require cycle: ${cycle.join(\" -> \")}\\n\\n` +\n \"Require cycles are allowed, but can result in uninitialized values. \" +\n \"Consider refactoring to remove the need for a cycle.\"\n );\n }\n }\n\n const module = modules[moduleIdReallyIsNumber];\n return module && module.isInitialized\n ? module.publicModule.exports\n : guardedLoadModule(moduleIdReallyIsNumber, module);\n}\n\nfunction metroImportDefault(moduleId) {\n if (__DEV__ && typeof moduleId === \"string\") {\n const verboseName = moduleId;\n moduleId = verboseNamesToModuleIds[verboseName];\n } //$FlowFixMe: at this point we know that moduleId is a number\n\n const moduleIdReallyIsNumber = moduleId;\n\n if (\n modules[moduleIdReallyIsNumber] &&\n modules[moduleIdReallyIsNumber].importedDefault !== EMPTY\n ) {\n return modules[moduleIdReallyIsNumber].importedDefault;\n }\n\n const exports = metroRequire(moduleIdReallyIsNumber);\n const importedDefault =\n exports && exports.__esModule ? exports.default : exports; // $FlowFixMe The metroRequire call above will throw if modules[id] is null\n\n return (modules[moduleIdReallyIsNumber].importedDefault = importedDefault);\n}\n\nmetroRequire.importDefault = metroImportDefault;\n\nfunction metroImportAll(moduleId) {\n if (__DEV__ && typeof moduleId === \"string\") {\n const verboseName = moduleId;\n moduleId = verboseNamesToModuleIds[verboseName];\n } //$FlowFixMe: at this point we know that moduleId is a number\n\n const moduleIdReallyIsNumber = moduleId;\n\n if (\n modules[moduleIdReallyIsNumber] &&\n modules[moduleIdReallyIsNumber].importedAll !== EMPTY\n ) {\n return modules[moduleIdReallyIsNumber].importedAll;\n }\n\n const exports = metroRequire(moduleIdReallyIsNumber);\n let importedAll;\n\n if (exports && exports.__esModule) {\n importedAll = exports;\n } else {\n importedAll = {}; // Refrain from using Object.assign, it has to work in ES3 environments.\n\n if (exports) {\n for (const key in exports) {\n if (hasOwnProperty.call(exports, key)) {\n importedAll[key] = exports[key];\n }\n }\n }\n\n importedAll.default = exports;\n } // $FlowFixMe The metroRequire call above will throw if modules[id] is null\n\n return (modules[moduleIdReallyIsNumber].importedAll = importedAll);\n}\n\nmetroRequire.importAll = metroImportAll;\nlet inGuard = false;\n\nfunction guardedLoadModule(moduleId, module) {\n if (!inGuard && global.ErrorUtils) {\n inGuard = true;\n let returnValue;\n\n try {\n returnValue = loadModuleImplementation(moduleId, module);\n } catch (e) {\n // TODO: (moti) T48204692 Type this use of ErrorUtils.\n global.ErrorUtils.reportFatalError(e);\n }\n\n inGuard = false;\n return returnValue;\n } else {\n return loadModuleImplementation(moduleId, module);\n }\n}\n\nconst ID_MASK_SHIFT = 16;\nconst LOCAL_ID_MASK = ~0 >>> ID_MASK_SHIFT;\n\nfunction unpackModuleId(moduleId) {\n const segmentId = moduleId >>> ID_MASK_SHIFT;\n const localId = moduleId & LOCAL_ID_MASK;\n return {\n segmentId,\n localId\n };\n}\n\nmetroRequire.unpackModuleId = unpackModuleId;\n\nfunction packModuleId(value) {\n return (value.segmentId << ID_MASK_SHIFT) + value.localId;\n}\n\nmetroRequire.packModuleId = packModuleId;\nconst moduleDefinersBySegmentID = [];\nconst definingSegmentByModuleID = new Map();\n\nfunction registerSegment(segmentId, moduleDefiner, moduleIds) {\n moduleDefinersBySegmentID[segmentId] = moduleDefiner;\n\n if (__DEV__) {\n if (segmentId === 0 && moduleIds) {\n throw new Error(\n \"registerSegment: Expected moduleIds to be null for main segment\"\n );\n }\n\n if (segmentId !== 0 && !moduleIds) {\n throw new Error(\n \"registerSegment: Expected moduleIds to be passed for segment #\" +\n segmentId\n );\n }\n }\n\n if (moduleIds) {\n moduleIds.forEach(moduleId => {\n if (!modules[moduleId] && !definingSegmentByModuleID.has(moduleId)) {\n definingSegmentByModuleID.set(moduleId, segmentId);\n }\n });\n }\n}\n\nfunction loadModuleImplementation(moduleId, module) {\n if (!module && moduleDefinersBySegmentID.length > 0) {\n var _definingSegmentByMod;\n\n const segmentId =\n (_definingSegmentByMod = definingSegmentByModuleID.get(moduleId)) !==\n null && _definingSegmentByMod !== void 0\n ? _definingSegmentByMod\n : 0;\n const definer = moduleDefinersBySegmentID[segmentId];\n\n if (definer != null) {\n definer(moduleId);\n module = modules[moduleId];\n definingSegmentByModuleID.delete(moduleId);\n }\n }\n\n const nativeRequire = global.nativeRequire;\n\n if (!module && nativeRequire) {\n const { segmentId, localId } = unpackModuleId(moduleId);\n nativeRequire(localId, segmentId);\n module = modules[moduleId];\n }\n\n if (!module) {\n throw unknownModuleError(moduleId);\n }\n\n if (module.hasError) {\n throw moduleThrewError(moduleId, module.error);\n }\n\n if (__DEV__) {\n var Systrace = requireSystrace();\n var Refresh = requireRefresh();\n } // We must optimistically mark module as initialized before running the\n // factory to keep any require cycles inside the factory from causing an\n // infinite require loop.\n\n module.isInitialized = true;\n const { factory, dependencyMap } = module;\n\n if (__DEV__) {\n initializingModuleIds.push(moduleId);\n }\n\n try {\n if (__DEV__) {\n // $FlowIgnore: we know that __DEV__ is const and `Systrace` exists\n Systrace.beginEvent(\"JS_require_\" + (module.verboseName || moduleId));\n }\n\n const moduleObject = module.publicModule;\n\n if (__DEV__) {\n moduleObject.hot = module.hot;\n var prevRefreshReg = global.$RefreshReg$;\n var prevRefreshSig = global.$RefreshSig$;\n\n if (Refresh != null) {\n const RefreshRuntime = Refresh;\n\n global.$RefreshReg$ = (type, id) => {\n RefreshRuntime.register(type, moduleId + \" \" + id);\n };\n\n global.$RefreshSig$ =\n RefreshRuntime.createSignatureFunctionForTransform;\n }\n }\n\n moduleObject.id = moduleId; // keep args in sync with with defineModuleCode in\n // metro/src/Resolver/index.js\n // and metro/src/ModuleGraph/worker.js\n\n factory(\n global,\n metroRequire,\n metroImportDefault,\n metroImportAll,\n moduleObject,\n moduleObject.exports,\n dependencyMap\n ); // avoid removing factory in DEV mode as it breaks HMR\n\n if (!__DEV__) {\n // $FlowFixMe: This is only sound because we never access `factory` again\n module.factory = undefined;\n module.dependencyMap = undefined;\n }\n\n if (__DEV__) {\n // $FlowIgnore: we know that __DEV__ is const and `Systrace` exists\n Systrace.endEvent();\n\n if (Refresh != null) {\n registerExportsForReactRefresh(Refresh, moduleObject.exports, moduleId);\n }\n }\n\n return moduleObject.exports;\n } catch (e) {\n module.hasError = true;\n module.error = e;\n module.isInitialized = false;\n module.publicModule.exports = undefined;\n throw e;\n } finally {\n if (__DEV__) {\n if (initializingModuleIds.pop() !== moduleId) {\n throw new Error(\n \"initializingModuleIds is corrupt; something is terribly wrong\"\n );\n }\n\n global.$RefreshReg$ = prevRefreshReg;\n global.$RefreshSig$ = prevRefreshSig;\n }\n }\n}\n\nfunction unknownModuleError(id) {\n let message = 'Requiring unknown module \"' + id + '\".';\n\n if (__DEV__) {\n message +=\n \" If you are sure the module exists, try restarting Metro. \" +\n \"You may also want to run `yarn` or `npm install`.\";\n }\n\n return Error(message);\n}\n\nfunction moduleThrewError(id, error) {\n const displayName = (__DEV__ && modules[id] && modules[id].verboseName) || id;\n return Error(\n 'Requiring module \"' + displayName + '\", which threw an exception: ' + error\n );\n}\n\nif (__DEV__) {\n metroRequire.Systrace = {\n beginEvent: () => {},\n endEvent: () => {}\n };\n\n metroRequire.getModules = () => {\n return modules;\n }; // HOT MODULE RELOADING\n\n var createHotReloadingObject = function() {\n const hot = {\n _acceptCallback: null,\n _disposeCallback: null,\n _didAccept: false,\n accept: callback => {\n hot._didAccept = true;\n hot._acceptCallback = callback;\n },\n dispose: callback => {\n hot._disposeCallback = callback;\n }\n };\n return hot;\n };\n\n let reactRefreshTimeout = null;\n\n const metroHotUpdateModule = function(\n id,\n factory,\n dependencyMap,\n inverseDependencies\n ) {\n const mod = modules[id];\n\n if (!mod) {\n if (factory) {\n // New modules are going to be handled by the define() method.\n return;\n }\n\n throw unknownModuleError(id);\n }\n\n if (!mod.hasError && !mod.isInitialized) {\n // The module hasn't actually been executed yet,\n // so we can always safely replace it.\n mod.factory = factory;\n mod.dependencyMap = dependencyMap;\n return;\n }\n\n const Refresh = requireRefresh();\n const refreshBoundaryIDs = new Set(); // In this loop, we will traverse the dependency tree upwards from the\n // changed module. Updates \"bubble\" up to the closest accepted parent.\n //\n // If we reach the module root and nothing along the way accepted the update,\n // we know hot reload is going to fail. In that case we return false.\n //\n // The main purpose of this loop is to figure out whether it's safe to apply\n // a hot update. It is only safe when the update was accepted somewhere\n // along the way upwards for each of its parent dependency module chains.\n //\n // We perform a topological sort because we may discover the same\n // module more than once in the list of things to re-execute, and\n // we want to execute modules before modules that depend on them.\n //\n // If we didn't have this check, we'd risk re-evaluating modules that\n // have side effects and lead to confusing and meaningless crashes.\n\n let didBailOut = false;\n const updatedModuleIDs = topologicalSort(\n [id], // Start with the changed module and go upwards\n pendingID => {\n const pendingModule = modules[pendingID];\n\n if (pendingModule == null) {\n // Nothing to do.\n return [];\n }\n\n const pendingHot = pendingModule.hot;\n\n if (pendingHot == null) {\n throw new Error(\n \"[Refresh] Expected module.hot to always exist in DEV.\"\n );\n } // A module can be accepted manually from within itself.\n\n let canAccept = pendingHot._didAccept;\n\n if (!canAccept && Refresh != null) {\n // Or React Refresh may mark it accepted based on exports.\n const isBoundary = isReactRefreshBoundary(\n Refresh,\n pendingModule.publicModule.exports\n );\n\n if (isBoundary) {\n canAccept = true;\n refreshBoundaryIDs.add(pendingID);\n }\n }\n\n if (canAccept) {\n // Don't look at parents.\n return [];\n } // If we bubble through the roof, there is no way to do a hot update.\n // Bail out altogether. This is the failure case.\n\n const parentIDs = inverseDependencies[pendingID];\n\n if (parentIDs.length === 0) {\n // Reload the app because the hot reload can't succeed.\n // This should work both on web and React Native.\n performFullRefresh(\"No root boundary\", {\n source: mod,\n failed: pendingModule\n });\n didBailOut = true;\n return [];\n } // This module can't handle the update but maybe all its parents can?\n // Put them all in the queue to run the same set of checks.\n\n return parentIDs;\n },\n () => didBailOut // Should we stop?\n ).reverse();\n\n if (didBailOut) {\n return;\n } // If we reached here, it is likely that hot reload will be successful.\n // Run the actual factories.\n\n const seenModuleIDs = new Set();\n\n for (let i = 0; i < updatedModuleIDs.length; i++) {\n // Don't process twice if we have a cycle.\n const updatedID = updatedModuleIDs[i];\n\n if (seenModuleIDs.has(updatedID)) {\n continue;\n }\n\n seenModuleIDs.add(updatedID);\n const updatedMod = modules[updatedID];\n\n if (updatedMod == null) {\n throw new Error(\"[Refresh] Expected to find the updated module.\");\n }\n\n const prevExports = updatedMod.publicModule.exports;\n const didError = runUpdatedModule(\n updatedID,\n updatedID === id ? factory : undefined,\n updatedID === id ? dependencyMap : undefined\n );\n const nextExports = updatedMod.publicModule.exports;\n\n if (didError) {\n // The user was shown a redbox about module initialization.\n // There's nothing for us to do here until it's fixed.\n return;\n }\n\n if (refreshBoundaryIDs.has(updatedID)) {\n // Since we just executed the code for it, it's possible\n // that the new exports make it ineligible for being a boundary.\n const isNoLongerABoundary = !isReactRefreshBoundary(\n Refresh,\n nextExports\n ); // It can also become ineligible if its exports are incompatible\n // with the previous exports.\n // For example, if you add/remove/change exports, we'll want\n // to re-execute the importing modules, and force those components\n // to re-render. Similarly, if you convert a class component\n // to a function, we want to invalidate the boundary.\n\n const didInvalidate = shouldInvalidateReactRefreshBoundary(\n Refresh,\n prevExports,\n nextExports\n );\n\n if (isNoLongerABoundary || didInvalidate) {\n // We'll be conservative. The only case in which we won't do a full\n // reload is if all parent modules are also refresh boundaries.\n // In that case we'll add them to the current queue.\n const parentIDs = inverseDependencies[updatedID];\n\n if (parentIDs.length === 0) {\n // Looks like we bubbled to the root. Can't recover from that.\n performFullRefresh(\n isNoLongerABoundary\n ? \"No longer a boundary\"\n : \"Invalidated boundary\",\n {\n source: mod,\n failed: updatedMod\n }\n );\n return;\n } // Schedule all parent refresh boundaries to re-run in this loop.\n\n for (let j = 0; j < parentIDs.length; j++) {\n const parentID = parentIDs[j];\n const parentMod = modules[parentID];\n\n if (parentMod == null) {\n throw new Error(\"[Refresh] Expected to find parent module.\");\n }\n\n const canAcceptParent = isReactRefreshBoundary(\n Refresh,\n parentMod.publicModule.exports\n );\n\n if (canAcceptParent) {\n // All parents will have to re-run too.\n refreshBoundaryIDs.add(parentID);\n updatedModuleIDs.push(parentID);\n } else {\n performFullRefresh(\"Invalidated boundary\", {\n source: mod,\n failed: parentMod\n });\n return;\n }\n }\n }\n }\n }\n\n if (Refresh != null) {\n // Debounce a little in case there are multiple updates queued up.\n // This is also useful because __accept may be called multiple times.\n if (reactRefreshTimeout == null) {\n reactRefreshTimeout = setTimeout(() => {\n reactRefreshTimeout = null; // Update React components.\n\n Refresh.performReactRefresh();\n }, 30);\n }\n }\n };\n\n const topologicalSort = function(roots, getEdges, earlyStop) {\n const result = [];\n const visited = new Set();\n\n function traverseDependentNodes(node) {\n visited.add(node);\n const dependentNodes = getEdges(node);\n\n if (earlyStop(node)) {\n return;\n }\n\n dependentNodes.forEach(dependent => {\n if (visited.has(dependent)) {\n return;\n }\n\n traverseDependentNodes(dependent);\n });\n result.push(node);\n }\n\n roots.forEach(root => {\n if (!visited.has(root)) {\n traverseDependentNodes(root);\n }\n });\n return result;\n };\n\n const runUpdatedModule = function(id, factory, dependencyMap) {\n const mod = modules[id];\n\n if (mod == null) {\n throw new Error(\"[Refresh] Expected to find the module.\");\n }\n\n const { hot } = mod;\n\n if (!hot) {\n throw new Error(\"[Refresh] Expected module.hot to always exist in DEV.\");\n }\n\n if (hot._disposeCallback) {\n try {\n hot._disposeCallback();\n } catch (error) {\n console.error(\n `Error while calling dispose handler for module ${id}: `,\n error\n );\n }\n }\n\n if (factory) {\n mod.factory = factory;\n }\n\n if (dependencyMap) {\n mod.dependencyMap = dependencyMap;\n }\n\n mod.hasError = false;\n mod.error = undefined;\n mod.importedAll = EMPTY;\n mod.importedDefault = EMPTY;\n mod.isInitialized = false;\n const prevExports = mod.publicModule.exports;\n mod.publicModule.exports = {};\n hot._didAccept = false;\n hot._acceptCallback = null;\n hot._disposeCallback = null;\n metroRequire(id);\n\n if (mod.hasError) {\n // This error has already been reported via a redbox.\n // We know it's likely a typo or some mistake that was just introduced.\n // Our goal now is to keep the rest of the application working so that by\n // the time user fixes the error, the app isn't completely destroyed\n // underneath the redbox. So we'll revert the module object to the last\n // successful export and stop propagating this update.\n mod.hasError = false;\n mod.isInitialized = true;\n mod.error = null;\n mod.publicModule.exports = prevExports; // We errored. Stop the update.\n\n return true;\n }\n\n if (hot._acceptCallback) {\n try {\n hot._acceptCallback();\n } catch (error) {\n console.error(\n `Error while calling accept handler for module ${id}: `,\n error\n );\n }\n } // No error.\n\n return false;\n };\n\n const performFullRefresh = (reason, modules) => {\n /* global window */\n if (\n typeof window !== \"undefined\" &&\n window.location != null &&\n typeof window.location.reload === \"function\"\n ) {\n window.location.reload();\n } else {\n const Refresh = requireRefresh();\n\n if (Refresh != null) {\n var _modules$source$verbo,\n _modules$source,\n _modules$failed$verbo,\n _modules$failed;\n\n const sourceName =\n (_modules$source$verbo =\n (_modules$source = modules.source) === null ||\n _modules$source === void 0\n ? void 0\n : _modules$source.verboseName) !== null &&\n _modules$source$verbo !== void 0\n ? _modules$source$verbo\n : \"unknown\";\n const failedName =\n (_modules$failed$verbo =\n (_modules$failed = modules.failed) === null ||\n _modules$failed === void 0\n ? void 0\n : _modules$failed.verboseName) !== null &&\n _modules$failed$verbo !== void 0\n ? _modules$failed$verbo\n : \"unknown\";\n Refresh.performFullRefresh(\n `Fast Refresh - ${reason} <${sourceName}> <${failedName}>`\n );\n } else {\n console.warn(\"Could not reload the application after an edit.\");\n }\n }\n }; // Modules that only export components become React Refresh boundaries.\n\n var isReactRefreshBoundary = function(Refresh, moduleExports) {\n if (Refresh.isLikelyComponentType(moduleExports)) {\n return true;\n }\n\n if (moduleExports == null || typeof moduleExports !== \"object\") {\n // Exit if we can't iterate over exports.\n return false;\n }\n\n let hasExports = false;\n let areAllExportsComponents = true;\n\n for (const key in moduleExports) {\n hasExports = true;\n\n if (key === \"__esModule\") {\n continue;\n }\n\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n\n if (desc && desc.get) {\n // Don't invoke getters as they may have side effects.\n return false;\n }\n\n const exportValue = moduleExports[key];\n\n if (!Refresh.isLikelyComponentType(exportValue)) {\n areAllExportsComponents = false;\n }\n }\n\n return hasExports && areAllExportsComponents;\n };\n\n var shouldInvalidateReactRefreshBoundary = (\n Refresh,\n prevExports,\n nextExports\n ) => {\n const prevSignature = getRefreshBoundarySignature(Refresh, prevExports);\n const nextSignature = getRefreshBoundarySignature(Refresh, nextExports);\n\n if (prevSignature.length !== nextSignature.length) {\n return true;\n }\n\n for (let i = 0; i < nextSignature.length; i++) {\n if (prevSignature[i] !== nextSignature[i]) {\n return true;\n }\n }\n\n return false;\n }; // When this signature changes, it's unsafe to stop at this refresh boundary.\n\n var getRefreshBoundarySignature = (Refresh, moduleExports) => {\n const signature = [];\n signature.push(Refresh.getFamilyByType(moduleExports));\n\n if (moduleExports == null || typeof moduleExports !== \"object\") {\n // Exit if we can't iterate over exports.\n // (This is important for legacy environments.)\n return signature;\n }\n\n for (const key in moduleExports) {\n if (key === \"__esModule\") {\n continue;\n }\n\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n\n if (desc && desc.get) {\n continue;\n }\n\n const exportValue = moduleExports[key];\n signature.push(key);\n signature.push(Refresh.getFamilyByType(exportValue));\n }\n\n return signature;\n };\n\n var registerExportsForReactRefresh = (Refresh, moduleExports, moduleID) => {\n Refresh.register(moduleExports, moduleID + \" %exports%\");\n\n if (moduleExports == null || typeof moduleExports !== \"object\") {\n // Exit if we can't iterate over exports.\n // (This is important for legacy environments.)\n return;\n }\n\n for (const key in moduleExports) {\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n\n if (desc && desc.get) {\n // Don't invoke getters as they may have side effects.\n continue;\n }\n\n const exportValue = moduleExports[key];\n const typeID = moduleID + \" %exports% \" + key;\n Refresh.register(exportValue, typeID);\n }\n };\n\n global.__accept = metroHotUpdateModule;\n}\n\nif (__DEV__) {\n // The metro require polyfill can not have module dependencies.\n // The Systrace and ReactRefresh dependencies are, therefore, made publicly\n // available. Ideally, the dependency would be inversed in a way that\n // Systrace / ReactRefresh could integrate into Metro rather than\n // having to make them publicly available.\n var requireSystrace = function requireSystrace() {\n return (\n global[__METRO_GLOBAL_PREFIX__ + \"__SYSTRACE\"] || metroRequire.Systrace\n );\n };\n\n var requireRefresh = function requireRefresh() {\n return (\n global[__METRO_GLOBAL_PREFIX__ + \"__ReactRefresh\"] || metroRequire.Refresh\n );\n };\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @polyfill\n * @nolint\n * @format\n */\n\n/* eslint-disable no-shadow, eqeqeq, curly, no-unused-vars, no-void, no-control-regex */\n\n/**\n * This pipes all of our console logging functions to native logging so that\n * JavaScript errors in required modules show up in Xcode via NSLog.\n */\nconst inspect = (function() {\n // Copyright Joyent, Inc. and other Node contributors.\n //\n // Permission is hereby granted, free of charge, to any person obtaining a\n // copy of this software and associated documentation files (the\n // \"Software\"), to deal in the Software without restriction, including\n // without limitation the rights to use, copy, modify, merge, publish,\n // distribute, sublicense, and/or sell copies of the Software, and to permit\n // persons to whom the Software is furnished to do so, subject to the\n // following conditions:\n //\n // The above copyright notice and this permission notice shall be included\n // in all copies or substantial portions of the Software.\n //\n // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n // USE OR OTHER DEALINGS IN THE SOFTWARE.\n //\n // https://github.com/joyent/node/blob/master/lib/util.js\n\n function inspect(obj, opts) {\n var ctx = {\n seen: [],\n formatValueCalls: 0,\n stylize: stylizeNoColor,\n };\n return formatValue(ctx, obj, opts.depth);\n }\n\n function stylizeNoColor(str, styleType) {\n return str;\n }\n\n function arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n }\n\n function formatValue(ctx, value, recurseTimes) {\n ctx.formatValueCalls++;\n if (ctx.formatValueCalls > 200) {\n return `[TOO BIG formatValueCalls ${ctx.formatValueCalls} exceeded limit of 200]`;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (\n isError(value) &&\n (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)\n ) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '',\n array = false,\n braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(\n ctx,\n value,\n recurseTimes,\n visibleKeys,\n key,\n array,\n );\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n }\n\n function formatPrimitive(ctx, value) {\n if (isUndefined(value)) return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple =\n \"'\" +\n JSON.stringify(value)\n .replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') +\n \"'\";\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value)) return ctx.stylize('' + value, 'number');\n if (isBoolean(value)) return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value)) return ctx.stylize('null', 'null');\n }\n\n function formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n }\n\n function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(\n formatProperty(\n ctx,\n value,\n recurseTimes,\n visibleKeys,\n String(i),\n true,\n ),\n );\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(\n formatProperty(ctx, value, recurseTimes, visibleKeys, key, true),\n );\n }\n });\n return output;\n }\n\n function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || {value: value[key]};\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str\n .split('\\n')\n .map(function(line) {\n return ' ' + line;\n })\n .join('\\n')\n .substr(2);\n } else {\n str =\n '\\n' +\n str\n .split('\\n')\n .map(function(line) {\n return ' ' + line;\n })\n .join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n }\n\n function reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return (\n braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1]\n );\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n }\n\n // NOTE: These type checking functions intentionally don't use `instanceof`\n // because it is fragile and can be easily faked with `Object.create()`.\n function isArray(ar) {\n return Array.isArray(ar);\n }\n\n function isBoolean(arg) {\n return typeof arg === 'boolean';\n }\n\n function isNull(arg) {\n return arg === null;\n }\n\n function isNullOrUndefined(arg) {\n return arg == null;\n }\n\n function isNumber(arg) {\n return typeof arg === 'number';\n }\n\n function isString(arg) {\n return typeof arg === 'string';\n }\n\n function isSymbol(arg) {\n return typeof arg === 'symbol';\n }\n\n function isUndefined(arg) {\n return arg === void 0;\n }\n\n function isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n }\n\n function isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n }\n\n function isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n }\n\n function isError(e) {\n return (\n isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error)\n );\n }\n\n function isFunction(arg) {\n return typeof arg === 'function';\n }\n\n function objectToString(o) {\n return Object.prototype.toString.call(o);\n }\n\n function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n }\n\n return inspect;\n})();\n\nconst OBJECT_COLUMN_NAME = '(index)';\nconst LOG_LEVELS = {\n trace: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\nconst INSPECTOR_LEVELS = [];\nINSPECTOR_LEVELS[LOG_LEVELS.trace] = 'debug';\nINSPECTOR_LEVELS[LOG_LEVELS.info] = 'log';\nINSPECTOR_LEVELS[LOG_LEVELS.warn] = 'warning';\nINSPECTOR_LEVELS[LOG_LEVELS.error] = 'error';\n\n// Strip the inner function in getNativeLogFunction(), if in dev also\n// strip method printing to originalConsole.\nconst INSPECTOR_FRAMES_TO_SKIP = __DEV__ ? 2 : 1;\n\nfunction getNativeLogFunction(level) {\n return function() {\n let str;\n if (arguments.length === 1 && typeof arguments[0] === 'string') {\n str = arguments[0];\n } else {\n str = Array.prototype.map\n .call(arguments, function(arg) {\n return inspect(arg, {depth: 10});\n })\n .join(', ');\n }\n\n // TRICKY\n // If more than one argument is provided, the code above collapses them all\n // into a single formatted string. This transform wraps string arguments in\n // single quotes (e.g. \"foo\" -> \"'foo'\") which then breaks the \"Warning:\"\n // check below. So it's important that we look at the first argument, rather\n // than the formatted argument string.\n const firstArg = arguments[0];\n\n let logLevel = level;\n if (\n typeof firstArg === 'string' &&\n firstArg.slice(0, 9) === 'Warning: ' &&\n logLevel >= LOG_LEVELS.error\n ) {\n // React warnings use console.error so that a stack trace is shown,\n // but we don't (currently) want these to show a redbox\n // (Note: Logic duplicated in ExceptionsManager.js.)\n logLevel = LOG_LEVELS.warn;\n }\n if (global.__inspectorLog) {\n global.__inspectorLog(\n INSPECTOR_LEVELS[logLevel],\n str,\n [].slice.call(arguments),\n INSPECTOR_FRAMES_TO_SKIP,\n );\n }\n if (groupStack.length) {\n str = groupFormat('', str);\n }\n global.nativeLoggingHook(str, logLevel);\n };\n}\n\nfunction repeat(element, n) {\n return Array.apply(null, Array(n)).map(function() {\n return element;\n });\n}\n\nfunction consoleTablePolyfill(rows) {\n // convert object -> array\n if (!Array.isArray(rows)) {\n var data = rows;\n rows = [];\n for (var key in data) {\n if (data.hasOwnProperty(key)) {\n var row = data[key];\n row[OBJECT_COLUMN_NAME] = key;\n rows.push(row);\n }\n }\n }\n if (rows.length === 0) {\n global.nativeLoggingHook('', LOG_LEVELS.info);\n return;\n }\n\n var columns = Object.keys(rows[0]).sort();\n var stringRows = [];\n var columnWidths = [];\n\n // Convert each cell to a string. Also\n // figure out max cell width for each column\n columns.forEach(function(k, i) {\n columnWidths[i] = k.length;\n for (var j = 0; j < rows.length; j++) {\n var cellStr = (rows[j][k] || '?').toString();\n stringRows[j] = stringRows[j] || [];\n stringRows[j][i] = cellStr;\n columnWidths[i] = Math.max(columnWidths[i], cellStr.length);\n }\n });\n\n // Join all elements in the row into a single string with | separators\n // (appends extra spaces to each cell to make separators | aligned)\n function joinRow(row, space) {\n var cells = row.map(function(cell, i) {\n var extraSpaces = repeat(' ', columnWidths[i] - cell.length).join('');\n return cell + extraSpaces;\n });\n space = space || ' ';\n return cells.join(space + '|' + space);\n }\n\n var separators = columnWidths.map(function(columnWidth) {\n return repeat('-', columnWidth).join('');\n });\n var separatorRow = joinRow(separators, '-');\n var header = joinRow(columns);\n var table = [header, separatorRow];\n\n for (var i = 0; i < rows.length; i++) {\n table.push(joinRow(stringRows[i]));\n }\n\n // Notice extra empty line at the beginning.\n // Native logging hook adds \"RCTLog >\" at the front of every\n // logged string, which would shift the header and screw up\n // the table\n global.nativeLoggingHook('\\n' + table.join('\\n'), LOG_LEVELS.info);\n}\n\nconst GROUP_PAD = '\\u2502'; // Box light vertical\nconst GROUP_OPEN = '\\u2510'; // Box light down+left\nconst GROUP_CLOSE = '\\u2518'; // Box light up+left\n\nconst groupStack = [];\n\nfunction groupFormat(prefix, msg) {\n // Insert group formatting before the console message\n return groupStack.join('') + prefix + ' ' + (msg || '');\n}\n\nfunction consoleGroupPolyfill(label) {\n global.nativeLoggingHook(groupFormat(GROUP_OPEN, label), LOG_LEVELS.info);\n groupStack.push(GROUP_PAD);\n}\n\nfunction consoleGroupCollapsedPolyfill(label) {\n global.nativeLoggingHook(groupFormat(GROUP_CLOSE, label), LOG_LEVELS.info);\n groupStack.push(GROUP_PAD);\n}\n\nfunction consoleGroupEndPolyfill() {\n groupStack.pop();\n global.nativeLoggingHook(groupFormat(GROUP_CLOSE), LOG_LEVELS.info);\n}\n\nfunction consoleAssertPolyfill(expression, label) {\n if (!expression) {\n global.nativeLoggingHook('Assertion failed: ' + label, LOG_LEVELS.error);\n }\n}\n\nif (global.nativeLoggingHook) {\n const originalConsole = global.console;\n // Preserve the original `console` as `originalConsole`\n if (__DEV__ && originalConsole) {\n const descriptor = Object.getOwnPropertyDescriptor(global, 'console');\n if (descriptor) {\n Object.defineProperty(global, 'originalConsole', descriptor);\n }\n }\n\n global.console = {\n error: getNativeLogFunction(LOG_LEVELS.error),\n info: getNativeLogFunction(LOG_LEVELS.info),\n log: getNativeLogFunction(LOG_LEVELS.info),\n warn: getNativeLogFunction(LOG_LEVELS.warn),\n trace: getNativeLogFunction(LOG_LEVELS.trace),\n debug: getNativeLogFunction(LOG_LEVELS.trace),\n table: consoleTablePolyfill,\n group: consoleGroupPolyfill,\n groupEnd: consoleGroupEndPolyfill,\n groupCollapsed: consoleGroupCollapsedPolyfill,\n assert: consoleAssertPolyfill,\n };\n\n Object.defineProperty(console, '_isPolyfilled', {\n value: true,\n enumerable: false,\n });\n\n // If available, also call the original `console` method since that is\n // sometimes useful. Ex: on OS X, this will let you see rich output in\n // the Safari Web Inspector console.\n if (__DEV__ && originalConsole) {\n Object.keys(console).forEach(methodName => {\n const reactNativeMethod = console[methodName];\n if (originalConsole[methodName]) {\n console[methodName] = function() {\n originalConsole[methodName](...arguments);\n reactNativeMethod.apply(console, arguments);\n };\n }\n });\n\n // The following methods are not supported by this polyfill but\n // we still should pass them to original console if they are\n // supported by it.\n ['clear', 'dir', 'dirxml', 'profile', 'profileEnd'].forEach(methodName => {\n if (typeof originalConsole[methodName] === 'function') {\n console[methodName] = function() {\n originalConsole[methodName](...arguments);\n };\n }\n });\n }\n} else if (!global.console) {\n function stub() {}\n const log = global.print || stub;\n\n global.console = {\n debug: log,\n error: log,\n info: log,\n log: log,\n trace: log,\n warn: log,\n assert(expression, label) {\n if (!expression) {\n log('Assertion failed: ' + label);\n }\n },\n clear: stub,\n dir: stub,\n dirxml: stub,\n group: stub,\n groupCollapsed: stub,\n groupEnd: stub,\n profile: stub,\n profileEnd: stub,\n table: stub,\n };\n\n Object.defineProperty(console, '_isPolyfilled', {\n value: true,\n enumerable: false,\n });\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n * @polyfill\n */\n\nlet _inGuard = 0;\n\ntype ErrorHandler = (error: mixed, isFatal: boolean) => void;\ntype Fn = (...Args) => Return;\n\n/**\n * This is the error handler that is called when we encounter an exception\n * when loading a module. This will report any errors encountered before\n * ExceptionsManager is configured.\n */\nlet _globalHandler: ErrorHandler = function onError(\n e: mixed,\n isFatal: boolean,\n) {\n throw e;\n};\n\n/**\n * The particular require runtime that we are using looks for a global\n * `ErrorUtils` object and if it exists, then it requires modules with the\n * error handler specified via ErrorUtils.setGlobalHandler by calling the\n * require function with applyWithGuard. Since the require module is loaded\n * before any of the modules, this ErrorUtils must be defined (and the handler\n * set) globally before requiring anything.\n */\nconst ErrorUtils = {\n setGlobalHandler(fun: ErrorHandler): void {\n _globalHandler = fun;\n },\n getGlobalHandler(): ErrorHandler {\n return _globalHandler;\n },\n reportError(error: mixed): void {\n _globalHandler && _globalHandler(error, false);\n },\n reportFatalError(error: mixed): void {\n // NOTE: This has an untyped call site in Metro.\n _globalHandler && _globalHandler(error, true);\n },\n applyWithGuard, TOut>(\n fun: Fn,\n context?: ?mixed,\n args?: ?TArgs,\n // Unused, but some code synced from www sets it to null.\n unused_onError?: null,\n // Some callers pass a name here, which we ignore.\n unused_name?: ?string,\n ): ?TOut {\n try {\n _inGuard++;\n /* $FlowFixMe[incompatible-call] : TODO T48204745 (1) apply(context,\n * null) is fine. (2) array -> rest array should work */\n /* $FlowFixMe[incompatible-type] : TODO T48204745 (1) apply(context,\n * null) is fine. (2) array -> rest array should work */\n return fun.apply(context, args);\n } catch (e) {\n ErrorUtils.reportError(e);\n } finally {\n _inGuard--;\n }\n return null;\n },\n applyWithGuardIfNeeded, TOut>(\n fun: Fn,\n context?: ?mixed,\n args?: ?TArgs,\n ): ?TOut {\n if (ErrorUtils.inGuard()) {\n /* $FlowFixMe[incompatible-call] : TODO T48204745 (1) apply(context,\n * null) is fine. (2) array -> rest array should work */\n /* $FlowFixMe[incompatible-type] : TODO T48204745 (1) apply(context,\n * null) is fine. (2) array -> rest array should work */\n return fun.apply(context, args);\n } else {\n ErrorUtils.applyWithGuard(fun, context, args);\n }\n return null;\n },\n inGuard(): boolean {\n return !!_inGuard;\n },\n guard, TOut>(\n fun: Fn,\n name?: ?string,\n context?: ?mixed,\n ): ?(...TArgs) => ?TOut {\n // TODO: (moti) T48204753 Make sure this warning is never hit and remove it - types\n // should be sufficient.\n if (typeof fun !== 'function') {\n console.warn('A function must be passed to ErrorUtils.guard, got ', fun);\n return null;\n }\n const guardName = name ?? fun.name ?? '';\n function guarded(...args: TArgs): ?TOut {\n return ErrorUtils.applyWithGuard(\n fun,\n context ?? this,\n args,\n null,\n guardName,\n );\n }\n\n return guarded;\n },\n};\n\nglobal.ErrorUtils = ErrorUtils;\n\nexport type ErrorUtilsT = typeof ErrorUtils;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @polyfill\n * @nolint\n */\n\n(function() {\n 'use strict';\n\n const hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Returns an array of the given object's own enumerable entries.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n */\n if (typeof Object.entries !== 'function') {\n Object.entries = function(object) {\n // `null` and `undefined` values are not allowed.\n if (object == null) {\n throw new TypeError('Object.entries called on non-object');\n }\n\n const entries = [];\n for (const key in object) {\n if (hasOwnProperty.call(object, key)) {\n entries.push([key, object[key]]);\n }\n }\n return entries;\n };\n }\n\n /**\n * Returns an array of the given object's own enumerable entries.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n */\n if (typeof Object.values !== 'function') {\n Object.values = function(object) {\n // `null` and `undefined` values are not allowed.\n if (object == null) {\n throw new TypeError('Object.values called on non-object');\n }\n\n const values = [];\n for (const key in object) {\n if (hasOwnProperty.call(object, key)) {\n values.push(object[key]);\n }\n }\n return values;\n };\n }\n})();\n","/**\n * Internal dependencies\n */\nimport './src';\n","/**\n * WordPress dependencies\n */\nimport { registerGutenberg } from '@wordpress/react-native-editor';\n\n/**\n * Internal dependencies\n */\nimport { getTranslation as getJetpackTranslation } from './i18n-cache/jetpack';\nimport { getTranslation as getLayoutGridTranslation } from './i18n-cache/layout-grid';\n\nconst pluginTranslations = [\n\t{\n\t\tdomain: 'jetpack',\n\t\tgetTranslation: getJetpackTranslation,\n\t},\n\t{\n\t\tdomain: 'layout-grid',\n\t\tgetTranslation: getLayoutGridTranslation,\n\t},\n];\n\nexport default function registerGutenbergMobile() {\n\tregisterGutenberg( {\n\t\tbeforeInitCallback: () => {\n\t\t\t// We have to lazy import the setup code to prevent executing any code located\n\t\t\t// at global scope before the editor is initialized, like translations retrieval.\n\t\t\trequire( './setup' ).default();\n\n\t\t\t// Set up Jetpack\n\t\t\trequire( './jetpack-editor-setup' ).default();\n\n\t\t\t// Set up Block experiments (i.e. Layout Grid block)\n\t\t\trequire( './block-experiments-setup' ).default();\n\t\t},\n\t\tpluginTranslations,\n\t} );\n}\n\nregisterGutenbergMobile();\n","/**\n * External dependencies\n */\nimport 'react-native-gesture-handler';\n\n/**\n * WordPress dependencies\n */\nimport { applyFilters, doAction } from '@wordpress/hooks';\nimport { Component, cloneElement, registerComponent } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport './globals';\nimport initialHtml from './initial-html';\nimport setupLocale from './setup-locale';\nimport { getTranslation as getGutenbergTranslation } from '../i18n-cache';\n\n/**\n *\tRegister Gutenberg editor to React Native App registry.\n *\n * @typedef {Object} PluginTranslation\n * @property {string} domain Domain of the plugin.\n * @property {Function} getTranslation Function for retrieving translations for a locale.\n *\n * @param {Object} arguments\n * @param {Function} arguments.beforeInitCallback Callback executed before the editor initialization.\n * @param {PluginTranslation[]} arguments.pluginTranslations Array with plugin translations.\n */\nconst registerGutenberg = ( {\n\tbeforeInitCallback,\n\tpluginTranslations = [],\n} = {} ) => {\n\tclass Gutenberg extends Component {\n\t\tconstructor( props ) {\n\t\t\tsuper( props );\n\n\t\t\tconst { rootTag, ...parentProps } = this.props;\n\n\t\t\t// Setup locale.\n\t\t\tsetupLocale(\n\t\t\t\tparentProps.locale,\n\t\t\t\tparentProps.translations,\n\t\t\t\tgetGutenbergTranslation,\n\t\t\t\tpluginTranslations\n\t\t\t);\n\n\t\t\tif ( beforeInitCallback ) {\n\t\t\t\tbeforeInitCallback( parentProps );\n\t\t\t}\n\n\t\t\t// We have to lazy import the setup code to prevent executing any code located\n\t\t\t// at global scope before the editor is initialized, like translations retrieval.\n\t\t\tconst setup = require( './setup' ).default;\n\t\t\t// Initialize editor\n\t\t\tthis.editorComponent = setup();\n\n\t\t\t// Dispatch pre-render hooks.\n\t\t\tdoAction( 'native.pre-render', parentProps );\n\n\t\t\tthis.filteredProps = applyFilters(\n\t\t\t\t'native.block_editor_props',\n\t\t\t\tparentProps\n\t\t\t);\n\t\t}\n\n\t\tcomponentDidMount() {\n\t\t\t// Dispatch post-render hooks.\n\t\t\tdoAction( 'native.render', this.filteredProps );\n\t\t}\n\n\t\trender() {\n\t\t\treturn cloneElement( this.editorComponent, this.filteredProps );\n\t\t}\n\t}\n\n\tregisterComponent( 'gutenberg', () => Gutenberg );\n};\n\nexport { initialHtml as initialHtmlGutenberg, registerGutenberg, setupLocale };\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var _typeof = require(\"@babel/runtime/helpers/typeof\")[\"default\"];\n\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import { initialize } from './init';\n\nexport { Directions } from './Directions';\nexport { State } from './State';\nexport { default as gestureHandlerRootHOC } from './gestureHandlerRootHOC';\nexport { default as GestureHandlerRootView } from './GestureHandlerRootView';\nexport type {\n // event types\n GestureEvent,\n HandlerStateChangeEvent,\n // event payloads types\n GestureEventPayload,\n HandlerStateChangeEventPayload,\n // pointer events\n GestureTouchEvent,\n TouchData,\n // new api event types\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from './handlers/gestureHandlerCommon';\nexport type { GestureType } from './handlers/gestures/gesture';\nexport type {\n TapGestureHandlerEventPayload,\n TapGestureHandlerProps,\n} from './handlers/TapGestureHandler';\nexport type {\n ForceTouchGestureHandlerEventPayload,\n ForceTouchGestureHandlerProps,\n} from './handlers/ForceTouchGestureHandler';\nexport type { ForceTouchGestureChangeEventPayload } from './handlers/gestures/forceTouchGesture';\nexport type {\n LongPressGestureHandlerEventPayload,\n LongPressGestureHandlerProps,\n} from './handlers/LongPressGestureHandler';\nexport type {\n PanGestureHandlerEventPayload,\n PanGestureHandlerProps,\n} from './handlers/PanGestureHandler';\nexport type { PanGestureChangeEventPayload } from './handlers/gestures/panGesture';\nexport type {\n PinchGestureHandlerEventPayload,\n PinchGestureHandlerProps,\n} from './handlers/PinchGestureHandler';\nexport type { PinchGestureChangeEventPayload } from './handlers/gestures/pinchGesture';\nexport type {\n RotationGestureHandlerEventPayload,\n RotationGestureHandlerProps,\n} from './handlers/RotationGestureHandler';\nexport type {\n FlingGestureHandlerEventPayload,\n FlingGestureHandlerProps,\n} from './handlers/FlingGestureHandler';\nexport { TapGestureHandler } from './handlers/TapGestureHandler';\nexport { ForceTouchGestureHandler } from './handlers/ForceTouchGestureHandler';\nexport { LongPressGestureHandler } from './handlers/LongPressGestureHandler';\nexport { PanGestureHandler } from './handlers/PanGestureHandler';\nexport { PinchGestureHandler } from './handlers/PinchGestureHandler';\nexport { RotationGestureHandler } from './handlers/RotationGestureHandler';\nexport { FlingGestureHandler } from './handlers/FlingGestureHandler';\nexport { default as createNativeWrapper } from './handlers/createNativeWrapper';\nexport type {\n NativeViewGestureHandlerPayload,\n NativeViewGestureHandlerProps,\n} from './handlers/NativeViewGestureHandler';\nexport { GestureDetector } from './handlers/gestures/GestureDetector';\nexport { GestureObjects as Gesture } from './handlers/gestures/gestureObjects';\nexport type { TapGestureType as TapGesture } from './handlers/gestures/tapGesture';\nexport type { PanGestureType as PanGesture } from './handlers/gestures/panGesture';\nexport type { FlingGestureType as FlingGesture } from './handlers/gestures/flingGesture';\nexport type { LongPressGestureType as LongPressGesture } from './handlers/gestures/longPressGesture';\nexport type { PinchGestureType as PinchGesture } from './handlers/gestures/pinchGesture';\nexport type { RotationGestureType as RotationGesture } from './handlers/gestures/rotationGesture';\nexport type { ForceTouchGestureType as ForceTouchGesture } from './handlers/gestures/forceTouchGesture';\nexport type { NativeGestureType as NativeGesture } from './handlers/gestures/nativeGesture';\nexport type { ManualGestureType as ManualGesture } from './handlers/gestures/manualGesture';\nexport type {\n ComposedGestureType as ComposedGesture,\n RaceGestureType as RaceGesture,\n SimultaneousGestureType as SimultaneousGesture,\n ExclusiveGestureType as ExclusiveGesture,\n} from './handlers/gestures/gestureComposition';\nexport type { GestureStateManagerType as GestureStateManager } from './handlers/gestures/gestureStateManager';\nexport { NativeViewGestureHandler } from './handlers/NativeViewGestureHandler';\nexport type {\n RawButtonProps,\n BaseButtonProps,\n RectButtonProps,\n BorderlessButtonProps,\n} from './components/GestureButtons';\nexport {\n RawButton,\n BaseButton,\n RectButton,\n BorderlessButton,\n} from './components/GestureButtons';\nexport {\n TouchableHighlight,\n TouchableNativeFeedback,\n TouchableOpacity,\n TouchableWithoutFeedback,\n} from './components/touchables';\nexport {\n ScrollView,\n Switch,\n TextInput,\n DrawerLayoutAndroid,\n FlatList,\n} from './components/GestureComponents';\nexport type {\n //events\n GestureHandlerGestureEvent,\n GestureHandlerStateChangeEvent,\n //event payloads\n GestureHandlerGestureEventNativeEvent,\n GestureHandlerStateChangeNativeEvent,\n NativeViewGestureHandlerGestureEvent,\n NativeViewGestureHandlerStateChangeEvent,\n TapGestureHandlerGestureEvent,\n TapGestureHandlerStateChangeEvent,\n ForceTouchGestureHandlerGestureEvent,\n ForceTouchGestureHandlerStateChangeEvent,\n LongPressGestureHandlerGestureEvent,\n LongPressGestureHandlerStateChangeEvent,\n PanGestureHandlerGestureEvent,\n PanGestureHandlerStateChangeEvent,\n PinchGestureHandlerGestureEvent,\n PinchGestureHandlerStateChangeEvent,\n RotationGestureHandlerGestureEvent,\n RotationGestureHandlerStateChangeEvent,\n FlingGestureHandlerGestureEvent,\n FlingGestureHandlerStateChangeEvent,\n // handlers props\n NativeViewGestureHandlerProperties,\n TapGestureHandlerProperties,\n LongPressGestureHandlerProperties,\n PanGestureHandlerProperties,\n PinchGestureHandlerProperties,\n RotationGestureHandlerProperties,\n FlingGestureHandlerProperties,\n ForceTouchGestureHandlerProperties,\n // buttons props\n RawButtonProperties,\n BaseButtonProperties,\n RectButtonProperties,\n BorderlessButtonProperties,\n} from './handlers/gestureHandlerTypesCompat';\n\nexport { default as Swipeable } from './components/Swipeable';\nexport type {\n DrawerLayoutProps,\n DrawerPosition,\n DrawerState,\n DrawerType,\n DrawerLockMode,\n DrawerKeyboardDismissMode,\n} from './components/DrawerLayout';\nexport { default as DrawerLayout } from './components/DrawerLayout';\n\ninitialize();\n","import { startListening } from './handlers/gestures/eventReceiver';\nimport RNGestureHandlerModule from './RNGestureHandlerModule';\nimport { isFabric } from './utils';\n\nexport function initialize() {\n startListening();\n\n if (isFabric()) {\n RNGestureHandlerModule.install();\n }\n}\n","import { DeviceEventEmitter, EmitterSubscription } from 'react-native';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport {\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { findHandler, findOldGestureHandler } from '../handlersRegistry';\nimport { BaseGesture } from './gesture';\nimport { tagMessage } from '../../utils';\n\nlet gestureHandlerEventSubscription: EmitterSubscription | null = null;\nlet gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;\n\nconst warningMessage = tagMessage(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n);\n\nconst dummyStateManager: GestureStateManagerType = {\n begin: () => {\n console.warn(warningMessage);\n },\n activate: () => {\n console.warn(warningMessage);\n },\n end: () => {\n console.warn(warningMessage);\n },\n fail: () => {\n console.warn(warningMessage);\n },\n};\n\nconst lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n return event.eventType != null;\n}\n\nfunction onGestureHandlerEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n) {\n const handler = findHandler(event.handlerTag) as BaseGesture<\n Record\n >;\n\n if (handler) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n handler.handlers.onBegin?.(event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n handler.handlers.onStart?.(event);\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n } else if (event.oldState !== event.state && event.state === State.END) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, true);\n }\n handler.handlers.onFinalize?.(event, true);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.oldState !== event.state\n ) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, false);\n }\n handler.handlers.onFinalize?.(event, false);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n }\n } else if (isTouchEvent(event)) {\n switch (event.eventType) {\n case EventType.TOUCHES_DOWN:\n handler.handlers?.onTouchesDown?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_MOVE:\n handler.handlers?.onTouchesMove?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_UP:\n handler.handlers?.onTouchesUp?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_CANCELLED:\n handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);\n break;\n }\n } else {\n handler.handlers.onUpdate?.(event);\n\n if (handler.handlers.onChange && handler.handlers.changeEventCalculator) {\n handler.handlers.onChange?.(\n handler.handlers.changeEventCalculator?.(\n event,\n lastUpdateEvent[handler.handlers.handlerTag]\n )\n );\n\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n }\n }\n } else {\n const oldHandler = findOldGestureHandler(event.handlerTag);\n if (oldHandler) {\n const nativeEvent = { nativeEvent: event };\n if (isStateChangeEvent(event)) {\n oldHandler.onGestureStateChange(nativeEvent);\n } else {\n oldHandler.onGestureEvent(nativeEvent);\n }\n return;\n }\n }\n}\n\nexport function startListening() {\n stopListening();\n\n gestureHandlerEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerEvent',\n onGestureHandlerEvent\n );\n\n gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerStateChange',\n onGestureHandlerEvent\n );\n}\n\nexport function stopListening() {\n if (gestureHandlerEventSubscription) {\n gestureHandlerEventSubscription.remove();\n gestureHandlerEventSubscription = null;\n }\n\n if (gestureHandlerStateChangeEventSubscription) {\n gestureHandlerStateChangeEventSubscription.remove();\n gestureHandlerStateChangeEventSubscription = null;\n }\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\n// Components\nimport typeof AccessibilityInfo from './Libraries/Components/AccessibilityInfo/AccessibilityInfo';\nimport typeof ActivityIndicator from './Libraries/Components/ActivityIndicator/ActivityIndicator';\nimport typeof Button from './Libraries/Components/Button';\nimport typeof DatePickerIOS from './Libraries/Components/DatePicker/DatePickerIOS';\nimport typeof DrawerLayoutAndroid from './Libraries/Components/DrawerAndroid/DrawerLayoutAndroid';\nimport typeof FlatList from './Libraries/Lists/FlatList';\nimport typeof Image from './Libraries/Image/Image';\nimport typeof ImageBackground from './Libraries/Image/ImageBackground';\nimport typeof InputAccessoryView from './Libraries/Components/TextInput/InputAccessoryView';\nimport typeof KeyboardAvoidingView from './Libraries/Components/Keyboard/KeyboardAvoidingView';\nimport typeof MaskedViewIOS from './Libraries/Components/MaskedView/MaskedViewIOS';\nimport typeof Modal from './Libraries/Modal/Modal';\nimport typeof Pressable from './Libraries/Components/Pressable/Pressable';\nimport typeof ProgressBarAndroid from './Libraries/Components/ProgressBarAndroid/ProgressBarAndroid';\nimport typeof ProgressViewIOS from './Libraries/Components/ProgressViewIOS/ProgressViewIOS';\nimport typeof RefreshControl from './Libraries/Components/RefreshControl/RefreshControl';\nimport typeof SafeAreaView from './Libraries/Components/SafeAreaView/SafeAreaView';\nimport typeof ScrollView from './Libraries/Components/ScrollView/ScrollView';\nimport typeof SectionList from './Libraries/Lists/SectionList';\nimport typeof SegmentedControlIOS from './Libraries/Components/SegmentedControlIOS/SegmentedControlIOS';\nimport typeof Slider from './Libraries/Components/Slider/Slider';\nimport typeof StatusBar from './Libraries/Components/StatusBar/StatusBar';\nimport typeof Switch from './Libraries/Components/Switch/Switch';\nimport typeof Text from './Libraries/Text/Text';\nimport typeof TextInput from './Libraries/Components/TextInput/TextInput';\nimport typeof Touchable from './Libraries/Components/Touchable/Touchable';\nimport typeof TouchableHighlight from './Libraries/Components/Touchable/TouchableHighlight';\nimport typeof TouchableNativeFeedback from './Libraries/Components/Touchable/TouchableNativeFeedback';\nimport typeof TouchableOpacity from './Libraries/Components/Touchable/TouchableOpacity';\nimport typeof TouchableWithoutFeedback from './Libraries/Components/Touchable/TouchableWithoutFeedback';\nimport typeof View from './Libraries/Components/View/View';\nimport typeof VirtualizedList from './Libraries/Lists/VirtualizedList';\nimport typeof VirtualizedSectionList from './Libraries/Lists/VirtualizedSectionList';\n\n// APIs\nimport typeof ActionSheetIOS from './Libraries/ActionSheetIOS/ActionSheetIOS';\nimport typeof Alert from './Libraries/Alert/Alert';\nimport typeof Animated from './Libraries/Animated/Animated';\nimport typeof Appearance from './Libraries/Utilities/Appearance';\nimport typeof AppRegistry from './Libraries/ReactNative/AppRegistry';\nimport typeof AppState from './Libraries/AppState/AppState';\nimport typeof AsyncStorage from './Libraries/Storage/AsyncStorage';\nimport typeof BackHandler from './Libraries/Utilities/BackHandler';\nimport typeof Clipboard from './Libraries/Components/Clipboard/Clipboard';\nimport typeof DatePickerAndroid from './Libraries/Components/DatePickerAndroid/DatePickerAndroid';\nimport typeof DeviceInfo from './Libraries/Utilities/DeviceInfo';\nimport typeof DevSettings from './Libraries/Utilities/DevSettings';\nimport typeof Dimensions from './Libraries/Utilities/Dimensions';\nimport typeof Easing from './Libraries/Animated/Easing';\nimport typeof ReactNative from './Libraries/Renderer/shims/ReactNative';\nimport typeof I18nManager from './Libraries/ReactNative/I18nManager';\nimport typeof ImagePickerIOS from './Libraries/Image/ImagePickerIOS';\nimport typeof InteractionManager from './Libraries/Interaction/InteractionManager';\nimport typeof Keyboard from './Libraries/Components/Keyboard/Keyboard';\nimport typeof LayoutAnimation from './Libraries/LayoutAnimation/LayoutAnimation';\nimport typeof Linking from './Libraries/Linking/Linking';\nimport typeof LogBox from './Libraries/LogBox/LogBox';\nimport typeof NativeDialogManagerAndroid from './Libraries/NativeModules/specs/NativeDialogManagerAndroid';\nimport typeof NativeEventEmitter from './Libraries/EventEmitter/NativeEventEmitter';\nimport typeof Networking from './Libraries/Network/RCTNetworking';\nimport typeof PanResponder from './Libraries/Interaction/PanResponder';\nimport typeof PermissionsAndroid from './Libraries/PermissionsAndroid/PermissionsAndroid';\nimport typeof PixelRatio from './Libraries/Utilities/PixelRatio';\nimport typeof PushNotificationIOS from './Libraries/PushNotificationIOS/PushNotificationIOS';\nimport typeof Settings from './Libraries/Settings/Settings';\nimport typeof Share from './Libraries/Share/Share';\nimport typeof StyleSheet from './Libraries/StyleSheet/StyleSheet';\nimport typeof Systrace from './Libraries/Performance/Systrace';\nimport typeof ToastAndroid from './Libraries/Components/ToastAndroid/ToastAndroid';\nimport typeof * as TurboModuleRegistry from './Libraries/TurboModule/TurboModuleRegistry';\nimport typeof UIManager from './Libraries/ReactNative/UIManager';\nimport typeof useColorScheme from './Libraries/Utilities/useColorScheme';\nimport typeof useWindowDimensions from './Libraries/Utilities/useWindowDimensions';\nimport typeof UTFSequence from './Libraries/UTFSequence';\nimport typeof Vibration from './Libraries/Vibration/Vibration';\nimport typeof YellowBox from './Libraries/YellowBox/YellowBoxDeprecated';\n\n// Plugins\nimport typeof {DynamicColorIOS} from './Libraries/StyleSheet/PlatformColorValueTypesIOS';\nimport typeof NativeModules from './Libraries/BatchedBridge/NativeModules';\nimport typeof Platform from './Libraries/Utilities/Platform';\nimport typeof {PlatformColor} from './Libraries/StyleSheet/PlatformColorValueTypes';\nimport typeof processColor from './Libraries/StyleSheet/processColor';\nimport typeof RCTDeviceEventEmitter from './Libraries/EventEmitter/RCTDeviceEventEmitter';\nimport typeof RCTNativeAppEventEmitter from './Libraries/EventEmitter/RCTNativeAppEventEmitter';\nimport typeof {RootTagContext} from './Libraries/ReactNative/RootTag';\n\n// Prop Types\nimport typeof DeprecatedColorPropType from './Libraries/DeprecatedPropTypes/DeprecatedColorPropType';\nimport typeof DeprecatedEdgeInsetsPropType from './Libraries/DeprecatedPropTypes/DeprecatedEdgeInsetsPropType';\nimport typeof DeprecatedPointPropType from './Libraries/DeprecatedPropTypes/DeprecatedPointPropType';\nimport typeof DeprecatedViewPropTypes from './Libraries/DeprecatedPropTypes/DeprecatedViewPropTypes';\n\nimport type {HostComponent as _HostComponentInternal} from './Libraries/Renderer/shims/ReactNativeTypes';\n\nexport type HostComponent = _HostComponentInternal;\n\nconst invariant = require('invariant');\nconst warnOnce = require('./Libraries/Utilities/warnOnce');\n\nmodule.exports = {\n // Components\n get AccessibilityInfo(): AccessibilityInfo {\n return require('./Libraries/Components/AccessibilityInfo/AccessibilityInfo')\n .default;\n },\n get ActivityIndicator(): ActivityIndicator {\n return require('./Libraries/Components/ActivityIndicator/ActivityIndicator');\n },\n get Button(): Button {\n return require('./Libraries/Components/Button');\n },\n // $FlowFixMe[value-as-type]\n get DatePickerIOS(): DatePickerIOS {\n warnOnce(\n 'DatePickerIOS-merged',\n 'DatePickerIOS has been merged with DatePickerAndroid and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-community/datetimepicker' instead of 'react-native'. \" +\n 'See https://github.com/react-native-datetimepicker/datetimepicker',\n );\n return require('./Libraries/Components/DatePicker/DatePickerIOS');\n },\n // $FlowFixMe[value-as-type]\n get DrawerLayoutAndroid(): DrawerLayoutAndroid {\n return require('./Libraries/Components/DrawerAndroid/DrawerLayoutAndroid');\n },\n get FlatList(): FlatList {\n return require('./Libraries/Lists/FlatList');\n },\n get Image(): Image {\n return require('./Libraries/Image/Image');\n },\n get ImageBackground(): ImageBackground {\n return require('./Libraries/Image/ImageBackground');\n },\n get InputAccessoryView(): InputAccessoryView {\n return require('./Libraries/Components/TextInput/InputAccessoryView');\n },\n get KeyboardAvoidingView(): KeyboardAvoidingView {\n return require('./Libraries/Components/Keyboard/KeyboardAvoidingView')\n .default;\n },\n get MaskedViewIOS(): MaskedViewIOS {\n warnOnce(\n 'maskedviewios-moved',\n 'MaskedViewIOS has been extracted from react-native core and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-masked-view/masked-view' instead of 'react-native'. \" +\n 'See https://github.com/react-native-masked-view/masked-view',\n );\n return require('./Libraries/Components/MaskedView/MaskedViewIOS');\n },\n get Modal(): Modal {\n return require('./Libraries/Modal/Modal');\n },\n get Pressable(): Pressable {\n return require('./Libraries/Components/Pressable/Pressable').default;\n },\n // $FlowFixMe[value-as-type]\n get ProgressBarAndroid(): ProgressBarAndroid {\n warnOnce(\n 'progress-bar-android-moved',\n 'ProgressBarAndroid has been extracted from react-native core and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-community/progress-bar-android' instead of 'react-native'. \" +\n 'See https://github.com/react-native-progress-view/progress-bar-android',\n );\n return require('./Libraries/Components/ProgressBarAndroid/ProgressBarAndroid');\n },\n // $FlowFixMe[value-as-type]\n get ProgressViewIOS(): ProgressViewIOS {\n warnOnce(\n 'progress-view-ios-moved',\n 'ProgressViewIOS has been extracted from react-native core and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-community/progress-view' instead of 'react-native'. \" +\n 'See https://github.com/react-native-progress-view/progress-view',\n );\n return require('./Libraries/Components/ProgressViewIOS/ProgressViewIOS');\n },\n get RefreshControl(): RefreshControl {\n return require('./Libraries/Components/RefreshControl/RefreshControl');\n },\n get SafeAreaView(): SafeAreaView {\n return require('./Libraries/Components/SafeAreaView/SafeAreaView').default;\n },\n get ScrollView(): ScrollView {\n return require('./Libraries/Components/ScrollView/ScrollView');\n },\n get SectionList(): SectionList {\n return require('./Libraries/Lists/SectionList').default;\n },\n // $FlowFixMe[value-as-type]\n get SegmentedControlIOS(): SegmentedControlIOS {\n warnOnce(\n 'segmented-control-ios-moved',\n 'SegmentedControlIOS has been extracted from react-native core and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-segmented-control/segmented-control' instead of 'react-native'. \" +\n 'See https://github.com/react-native-segmented-control/segmented-control',\n );\n return require('./Libraries/Components/SegmentedControlIOS/SegmentedControlIOS');\n },\n get Slider(): Slider {\n warnOnce(\n 'slider-moved',\n 'Slider has been extracted from react-native core and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-community/slider' instead of 'react-native'. \" +\n 'See https://github.com/callstack/react-native-slider',\n );\n return require('./Libraries/Components/Slider/Slider');\n },\n get StatusBar(): StatusBar {\n return require('./Libraries/Components/StatusBar/StatusBar');\n },\n get Switch(): Switch {\n return require('./Libraries/Components/Switch/Switch').default;\n },\n get Text(): Text {\n return require('./Libraries/Text/Text');\n },\n get TextInput(): TextInput {\n return require('./Libraries/Components/TextInput/TextInput');\n },\n get Touchable(): Touchable {\n return require('./Libraries/Components/Touchable/Touchable');\n },\n get TouchableHighlight(): TouchableHighlight {\n return require('./Libraries/Components/Touchable/TouchableHighlight');\n },\n get TouchableNativeFeedback(): TouchableNativeFeedback {\n return require('./Libraries/Components/Touchable/TouchableNativeFeedback');\n },\n get TouchableOpacity(): TouchableOpacity {\n return require('./Libraries/Components/Touchable/TouchableOpacity');\n },\n get TouchableWithoutFeedback(): TouchableWithoutFeedback {\n return require('./Libraries/Components/Touchable/TouchableWithoutFeedback');\n },\n get View(): View {\n return require('./Libraries/Components/View/View');\n },\n get VirtualizedList(): VirtualizedList {\n return require('./Libraries/Lists/VirtualizedList');\n },\n get VirtualizedSectionList(): VirtualizedSectionList {\n return require('./Libraries/Lists/VirtualizedSectionList');\n },\n\n // APIs\n get ActionSheetIOS(): ActionSheetIOS {\n return require('./Libraries/ActionSheetIOS/ActionSheetIOS');\n },\n get Alert(): Alert {\n return require('./Libraries/Alert/Alert');\n },\n get Animated(): Animated {\n return require('./Libraries/Animated/Animated');\n },\n get Appearance(): Appearance {\n return require('./Libraries/Utilities/Appearance');\n },\n get AppRegistry(): AppRegistry {\n return require('./Libraries/ReactNative/AppRegistry');\n },\n get AppState(): AppState {\n return require('./Libraries/AppState/AppState');\n },\n // $FlowFixMe[value-as-type]\n get AsyncStorage(): AsyncStorage {\n warnOnce(\n 'async-storage-moved',\n 'AsyncStorage has been extracted from react-native core and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-async-storage/async-storage' instead of 'react-native'. \" +\n 'See https://github.com/react-native-async-storage/async-storage',\n );\n return require('./Libraries/Storage/AsyncStorage');\n },\n get BackHandler(): BackHandler {\n return require('./Libraries/Utilities/BackHandler');\n },\n get Clipboard(): Clipboard {\n warnOnce(\n 'clipboard-moved',\n 'Clipboard has been extracted from react-native core and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-clipboard/clipboard' instead of 'react-native'. \" +\n 'See https://github.com/react-native-clipboard/clipboard',\n );\n return require('./Libraries/Components/Clipboard/Clipboard');\n },\n get DatePickerAndroid(): DatePickerAndroid {\n warnOnce(\n 'DatePickerAndroid-merged',\n 'DatePickerAndroid has been merged with DatePickerIOS and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-community/datetimepicker' instead of 'react-native'. \" +\n 'See https://github.com/react-native-datetimepicker/datetimepicker',\n );\n return require('./Libraries/Components/DatePickerAndroid/DatePickerAndroid');\n },\n get DeviceInfo(): DeviceInfo {\n return require('./Libraries/Utilities/DeviceInfo');\n },\n get DevSettings(): DevSettings {\n return require('./Libraries/Utilities/DevSettings');\n },\n get Dimensions(): Dimensions {\n return require('./Libraries/Utilities/Dimensions');\n },\n get Easing(): Easing {\n return require('./Libraries/Animated/Easing');\n },\n get findNodeHandle(): $PropertyType {\n return require('./Libraries/Renderer/shims/ReactNative').findNodeHandle;\n },\n get I18nManager(): I18nManager {\n return require('./Libraries/ReactNative/I18nManager');\n },\n get ImagePickerIOS(): ImagePickerIOS {\n warnOnce(\n 'imagePickerIOS-moved',\n 'ImagePickerIOS has been extracted from react-native core and will be removed in a future release. ' +\n \"Please upgrade to use either '@react-native-community/react-native-image-picker' or 'expo-image-picker'. \" +\n \"If you cannot upgrade to a different library, please install the deprecated '@react-native-community/image-picker-ios' package. \" +\n 'See https://github.com/rnc-archive/react-native-image-picker-ios',\n );\n return require('./Libraries/Image/ImagePickerIOS');\n },\n get InteractionManager(): InteractionManager {\n return require('./Libraries/Interaction/InteractionManager');\n },\n get Keyboard(): Keyboard {\n return require('./Libraries/Components/Keyboard/Keyboard');\n },\n get LayoutAnimation(): LayoutAnimation {\n return require('./Libraries/LayoutAnimation/LayoutAnimation');\n },\n get Linking(): Linking {\n return require('./Libraries/Linking/Linking');\n },\n get LogBox(): LogBox {\n return require('./Libraries/LogBox/LogBox');\n },\n get NativeDialogManagerAndroid(): NativeDialogManagerAndroid {\n return require('./Libraries/NativeModules/specs/NativeDialogManagerAndroid')\n .default;\n },\n get NativeEventEmitter(): NativeEventEmitter {\n return require('./Libraries/EventEmitter/NativeEventEmitter').default;\n },\n get Networking(): Networking {\n return require('./Libraries/Network/RCTNetworking');\n },\n get PanResponder(): PanResponder {\n return require('./Libraries/Interaction/PanResponder');\n },\n get PermissionsAndroid(): PermissionsAndroid {\n return require('./Libraries/PermissionsAndroid/PermissionsAndroid');\n },\n get PixelRatio(): PixelRatio {\n return require('./Libraries/Utilities/PixelRatio');\n },\n get PushNotificationIOS(): PushNotificationIOS {\n warnOnce(\n 'pushNotificationIOS-moved',\n 'PushNotificationIOS has been extracted from react-native core and will be removed in a future release. ' +\n \"It can now be installed and imported from '@react-native-community/push-notification-ios' instead of 'react-native'. \" +\n 'See https://github.com/react-native-push-notification-ios/push-notification-ios',\n );\n return require('./Libraries/PushNotificationIOS/PushNotificationIOS');\n },\n get Settings(): Settings {\n return require('./Libraries/Settings/Settings');\n },\n get Share(): Share {\n return require('./Libraries/Share/Share');\n },\n get StyleSheet(): StyleSheet {\n return require('./Libraries/StyleSheet/StyleSheet');\n },\n get Systrace(): Systrace {\n return require('./Libraries/Performance/Systrace');\n },\n // $FlowFixMe[value-as-type]\n get ToastAndroid(): ToastAndroid {\n return require('./Libraries/Components/ToastAndroid/ToastAndroid');\n },\n get TurboModuleRegistry(): TurboModuleRegistry {\n return require('./Libraries/TurboModule/TurboModuleRegistry');\n },\n get UIManager(): UIManager {\n return require('./Libraries/ReactNative/UIManager');\n },\n get unstable_batchedUpdates(): $PropertyType<\n ReactNative,\n 'unstable_batchedUpdates',\n > {\n return require('./Libraries/Renderer/shims/ReactNative')\n .unstable_batchedUpdates;\n },\n get useColorScheme(): useColorScheme {\n return require('./Libraries/Utilities/useColorScheme').default;\n },\n get useWindowDimensions(): useWindowDimensions {\n return require('./Libraries/Utilities/useWindowDimensions').default;\n },\n get UTFSequence(): UTFSequence {\n return require('./Libraries/UTFSequence');\n },\n get Vibration(): Vibration {\n return require('./Libraries/Vibration/Vibration');\n },\n get YellowBox(): YellowBox {\n return require('./Libraries/YellowBox/YellowBoxDeprecated');\n },\n\n // Plugins\n get DeviceEventEmitter(): RCTDeviceEventEmitter {\n return require('./Libraries/EventEmitter/RCTDeviceEventEmitter').default;\n },\n get DynamicColorIOS(): DynamicColorIOS {\n return require('./Libraries/StyleSheet/PlatformColorValueTypesIOS')\n .DynamicColorIOS;\n },\n get NativeAppEventEmitter(): RCTNativeAppEventEmitter {\n return require('./Libraries/EventEmitter/RCTNativeAppEventEmitter');\n },\n get NativeModules(): NativeModules {\n return require('./Libraries/BatchedBridge/NativeModules');\n },\n get Platform(): Platform {\n return require('./Libraries/Utilities/Platform');\n },\n get PlatformColor(): PlatformColor {\n return require('./Libraries/StyleSheet/PlatformColorValueTypes')\n .PlatformColor;\n },\n get processColor(): processColor {\n return require('./Libraries/StyleSheet/processColor');\n },\n get requireNativeComponent(): (\n uiViewClassName: string,\n ) => HostComponent {\n return require('./Libraries/ReactNative/requireNativeComponent');\n },\n get RootTagContext(): RootTagContext {\n return require('./Libraries/ReactNative/RootTag').RootTagContext;\n },\n get unstable_enableLogBox(): () => void {\n return () =>\n console.warn(\n 'LogBox is enabled by default so there is no need to call unstable_enableLogBox() anymore. This is a no op and will be removed in the next version.',\n );\n },\n // Prop Types\n // $FlowFixMe[value-as-type]\n get ColorPropType(): DeprecatedColorPropType {\n return require('./Libraries/DeprecatedPropTypes/DeprecatedColorPropType');\n },\n get EdgeInsetsPropType(): DeprecatedEdgeInsetsPropType {\n return require('./Libraries/DeprecatedPropTypes/DeprecatedEdgeInsetsPropType');\n },\n get PointPropType(): DeprecatedPointPropType {\n return require('./Libraries/DeprecatedPropTypes/DeprecatedPointPropType');\n },\n get ViewPropTypes(): DeprecatedViewPropTypes {\n return require('./Libraries/DeprecatedPropTypes/DeprecatedViewPropTypes');\n },\n};\n\nif (__DEV__) {\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access ART. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access ART. */\n Object.defineProperty(module.exports, 'ART', {\n configurable: true,\n get() {\n invariant(\n false,\n 'ART has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-community/art' instead of 'react-native'. \" +\n 'See https://github.com/react-native-art/art',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access ListView. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access ListView. */\n Object.defineProperty(module.exports, 'ListView', {\n configurable: true,\n get() {\n invariant(\n false,\n 'ListView has been removed from React Native. ' +\n 'See https://fb.me/nolistview for more information or use ' +\n '`deprecated-react-native-listview`.',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access SwipeableListView. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access SwipeableListView. */\n Object.defineProperty(module.exports, 'SwipeableListView', {\n configurable: true,\n get() {\n invariant(\n false,\n 'SwipeableListView has been removed from React Native. ' +\n 'See https://fb.me/nolistview for more information or use ' +\n '`deprecated-react-native-swipeable-listview`.',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access WebView. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access WebView. */\n Object.defineProperty(module.exports, 'WebView', {\n configurable: true,\n get() {\n invariant(\n false,\n 'WebView has been removed from React Native. ' +\n \"It can now be installed and imported from 'react-native-webview' instead of 'react-native'. \" +\n 'See https://github.com/react-native-webview/react-native-webview',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access NetInfo. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access NetInfo. */\n Object.defineProperty(module.exports, 'NetInfo', {\n configurable: true,\n get() {\n invariant(\n false,\n 'NetInfo has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-community/netinfo' instead of 'react-native'. \" +\n 'See https://github.com/react-native-netinfo/react-native-netinfo',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access CameraRoll. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access CameraRoll. */\n Object.defineProperty(module.exports, 'CameraRoll', {\n configurable: true,\n get() {\n invariant(\n false,\n 'CameraRoll has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-community/cameraroll' instead of 'react-native'. \" +\n 'See https://github.com/react-native-cameraroll/react-native-cameraroll',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access ImageStore. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access ImageStore. */\n Object.defineProperty(module.exports, 'ImageStore', {\n configurable: true,\n get() {\n invariant(\n false,\n 'ImageStore has been removed from React Native. ' +\n 'To get a base64-encoded string from a local image use either of the following third-party libraries:' +\n \"* expo-file-system: `readAsStringAsync(filepath, 'base64')`\" +\n \"* react-native-fs: `readFile(filepath, 'base64')`\",\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access ImageEditor. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access ImageEditor. */\n Object.defineProperty(module.exports, 'ImageEditor', {\n configurable: true,\n get() {\n invariant(\n false,\n 'ImageEditor has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-community/image-editor' instead of 'react-native'. \" +\n 'See https://github.com/callstack/react-native-image-editor',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access TimePickerAndroid. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access TimePickerAndroid. */\n Object.defineProperty(module.exports, 'TimePickerAndroid', {\n configurable: true,\n get() {\n invariant(\n false,\n 'TimePickerAndroid has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-community/datetimepicker' instead of 'react-native'. \" +\n 'See https://github.com/react-native-datetimepicker/datetimepicker',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access ToolbarAndroid. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access ToolbarAndroid. */\n Object.defineProperty(module.exports, 'ToolbarAndroid', {\n configurable: true,\n get() {\n invariant(\n false,\n 'ToolbarAndroid has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-community/toolbar-android' instead of 'react-native'. \" +\n 'See https://github.com/react-native-toolbar-android/toolbar-android',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access ViewPagerAndroid. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access ViewPagerAndroid. */\n Object.defineProperty(module.exports, 'ViewPagerAndroid', {\n configurable: true,\n get() {\n invariant(\n false,\n 'ViewPagerAndroid has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-community/viewpager' instead of 'react-native'. \" +\n 'See https://github.com/callstack/react-native-viewpager',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access CheckBox. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access CheckBox. */\n Object.defineProperty(module.exports, 'CheckBox', {\n configurable: true,\n get() {\n invariant(\n false,\n 'CheckBox has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-community/checkbox' instead of 'react-native'. \" +\n 'See https://github.com/react-native-checkbox/react-native-checkbox',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access StatusBarIOS. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access StatusBarIOS. */\n Object.defineProperty(module.exports, 'StatusBarIOS', {\n configurable: true,\n get() {\n invariant(\n false,\n 'StatusBarIOS has been removed from React Native. ' +\n 'Has been merged with StatusBar. ' +\n 'See https://reactnative.dev/docs/statusbar',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access PickerIOS. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access PickerIOS. */\n Object.defineProperty(module.exports, 'PickerIOS', {\n configurable: true,\n get() {\n invariant(\n false,\n 'PickerIOS has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-picker/picker' instead of 'react-native'. \" +\n 'See https://github.com/react-native-picker/picker',\n );\n },\n });\n\n /* $FlowFixMe[prop-missing] This is intentional: Flow will error when\n * attempting to access Picker. */\n /* $FlowFixMe[invalid-export] This is intentional: Flow will error when\n * attempting to access Picker. */\n Object.defineProperty(module.exports, 'Picker', {\n configurable: true,\n get() {\n invariant(\n false,\n 'Picker has been removed from React Native. ' +\n \"It can now be installed and imported from '@react-native-picker/picker' instead of 'react-native'. \" +\n 'See https://github.com/react-native-picker/picker',\n );\n },\n });\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst warnedKeys: {[string]: boolean, ...} = {};\n\n/**\n * A simple function that prints a warning message once per session.\n *\n * @param {string} key - The key used to ensure the message is printed once.\n * This should be unique to the callsite.\n * @param {string} message - The message to print\n */\nfunction warnOnce(key: string, message: string) {\n if (warnedKeys[key]) {\n return;\n }\n\n console.warn(message);\n\n warnedKeys[key] = true;\n}\n\nmodule.exports = warnOnce;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport RCTDeviceEventEmitter from '../../EventEmitter/RCTDeviceEventEmitter';\nimport {sendAccessibilityEvent} from '../../Renderer/shims/ReactNative';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport Platform from '../../Utilities/Platform';\nimport type EventEmitter from '../../vendor/emitter/EventEmitter';\nimport type {EventSubscription} from '../../vendor/emitter/EventEmitter';\nimport NativeAccessibilityInfoAndroid from './NativeAccessibilityInfo';\nimport NativeAccessibilityManagerIOS from './NativeAccessibilityManager';\nimport legacySendAccessibilityEvent from './legacySendAccessibilityEvent';\nimport type {ElementRef} from 'react';\n\n// Events that are only supported on iOS.\ntype AccessibilityEventDefinitionsIOS = {\n announcementFinished: [{announcement: string, success: boolean}],\n boldTextChanged: [boolean],\n grayscaleChanged: [boolean],\n invertColorsChanged: [boolean],\n reduceTransparencyChanged: [boolean],\n};\n\ntype AccessibilityEventDefinitions = {\n ...AccessibilityEventDefinitionsIOS,\n change: [boolean], // screenReaderChanged\n reduceMotionChanged: [boolean],\n screenReaderChanged: [boolean],\n};\n\ntype AccessibilityEventTypes = 'click' | 'focus';\n\n// Mapping of public event names to platform-specific event names.\nconst EventNames: Map<$Keys, string> =\n Platform.OS === 'android'\n ? new Map([\n ['change', 'touchExplorationDidChange'],\n ['reduceMotionChanged', 'reduceMotionDidChange'],\n ['screenReaderChanged', 'touchExplorationDidChange'],\n ])\n : new Map([\n ['announcementFinished', 'announcementFinished'],\n ['boldTextChanged', 'boldTextChanged'],\n ['change', 'screenReaderChanged'],\n ['grayscaleChanged', 'grayscaleChanged'],\n ['invertColorsChanged', 'invertColorsChanged'],\n ['reduceMotionChanged', 'reduceMotionChanged'],\n ['reduceTransparencyChanged', 'reduceTransparencyChanged'],\n ['screenReaderChanged', 'screenReaderChanged'],\n ]);\n\n/**\n * Sometimes it's useful to know whether or not the device has a screen reader\n * that is currently active. The `AccessibilityInfo` API is designed for this\n * purpose. You can use it to query the current state of the screen reader as\n * well as to register to be notified when the state of the screen reader\n * changes.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html\n */\nconst AccessibilityInfo = {\n /**\n * Query whether bold text is currently enabled.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when bold text is enabled and `false` otherwise.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#isBoldTextEnabled\n */\n isBoldTextEnabled(): Promise {\n if (Platform.OS === 'android') {\n return Promise.resolve(false);\n } else {\n return new Promise((resolve, reject) => {\n if (NativeAccessibilityManagerIOS != null) {\n NativeAccessibilityManagerIOS.getCurrentBoldTextState(\n resolve,\n reject,\n );\n } else {\n reject(null);\n }\n });\n }\n },\n\n /**\n * Query whether grayscale is currently enabled.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when grayscale is enabled and `false` otherwise.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#isGrayscaleEnabled\n */\n isGrayscaleEnabled(): Promise {\n if (Platform.OS === 'android') {\n return Promise.resolve(false);\n } else {\n return new Promise((resolve, reject) => {\n if (NativeAccessibilityManagerIOS != null) {\n NativeAccessibilityManagerIOS.getCurrentGrayscaleState(\n resolve,\n reject,\n );\n } else {\n reject(null);\n }\n });\n }\n },\n\n /**\n * Query whether inverted colors are currently enabled.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when invert color is enabled and `false` otherwise.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#isInvertColorsEnabled\n */\n isInvertColorsEnabled(): Promise {\n if (Platform.OS === 'android') {\n return Promise.resolve(false);\n } else {\n return new Promise((resolve, reject) => {\n if (NativeAccessibilityManagerIOS != null) {\n NativeAccessibilityManagerIOS.getCurrentInvertColorsState(\n resolve,\n reject,\n );\n } else {\n reject(null);\n }\n });\n }\n },\n\n /**\n * Query whether reduced motion is currently enabled.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when a reduce motion is enabled and `false` otherwise.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#isReduceMotionEnabled\n */\n isReduceMotionEnabled(): Promise {\n return new Promise((resolve, reject) => {\n if (Platform.OS === 'android') {\n if (NativeAccessibilityInfoAndroid != null) {\n NativeAccessibilityInfoAndroid.isReduceMotionEnabled(resolve);\n } else {\n reject(null);\n }\n } else {\n if (NativeAccessibilityManagerIOS != null) {\n NativeAccessibilityManagerIOS.getCurrentReduceMotionState(\n resolve,\n reject,\n );\n } else {\n reject(null);\n }\n }\n });\n },\n\n /**\n * Query whether reduced transparency is currently enabled.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when a reduce transparency is enabled and `false` otherwise.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#isReduceTransparencyEnabled\n */\n isReduceTransparencyEnabled(): Promise {\n if (Platform.OS === 'android') {\n return Promise.resolve(false);\n } else {\n return new Promise((resolve, reject) => {\n if (NativeAccessibilityManagerIOS != null) {\n NativeAccessibilityManagerIOS.getCurrentReduceTransparencyState(\n resolve,\n reject,\n );\n } else {\n reject(null);\n }\n });\n }\n },\n\n /**\n * Query whether a screen reader is currently enabled.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when a screen reader is enabled and `false` otherwise.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#isScreenReaderEnabled\n */\n isScreenReaderEnabled(): Promise {\n return new Promise((resolve, reject) => {\n if (Platform.OS === 'android') {\n if (NativeAccessibilityInfoAndroid != null) {\n NativeAccessibilityInfoAndroid.isTouchExplorationEnabled(resolve);\n } else {\n reject(null);\n }\n } else {\n if (NativeAccessibilityManagerIOS != null) {\n NativeAccessibilityManagerIOS.getCurrentVoiceOverState(\n resolve,\n reject,\n );\n } else {\n reject(null);\n }\n }\n });\n },\n\n /**\n * Add an event handler. Supported events:\n *\n * - `reduceMotionChanged`: Fires when the state of the reduce motion toggle changes.\n * The argument to the event handler is a boolean. The boolean is `true` when a reduce\n * motion is enabled (or when \"Transition Animation Scale\" in \"Developer options\" is\n * \"Animation off\") and `false` otherwise.\n * - `screenReaderChanged`: Fires when the state of the screen reader changes. The argument\n * to the event handler is a boolean. The boolean is `true` when a screen\n * reader is enabled and `false` otherwise.\n *\n * These events are only supported on iOS:\n *\n * - `boldTextChanged`: iOS-only event. Fires when the state of the bold text toggle changes.\n * The argument to the event handler is a boolean. The boolean is `true` when a bold text\n * is enabled and `false` otherwise.\n * - `grayscaleChanged`: iOS-only event. Fires when the state of the gray scale toggle changes.\n * The argument to the event handler is a boolean. The boolean is `true` when a gray scale\n * is enabled and `false` otherwise.\n * - `invertColorsChanged`: iOS-only event. Fires when the state of the invert colors toggle\n * changes. The argument to the event handler is a boolean. The boolean is `true` when a invert\n * colors is enabled and `false` otherwise.\n * - `reduceTransparencyChanged`: iOS-only event. Fires when the state of the reduce transparency\n * toggle changes. The argument to the event handler is a boolean. The boolean is `true`\n * when a reduce transparency is enabled and `false` otherwise.\n * - `announcementFinished`: iOS-only event. Fires when the screen reader has\n * finished making an announcement. The argument to the event handler is a\n * dictionary with these keys:\n * - `announcement`: The string announced by the screen reader.\n * - `success`: A boolean indicating whether the announcement was\n * successfully made.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#addeventlistener\n */\n addEventListener>(\n eventName: K,\n handler: (...$ElementType) => void,\n ): EventSubscription {\n const deviceEventName = EventNames.get(eventName);\n return deviceEventName == null\n ? {remove(): void {}}\n : RCTDeviceEventEmitter.addListener(deviceEventName, handler);\n },\n\n /**\n * Set accessibility focus to a React component.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#setaccessibilityfocus\n */\n setAccessibilityFocus(reactTag: number): void {\n legacySendAccessibilityEvent(reactTag, 'focus');\n },\n\n /**\n * Send a named accessibility event to a HostComponent.\n */\n sendAccessibilityEvent_unstable(\n handle: ElementRef>,\n eventType: AccessibilityEventTypes,\n ) {\n // iOS only supports 'focus' event types\n if (Platform.OS === 'ios' && eventType === 'click') {\n return;\n }\n // route through React renderer to distinguish between Fabric and non-Fabric handles\n sendAccessibilityEvent(handle, eventType);\n },\n\n /**\n * Post a string to be announced by the screen reader.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#announceforaccessibility\n */\n announceForAccessibility(announcement: string): void {\n if (Platform.OS === 'android') {\n NativeAccessibilityInfoAndroid?.announceForAccessibility(announcement);\n } else {\n NativeAccessibilityManagerIOS?.announceForAccessibility(announcement);\n }\n },\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addEventListener`.\n */\n removeEventListener>(\n eventName: K,\n handler: (...$ElementType) => void,\n ): void {\n // NOTE: This will report a deprecation notice via `console.error`.\n const deviceEventName = EventNames.get(eventName);\n if (deviceEventName != null) {\n // $FlowIgnore[incompatible-cast]\n (RCTDeviceEventEmitter: EventEmitter<$FlowFixMe>).removeListener(\n 'deviceEventName',\n // $FlowFixMe[invalid-tuple-arity]\n handler,\n );\n }\n },\n\n /**\n * Get the recommended timeout for changes to the UI needed by this user.\n *\n * See https://reactnative.dev/docs/accessibilityinfo.html#getrecommendedtimeoutmillis\n */\n getRecommendedTimeoutMillis(originalTimeout: number): Promise {\n if (Platform.OS === 'android') {\n return new Promise((resolve, reject) => {\n if (NativeAccessibilityInfoAndroid?.getRecommendedTimeoutMillis) {\n NativeAccessibilityInfoAndroid.getRecommendedTimeoutMillis(\n originalTimeout,\n resolve,\n );\n } else {\n resolve(originalTimeout);\n }\n });\n } else {\n return Promise.resolve(originalTimeout);\n }\n },\n};\n\nexport default AccessibilityInfo;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport EventEmitter, {type IEventEmitter} from '../vendor/emitter/EventEmitter';\n\n// FIXME: use typed events\ntype RCTDeviceEventDefinitions = $FlowFixMe;\n\n/**\n * Global EventEmitter used by the native platform to emit events to JavaScript.\n * Events are identified by globally unique event names.\n *\n * NativeModules that emit events should instead subclass `NativeEventEmitter`.\n */\nexport default (new EventEmitter(): IEventEmitter);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nconst EventEmitter = require('./_EventEmitter');\n\nimport type {EventSubscription} from './EventSubscription';\n\nexport default EventEmitter;\n\nexport type {EventSubscription};\n\n/**\n * Essential interface for an EventEmitter.\n */\nexport interface IEventEmitter {\n /**\n * Registers a listener that is called when the supplied event is emitted.\n * Returns a subscription that has a `remove` method to undo registration.\n */\n addListener>(\n eventType: TEvent,\n listener: (...args: $ElementType) => mixed,\n context?: mixed,\n ): EventSubscription;\n\n /**\n * Emits the supplied event. Additional arguments supplied to `emit` will be\n * passed through to each of the registered listeners.\n */\n emit>(\n eventType: TEvent,\n ...args: $ElementType\n ): void;\n\n /**\n * Removes all registered listeners.\n */\n removeAllListeners>(eventType?: ?TEvent): void;\n\n /**\n * Returns the number of registered listeners for the supplied event.\n */\n listenerCount>(eventType: TEvent): number;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n * @typecheck\n */\n\nconst invariant = require('invariant');\n\nimport EmitterSubscription from './_EmitterSubscription';\nimport {type EventSubscription} from './EventSubscription';\nimport EventSubscriptionVendor from './_EventSubscriptionVendor';\n\nconst sparseFilterPredicate = () => true;\n\n/**\n * @class EventEmitter\n * @description\n * An EventEmitter is responsible for managing a set of listeners and publishing\n * events to them when it is told that such events happened. In addition to the\n * data for the given event it also sends a event control object which allows\n * the listeners/handlers to prevent the default behavior of the given event.\n *\n * The emitter is designed to be generic enough to support all the different\n * contexts in which one might want to emit events. It is a simple multicast\n * mechanism on top of which extra functionality can be composed. For example, a\n * more advanced emitter may use an EventHolder and EventFactory.\n */\nclass EventEmitter {\n _subscriber: EventSubscriptionVendor = new EventSubscriptionVendor();\n\n /**\n * @constructor\n */\n constructor(subscriber: ?EventSubscriptionVendor) {\n if (subscriber != null) {\n console.warn('EventEmitter(...): Constructor argument is deprecated.');\n this._subscriber = subscriber;\n }\n }\n\n /**\n * Adds a listener to be invoked when events of the specified type are\n * emitted. An optional calling context may be provided. The data arguments\n * emitted will be passed to the listener function.\n *\n * @param {string} eventType - Name of the event to listen to\n * @param {function} listener - Function to invoke when the specified event is\n * emitted\n * @param {*} context - Optional context object to use when invoking the\n * listener\n */\n addListener>(\n eventType: K,\n // FIXME: listeners should return void instead of mixed to prevent issues\n listener: (...$ElementType) => mixed,\n context: $FlowFixMe,\n ): EventSubscription {\n return (this._subscriber.addSubscription(\n eventType,\n new EmitterSubscription(this, this._subscriber, listener, context),\n ): $FlowFixMe);\n }\n\n /**\n * Removes all of the registered listeners, including those registered as\n * listener maps.\n *\n * @param {?string} eventType - Optional name of the event whose registered\n * listeners to remove\n */\n removeAllListeners>(eventType: ?K): void {\n this._subscriber.removeAllSubscriptions(eventType);\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addListener`.\n */\n removeSubscription>(\n subscription: EmitterSubscription,\n ): void {\n console.warn(\n 'EventEmitter.removeSubscription(...): Method has been deprecated. ' +\n 'Please instead use `remove()` on the subscription itself.',\n );\n this.__removeSubscription(subscription);\n }\n\n /**\n * Called by `EmitterSubscription` to bypass the above deprecation warning.\n */\n __removeSubscription>(\n subscription: EmitterSubscription,\n ): void {\n invariant(\n subscription.emitter === this,\n 'Subscription does not belong to this emitter.',\n );\n this._subscriber.removeSubscription(subscription);\n }\n\n /**\n * Returns the number of listeners that are currently registered for the given\n * event.\n *\n * @param {string} eventType - Name of the event to query\n * @returns {number}\n */\n listenerCount>(eventType: K): number {\n const subscriptions = this._subscriber.getSubscriptionsForType(eventType);\n return subscriptions\n ? // We filter out missing entries because the array is sparse.\n // \"callbackfn is called only for elements of the array which actually\n // exist; it is not called for missing elements of the array.\"\n // https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.prototype.filter\n subscriptions.filter(sparseFilterPredicate).length\n : 0;\n }\n\n /**\n * Emits an event of the given type with the given data. All handlers of that\n * particular type will be notified.\n *\n * @param {string} eventType - Name of the event to emit\n * @param {...*} Arbitrary arguments to be passed to each registered listener\n *\n * @example\n * emitter.addListener('someEvent', function(message) {\n * console.log(message);\n * });\n *\n * emitter.emit('someEvent', 'abc'); // logs 'abc'\n */\n emit>(\n eventType: K,\n ...args: $ElementType\n ): void {\n const subscriptions = this._subscriber.getSubscriptionsForType(eventType);\n if (subscriptions) {\n for (let i = 0, l = subscriptions.length; i < l; i++) {\n const subscription = subscriptions[i];\n\n // The subscription may have been removed during this event loop.\n if (subscription && subscription.listener) {\n subscription.listener.apply(subscription.context, args);\n }\n }\n }\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addListener`.\n */\n removeListener>(\n eventType: K,\n // FIXME: listeners should return void instead of mixed to prevent issues\n listener: (...$ElementType) => mixed,\n ): void {\n console.warn(\n `EventEmitter.removeListener('${eventType}', ...): Method has been ` +\n 'deprecated. Please instead use `remove()` on the subscription ' +\n 'returned by `EventEmitter.addListener`.',\n );\n const subscriptions = this._subscriber.getSubscriptionsForType(eventType);\n if (subscriptions) {\n for (let i = 0, l = subscriptions.length; i < l; i++) {\n const subscription = subscriptions[i];\n\n // The subscription may have been removed during this event loop.\n // its listener matches the listener in method parameters\n if (subscription && subscription.listener === listener) {\n subscription.remove();\n }\n }\n }\n }\n}\n\nmodule.exports = EventEmitter;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nimport type EventEmitter from './EventEmitter';\nimport _EventSubscription from './_EventSubscription';\nimport type EventSubscriptionVendor from './_EventSubscriptionVendor';\nimport {type EventSubscription} from './EventSubscription';\n\n/**\n * EmitterSubscription represents a subscription with listener and context data.\n */\nclass EmitterSubscription>\n extends _EventSubscription\n implements EventSubscription {\n emitter: EventEmitter;\n listener: ?(...$ElementType) => mixed;\n context: ?$FlowFixMe;\n\n /**\n * @param {EventEmitter} emitter - The event emitter that registered this\n * subscription\n * @param {EventSubscriptionVendor} subscriber - The subscriber that controls\n * this subscription\n * @param {function} listener - Function to invoke when the specified event is\n * emitted\n * @param {*} context - Optional context object to use when invoking the\n * listener\n */\n constructor(\n emitter: EventEmitter,\n subscriber: EventSubscriptionVendor,\n listener: (...$ElementType) => mixed,\n context: ?$FlowFixMe,\n ) {\n super(subscriber);\n this.emitter = emitter;\n this.listener = listener;\n this.context = context;\n }\n\n /**\n * Removes this subscription from the emitter that registered it.\n * Note: we're overriding the `remove()` method of _EventSubscription here\n * but deliberately not calling `super.remove()` as the responsibility\n * for removing the subscription lies with the EventEmitter.\n */\n remove(): void {\n this.emitter.__removeSubscription(this);\n }\n}\n\nmodule.exports = EmitterSubscription;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nimport {type EventSubscription} from './EventSubscription';\nimport type EventSubscriptionVendor from './_EventSubscriptionVendor';\n\n/**\n * EventSubscription represents a subscription to a particular event. It can\n * remove its own subscription.\n */\nclass _EventSubscription>\n implements EventSubscription {\n eventType: K;\n key: number;\n subscriber: EventSubscriptionVendor;\n listener: ?(...$ElementType) => mixed;\n context: ?$FlowFixMe;\n\n /**\n * @param {EventSubscriptionVendor} subscriber the subscriber that controls\n * this subscription.\n */\n constructor(subscriber: EventSubscriptionVendor) {\n this.subscriber = subscriber;\n }\n\n /**\n * Removes this subscription from the subscriber that controls it.\n */\n remove(): void {\n this.subscriber.removeSubscription(this);\n }\n}\n\nmodule.exports = _EventSubscription;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst invariant = require('invariant');\n\nimport type EventSubscription from './_EventSubscription';\n\n/**\n * EventSubscriptionVendor stores a set of EventSubscriptions that are\n * subscribed to a particular event type.\n */\nclass EventSubscriptionVendor {\n _subscriptionsForType: {\n [type: $Keys]: Array<\n EventSubscription,\n >,\n ...,\n };\n\n constructor() {\n this._subscriptionsForType = {};\n }\n\n /**\n * Adds a subscription keyed by an event type.\n *\n * @param {string} eventType\n * @param {EventSubscription} subscription\n */\n addSubscription>(\n eventType: K,\n subscription: EventSubscription,\n ): EventSubscription {\n invariant(\n subscription.subscriber === this,\n 'The subscriber of the subscription is incorrectly set.',\n );\n if (!this._subscriptionsForType[eventType]) {\n this._subscriptionsForType[eventType] = [];\n }\n const key = this._subscriptionsForType[eventType].length;\n this._subscriptionsForType[eventType].push(subscription);\n subscription.eventType = eventType;\n subscription.key = key;\n return subscription;\n }\n\n /**\n * Removes a bulk set of the subscriptions.\n *\n * @param {?string} eventType - Optional name of the event type whose\n * registered subscriptions to remove, if null remove all subscriptions.\n */\n removeAllSubscriptions>(eventType: ?K): void {\n if (eventType == null) {\n this._subscriptionsForType = {};\n } else {\n delete this._subscriptionsForType[eventType];\n }\n }\n\n /**\n * Removes a specific subscription. Instead of calling this function, call\n * `subscription.remove()` directly.\n *\n * @param {object} subscription\n */\n removeSubscription>(\n subscription: EventSubscription,\n ): void {\n const eventType = subscription.eventType;\n const key = subscription.key;\n\n const subscriptionsForType = this._subscriptionsForType[eventType];\n if (subscriptionsForType) {\n delete subscriptionsForType[key];\n }\n }\n\n /**\n * Returns the array of subscriptions that are currently registered for the\n * given event type.\n *\n * Note: This array can be potentially sparse as subscriptions are deleted\n * from it when they are removed.\n *\n * TODO: This returns a nullable array. wat?\n *\n * @param {string} eventType\n * @returns {?array}\n */\n getSubscriptionsForType>(\n eventType: K,\n ): ?Array> {\n return this._subscriptionsForType[eventType];\n }\n}\n\nmodule.exports = EventSubscriptionVendor;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n * @generated SignedSource<>\n *\n * This file was sync'd from the facebook/react repository.\n */\n\n'use strict';\n\nimport type {ReactNativeType} from './ReactNativeTypes';\n\nlet ReactNative;\n\nif (__DEV__) {\n ReactNative = require('../implementations/ReactNativeRenderer-dev');\n} else {\n ReactNative = require('../implementations/ReactNativeRenderer-prod');\n}\n\nmodule.exports = (ReactNative: ReactNativeType);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @noflow\n * @nolint\n * @providesModule ReactNativeRenderer-prod\n * @preventMunge\n * @generated SignedSource<>\n */\n\n\"use strict\";\nrequire(\"react-native/Libraries/ReactPrivate/ReactNativePrivateInitializeCore\");\nvar ReactNativePrivateInterface = require(\"react-native/Libraries/ReactPrivate/ReactNativePrivateInterface\"),\n React = require(\"react\"),\n Scheduler = require(\"scheduler\");\nfunction invokeGuardedCallbackImpl(name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n}\nvar hasError = !1,\n caughtError = null,\n hasRethrowError = !1,\n rethrowError = null,\n reporter = {\n onError: function(error) {\n hasError = !0;\n caughtError = error;\n }\n };\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = !1;\n caughtError = null;\n invokeGuardedCallbackImpl.apply(reporter, arguments);\n}\nfunction invokeGuardedCallbackAndCatchFirstError(\n name,\n func,\n context,\n a,\n b,\n c,\n d,\n e,\n f\n) {\n invokeGuardedCallback.apply(this, arguments);\n if (hasError) {\n if (hasError) {\n var error = caughtError;\n hasError = !1;\n caughtError = null;\n } else\n throw Error(\n \"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\"\n );\n hasRethrowError || ((hasRethrowError = !0), (rethrowError = error));\n }\n}\nvar isArrayImpl = Array.isArray,\n getFiberCurrentPropsFromNode = null,\n getInstanceFromNode = null,\n getNodeFromInstance = null;\nfunction executeDispatch(event, listener, inst) {\n var type = event.type || \"unknown-event\";\n event.currentTarget = getNodeFromInstance(inst);\n invokeGuardedCallbackAndCatchFirstError(type, listener, void 0, event);\n event.currentTarget = null;\n}\nfunction executeDirectDispatch(event) {\n var dispatchListener = event._dispatchListeners,\n dispatchInstance = event._dispatchInstances;\n if (isArrayImpl(dispatchListener))\n throw Error(\"executeDirectDispatch(...): Invalid `event`.\");\n event.currentTarget = dispatchListener\n ? getNodeFromInstance(dispatchInstance)\n : null;\n dispatchListener = dispatchListener ? dispatchListener(event) : null;\n event.currentTarget = null;\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n return dispatchListener;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction SyntheticEvent(\n dispatchConfig,\n targetInst,\n nativeEvent,\n nativeEventTarget\n) {\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n this._dispatchInstances = this._dispatchListeners = null;\n dispatchConfig = this.constructor.Interface;\n for (var propName in dispatchConfig)\n dispatchConfig.hasOwnProperty(propName) &&\n ((targetInst = dispatchConfig[propName])\n ? (this[propName] = targetInst(nativeEvent))\n : \"target\" === propName\n ? (this.target = nativeEventTarget)\n : (this[propName] = nativeEvent[propName]));\n this.isDefaultPrevented = (null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue)\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n}\nObject.assign(SyntheticEvent.prototype, {\n preventDefault: function() {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function() {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble && (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function() {\n this.isPersistent = functionThatReturnsTrue;\n },\n isPersistent: functionThatReturnsFalse,\n destructor: function() {\n var Interface = this.constructor.Interface,\n propName;\n for (propName in Interface) this[propName] = null;\n this.nativeEvent = this._targetInst = this.dispatchConfig = null;\n this.isPropagationStopped = this.isDefaultPrevented = functionThatReturnsFalse;\n this._dispatchInstances = this._dispatchListeners = null;\n }\n});\nSyntheticEvent.Interface = {\n type: null,\n target: null,\n currentTarget: function() {\n return null;\n },\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function(event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\nSyntheticEvent.extend = function(Interface) {\n function E() {}\n function Class() {\n return Super.apply(this, arguments);\n }\n var Super = this;\n E.prototype = Super.prototype;\n var prototype = new E();\n Object.assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n Class.Interface = Object.assign({}, Super.Interface, Interface);\n Class.extend = Super.extend;\n addEventPoolingTo(Class);\n return Class;\n};\naddEventPoolingTo(SyntheticEvent);\nfunction createOrGetPooledEvent(\n dispatchConfig,\n targetInst,\n nativeEvent,\n nativeInst\n) {\n if (this.eventPool.length) {\n var instance = this.eventPool.pop();\n this.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);\n return instance;\n }\n return new this(dispatchConfig, targetInst, nativeEvent, nativeInst);\n}\nfunction releasePooledEvent(event) {\n if (!(event instanceof this))\n throw Error(\n \"Trying to release an event instance into a pool of a different type.\"\n );\n event.destructor();\n 10 > this.eventPool.length && this.eventPool.push(event);\n}\nfunction addEventPoolingTo(EventConstructor) {\n EventConstructor.getPooled = createOrGetPooledEvent;\n EventConstructor.eventPool = [];\n EventConstructor.release = releasePooledEvent;\n}\nvar ResponderSyntheticEvent = SyntheticEvent.extend({\n touchHistory: function() {\n return null;\n }\n});\nfunction isStartish(topLevelType) {\n return \"topTouchStart\" === topLevelType;\n}\nfunction isMoveish(topLevelType) {\n return \"topTouchMove\" === topLevelType;\n}\nvar startDependencies = [\"topTouchStart\"],\n moveDependencies = [\"topTouchMove\"],\n endDependencies = [\"topTouchCancel\", \"topTouchEnd\"],\n touchBank = [],\n touchHistory = {\n touchBank: touchBank,\n numberActiveTouches: 0,\n indexOfSingleActiveTouch: -1,\n mostRecentTimeStamp: 0\n };\nfunction timestampForTouch(touch) {\n return touch.timeStamp || touch.timestamp;\n}\nfunction getTouchIdentifier(_ref) {\n _ref = _ref.identifier;\n if (null == _ref) throw Error(\"Touch object is missing identifier.\");\n return _ref;\n}\nfunction recordTouchStart(touch) {\n var identifier = getTouchIdentifier(touch),\n touchRecord = touchBank[identifier];\n touchRecord\n ? ((touchRecord.touchActive = !0),\n (touchRecord.startPageX = touch.pageX),\n (touchRecord.startPageY = touch.pageY),\n (touchRecord.startTimeStamp = timestampForTouch(touch)),\n (touchRecord.currentPageX = touch.pageX),\n (touchRecord.currentPageY = touch.pageY),\n (touchRecord.currentTimeStamp = timestampForTouch(touch)),\n (touchRecord.previousPageX = touch.pageX),\n (touchRecord.previousPageY = touch.pageY),\n (touchRecord.previousTimeStamp = timestampForTouch(touch)))\n : ((touchRecord = {\n touchActive: !0,\n startPageX: touch.pageX,\n startPageY: touch.pageY,\n startTimeStamp: timestampForTouch(touch),\n currentPageX: touch.pageX,\n currentPageY: touch.pageY,\n currentTimeStamp: timestampForTouch(touch),\n previousPageX: touch.pageX,\n previousPageY: touch.pageY,\n previousTimeStamp: timestampForTouch(touch)\n }),\n (touchBank[identifier] = touchRecord));\n touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n}\nfunction recordTouchMove(touch) {\n var touchRecord = touchBank[getTouchIdentifier(touch)];\n touchRecord &&\n ((touchRecord.touchActive = !0),\n (touchRecord.previousPageX = touchRecord.currentPageX),\n (touchRecord.previousPageY = touchRecord.currentPageY),\n (touchRecord.previousTimeStamp = touchRecord.currentTimeStamp),\n (touchRecord.currentPageX = touch.pageX),\n (touchRecord.currentPageY = touch.pageY),\n (touchRecord.currentTimeStamp = timestampForTouch(touch)),\n (touchHistory.mostRecentTimeStamp = timestampForTouch(touch)));\n}\nfunction recordTouchEnd(touch) {\n var touchRecord = touchBank[getTouchIdentifier(touch)];\n touchRecord &&\n ((touchRecord.touchActive = !1),\n (touchRecord.previousPageX = touchRecord.currentPageX),\n (touchRecord.previousPageY = touchRecord.currentPageY),\n (touchRecord.previousTimeStamp = touchRecord.currentTimeStamp),\n (touchRecord.currentPageX = touch.pageX),\n (touchRecord.currentPageY = touch.pageY),\n (touchRecord.currentTimeStamp = timestampForTouch(touch)),\n (touchHistory.mostRecentTimeStamp = timestampForTouch(touch)));\n}\nvar instrumentationCallback,\n ResponderTouchHistoryStore = {\n instrument: function(callback) {\n instrumentationCallback = callback;\n },\n recordTouchTrack: function(topLevelType, nativeEvent) {\n null != instrumentationCallback &&\n instrumentationCallback(topLevelType, nativeEvent);\n if (isMoveish(topLevelType))\n nativeEvent.changedTouches.forEach(recordTouchMove);\n else if (isStartish(topLevelType))\n nativeEvent.changedTouches.forEach(recordTouchStart),\n (touchHistory.numberActiveTouches = nativeEvent.touches.length),\n 1 === touchHistory.numberActiveTouches &&\n (touchHistory.indexOfSingleActiveTouch =\n nativeEvent.touches[0].identifier);\n else if (\n \"topTouchEnd\" === topLevelType ||\n \"topTouchCancel\" === topLevelType\n )\n if (\n (nativeEvent.changedTouches.forEach(recordTouchEnd),\n (touchHistory.numberActiveTouches = nativeEvent.touches.length),\n 1 === touchHistory.numberActiveTouches)\n )\n for (\n topLevelType = 0;\n topLevelType < touchBank.length;\n topLevelType++\n )\n if (\n ((nativeEvent = touchBank[topLevelType]),\n null != nativeEvent && nativeEvent.touchActive)\n ) {\n touchHistory.indexOfSingleActiveTouch = topLevelType;\n break;\n }\n },\n touchHistory: touchHistory\n };\nfunction accumulate(current, next) {\n if (null == next)\n throw Error(\n \"accumulate(...): Accumulated items must not be null or undefined.\"\n );\n return null == current\n ? next\n : isArrayImpl(current)\n ? current.concat(next)\n : isArrayImpl(next)\n ? [current].concat(next)\n : [current, next];\n}\nfunction accumulateInto(current, next) {\n if (null == next)\n throw Error(\n \"accumulateInto(...): Accumulated items must not be null or undefined.\"\n );\n if (null == current) return next;\n if (isArrayImpl(current)) {\n if (isArrayImpl(next)) return current.push.apply(current, next), current;\n current.push(next);\n return current;\n }\n return isArrayImpl(next) ? [current].concat(next) : [current, next];\n}\nfunction forEachAccumulated(arr, cb, scope) {\n Array.isArray(arr) ? arr.forEach(cb, scope) : arr && cb.call(scope, arr);\n}\nvar responderInst = null,\n trackedTouchCount = 0;\nfunction changeResponder(nextResponderInst, blockHostResponder) {\n var oldResponderInst = responderInst;\n responderInst = nextResponderInst;\n if (null !== ResponderEventPlugin.GlobalResponderHandler)\n ResponderEventPlugin.GlobalResponderHandler.onChange(\n oldResponderInst,\n nextResponderInst,\n blockHostResponder\n );\n}\nvar eventTypes = {\n startShouldSetResponder: {\n phasedRegistrationNames: {\n bubbled: \"onStartShouldSetResponder\",\n captured: \"onStartShouldSetResponderCapture\"\n },\n dependencies: startDependencies\n },\n scrollShouldSetResponder: {\n phasedRegistrationNames: {\n bubbled: \"onScrollShouldSetResponder\",\n captured: \"onScrollShouldSetResponderCapture\"\n },\n dependencies: [\"topScroll\"]\n },\n selectionChangeShouldSetResponder: {\n phasedRegistrationNames: {\n bubbled: \"onSelectionChangeShouldSetResponder\",\n captured: \"onSelectionChangeShouldSetResponderCapture\"\n },\n dependencies: [\"topSelectionChange\"]\n },\n moveShouldSetResponder: {\n phasedRegistrationNames: {\n bubbled: \"onMoveShouldSetResponder\",\n captured: \"onMoveShouldSetResponderCapture\"\n },\n dependencies: moveDependencies\n },\n responderStart: {\n registrationName: \"onResponderStart\",\n dependencies: startDependencies\n },\n responderMove: {\n registrationName: \"onResponderMove\",\n dependencies: moveDependencies\n },\n responderEnd: {\n registrationName: \"onResponderEnd\",\n dependencies: endDependencies\n },\n responderRelease: {\n registrationName: \"onResponderRelease\",\n dependencies: endDependencies\n },\n responderTerminationRequest: {\n registrationName: \"onResponderTerminationRequest\",\n dependencies: []\n },\n responderGrant: { registrationName: \"onResponderGrant\", dependencies: [] },\n responderReject: { registrationName: \"onResponderReject\", dependencies: [] },\n responderTerminate: {\n registrationName: \"onResponderTerminate\",\n dependencies: []\n }\n};\nfunction getParent(inst) {\n do inst = inst.return;\n while (inst && 5 !== inst.tag);\n return inst ? inst : null;\n}\nfunction traverseTwoPhase(inst, fn, arg) {\n for (var path = []; inst; ) path.push(inst), (inst = getParent(inst));\n for (inst = path.length; 0 < inst--; ) fn(path[inst], \"captured\", arg);\n for (inst = 0; inst < path.length; inst++) fn(path[inst], \"bubbled\", arg);\n}\nfunction getListener(inst, registrationName) {\n inst = inst.stateNode;\n if (null === inst) return null;\n inst = getFiberCurrentPropsFromNode(inst);\n if (null === inst) return null;\n if ((inst = inst[registrationName]) && \"function\" !== typeof inst)\n throw Error(\n \"Expected `\" +\n registrationName +\n \"` listener to be a function, instead got a value of `\" +\n typeof inst +\n \"` type.\"\n );\n return inst;\n}\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n if (\n (phase = getListener(\n inst,\n event.dispatchConfig.phasedRegistrationNames[phase]\n ))\n )\n (event._dispatchListeners = accumulateInto(\n event._dispatchListeners,\n phase\n )),\n (event._dispatchInstances = accumulateInto(\n event._dispatchInstances,\n inst\n ));\n}\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n var inst = event._targetInst;\n if (inst && event && event.dispatchConfig.registrationName) {\n var listener = getListener(inst, event.dispatchConfig.registrationName);\n listener &&\n ((event._dispatchListeners = accumulateInto(\n event._dispatchListeners,\n listener\n )),\n (event._dispatchInstances = accumulateInto(\n event._dispatchInstances,\n inst\n )));\n }\n }\n}\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n var targetInst = event._targetInst;\n targetInst = targetInst ? getParent(targetInst) : null;\n traverseTwoPhase(targetInst, accumulateDirectionalDispatches, event);\n }\n}\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n event &&\n event.dispatchConfig.phasedRegistrationNames &&\n traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n}\nvar ResponderEventPlugin = {\n _getResponder: function() {\n return responderInst;\n },\n eventTypes: eventTypes,\n extractEvents: function(\n topLevelType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n if (isStartish(topLevelType)) trackedTouchCount += 1;\n else if (\n \"topTouchEnd\" === topLevelType ||\n \"topTouchCancel\" === topLevelType\n )\n if (0 <= trackedTouchCount) --trackedTouchCount;\n else return null;\n ResponderTouchHistoryStore.recordTouchTrack(topLevelType, nativeEvent);\n if (\n targetInst &&\n ((\"topScroll\" === topLevelType && !nativeEvent.responderIgnoreScroll) ||\n (0 < trackedTouchCount && \"topSelectionChange\" === topLevelType) ||\n isStartish(topLevelType) ||\n isMoveish(topLevelType))\n ) {\n var shouldSetEventType = isStartish(topLevelType)\n ? eventTypes.startShouldSetResponder\n : isMoveish(topLevelType)\n ? eventTypes.moveShouldSetResponder\n : \"topSelectionChange\" === topLevelType\n ? eventTypes.selectionChangeShouldSetResponder\n : eventTypes.scrollShouldSetResponder;\n if (responderInst)\n b: {\n var JSCompiler_temp = responderInst;\n for (\n var depthA = 0, tempA = JSCompiler_temp;\n tempA;\n tempA = getParent(tempA)\n )\n depthA++;\n tempA = 0;\n for (var tempB = targetInst; tempB; tempB = getParent(tempB))\n tempA++;\n for (; 0 < depthA - tempA; )\n (JSCompiler_temp = getParent(JSCompiler_temp)), depthA--;\n for (; 0 < tempA - depthA; )\n (targetInst = getParent(targetInst)), tempA--;\n for (; depthA--; ) {\n if (\n JSCompiler_temp === targetInst ||\n JSCompiler_temp === targetInst.alternate\n )\n break b;\n JSCompiler_temp = getParent(JSCompiler_temp);\n targetInst = getParent(targetInst);\n }\n JSCompiler_temp = null;\n }\n else JSCompiler_temp = targetInst;\n targetInst = JSCompiler_temp;\n JSCompiler_temp = targetInst === responderInst;\n shouldSetEventType = ResponderSyntheticEvent.getPooled(\n shouldSetEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n shouldSetEventType.touchHistory =\n ResponderTouchHistoryStore.touchHistory;\n JSCompiler_temp\n ? forEachAccumulated(\n shouldSetEventType,\n accumulateTwoPhaseDispatchesSingleSkipTarget\n )\n : forEachAccumulated(\n shouldSetEventType,\n accumulateTwoPhaseDispatchesSingle\n );\n b: {\n JSCompiler_temp = shouldSetEventType._dispatchListeners;\n targetInst = shouldSetEventType._dispatchInstances;\n if (isArrayImpl(JSCompiler_temp))\n for (\n depthA = 0;\n depthA < JSCompiler_temp.length &&\n !shouldSetEventType.isPropagationStopped();\n depthA++\n ) {\n if (\n JSCompiler_temp[depthA](shouldSetEventType, targetInst[depthA])\n ) {\n JSCompiler_temp = targetInst[depthA];\n break b;\n }\n }\n else if (\n JSCompiler_temp &&\n JSCompiler_temp(shouldSetEventType, targetInst)\n ) {\n JSCompiler_temp = targetInst;\n break b;\n }\n JSCompiler_temp = null;\n }\n shouldSetEventType._dispatchInstances = null;\n shouldSetEventType._dispatchListeners = null;\n shouldSetEventType.isPersistent() ||\n shouldSetEventType.constructor.release(shouldSetEventType);\n if (JSCompiler_temp && JSCompiler_temp !== responderInst)\n if (\n ((shouldSetEventType = ResponderSyntheticEvent.getPooled(\n eventTypes.responderGrant,\n JSCompiler_temp,\n nativeEvent,\n nativeEventTarget\n )),\n (shouldSetEventType.touchHistory =\n ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(\n shouldSetEventType,\n accumulateDirectDispatchesSingle\n ),\n (targetInst = !0 === executeDirectDispatch(shouldSetEventType)),\n responderInst)\n )\n if (\n ((depthA = ResponderSyntheticEvent.getPooled(\n eventTypes.responderTerminationRequest,\n responderInst,\n nativeEvent,\n nativeEventTarget\n )),\n (depthA.touchHistory = ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(depthA, accumulateDirectDispatchesSingle),\n (tempA =\n !depthA._dispatchListeners || executeDirectDispatch(depthA)),\n depthA.isPersistent() || depthA.constructor.release(depthA),\n tempA)\n ) {\n depthA = ResponderSyntheticEvent.getPooled(\n eventTypes.responderTerminate,\n responderInst,\n nativeEvent,\n nativeEventTarget\n );\n depthA.touchHistory = ResponderTouchHistoryStore.touchHistory;\n forEachAccumulated(depthA, accumulateDirectDispatchesSingle);\n var JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n [shouldSetEventType, depthA]\n );\n changeResponder(JSCompiler_temp, targetInst);\n } else\n (shouldSetEventType = ResponderSyntheticEvent.getPooled(\n eventTypes.responderReject,\n JSCompiler_temp,\n nativeEvent,\n nativeEventTarget\n )),\n (shouldSetEventType.touchHistory =\n ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(\n shouldSetEventType,\n accumulateDirectDispatchesSingle\n ),\n (JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n shouldSetEventType\n ));\n else\n (JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n shouldSetEventType\n )),\n changeResponder(JSCompiler_temp, targetInst);\n else JSCompiler_temp$jscomp$0 = null;\n } else JSCompiler_temp$jscomp$0 = null;\n shouldSetEventType = responderInst && isStartish(topLevelType);\n JSCompiler_temp = responderInst && isMoveish(topLevelType);\n targetInst =\n responderInst &&\n (\"topTouchEnd\" === topLevelType || \"topTouchCancel\" === topLevelType);\n if (\n (shouldSetEventType = shouldSetEventType\n ? eventTypes.responderStart\n : JSCompiler_temp\n ? eventTypes.responderMove\n : targetInst\n ? eventTypes.responderEnd\n : null)\n )\n (shouldSetEventType = ResponderSyntheticEvent.getPooled(\n shouldSetEventType,\n responderInst,\n nativeEvent,\n nativeEventTarget\n )),\n (shouldSetEventType.touchHistory =\n ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(\n shouldSetEventType,\n accumulateDirectDispatchesSingle\n ),\n (JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n shouldSetEventType\n ));\n shouldSetEventType = responderInst && \"topTouchCancel\" === topLevelType;\n if (\n (topLevelType =\n responderInst &&\n !shouldSetEventType &&\n (\"topTouchEnd\" === topLevelType || \"topTouchCancel\" === topLevelType))\n )\n a: {\n if ((topLevelType = nativeEvent.touches) && 0 !== topLevelType.length)\n for (\n JSCompiler_temp = 0;\n JSCompiler_temp < topLevelType.length;\n JSCompiler_temp++\n )\n if (\n ((targetInst = topLevelType[JSCompiler_temp].target),\n null !== targetInst &&\n void 0 !== targetInst &&\n 0 !== targetInst)\n ) {\n depthA = getInstanceFromNode(targetInst);\n b: {\n for (targetInst = responderInst; depthA; ) {\n if (\n targetInst === depthA ||\n targetInst === depthA.alternate\n ) {\n targetInst = !0;\n break b;\n }\n depthA = getParent(depthA);\n }\n targetInst = !1;\n }\n if (targetInst) {\n topLevelType = !1;\n break a;\n }\n }\n topLevelType = !0;\n }\n if (\n (topLevelType = shouldSetEventType\n ? eventTypes.responderTerminate\n : topLevelType\n ? eventTypes.responderRelease\n : null)\n )\n (nativeEvent = ResponderSyntheticEvent.getPooled(\n topLevelType,\n responderInst,\n nativeEvent,\n nativeEventTarget\n )),\n (nativeEvent.touchHistory = ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(nativeEvent, accumulateDirectDispatchesSingle),\n (JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n nativeEvent\n )),\n changeResponder(null);\n return JSCompiler_temp$jscomp$0;\n },\n GlobalResponderHandler: null,\n injection: {\n injectGlobalResponderHandler: function(GlobalResponderHandler) {\n ResponderEventPlugin.GlobalResponderHandler = GlobalResponderHandler;\n }\n }\n },\n eventPluginOrder = null,\n namesToPlugins = {};\nfunction recomputePluginOrdering() {\n if (eventPluginOrder)\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName],\n pluginIndex = eventPluginOrder.indexOf(pluginName);\n if (!(-1 < pluginIndex))\n throw Error(\n \"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" +\n pluginName +\n \"`.\"\n );\n if (!plugins[pluginIndex]) {\n if (!pluginModule.extractEvents)\n throw Error(\n \"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" +\n pluginName +\n \"` does not.\"\n );\n plugins[pluginIndex] = pluginModule;\n pluginIndex = pluginModule.eventTypes;\n for (var eventName in pluginIndex) {\n var JSCompiler_inline_result = void 0;\n var dispatchConfig = pluginIndex[eventName],\n eventName$jscomp$0 = eventName;\n if (eventNameDispatchConfigs.hasOwnProperty(eventName$jscomp$0))\n throw Error(\n \"EventPluginRegistry: More than one plugin attempted to publish the same event name, `\" +\n eventName$jscomp$0 +\n \"`.\"\n );\n eventNameDispatchConfigs[eventName$jscomp$0] = dispatchConfig;\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (JSCompiler_inline_result in phasedRegistrationNames)\n phasedRegistrationNames.hasOwnProperty(\n JSCompiler_inline_result\n ) &&\n publishRegistrationName(\n phasedRegistrationNames[JSCompiler_inline_result],\n pluginModule,\n eventName$jscomp$0\n );\n JSCompiler_inline_result = !0;\n } else\n dispatchConfig.registrationName\n ? (publishRegistrationName(\n dispatchConfig.registrationName,\n pluginModule,\n eventName$jscomp$0\n ),\n (JSCompiler_inline_result = !0))\n : (JSCompiler_inline_result = !1);\n if (!JSCompiler_inline_result)\n throw Error(\n \"EventPluginRegistry: Failed to publish event `\" +\n eventName +\n \"` for plugin `\" +\n pluginName +\n \"`.\"\n );\n }\n }\n }\n}\nfunction publishRegistrationName(registrationName, pluginModule) {\n if (registrationNameModules[registrationName])\n throw Error(\n \"EventPluginRegistry: More than one plugin attempted to publish the same registration name, `\" +\n registrationName +\n \"`.\"\n );\n registrationNameModules[registrationName] = pluginModule;\n}\nvar plugins = [],\n eventNameDispatchConfigs = {},\n registrationNameModules = {};\nfunction getListener$1(inst, registrationName) {\n inst = inst.stateNode;\n if (null === inst) return null;\n inst = getFiberCurrentPropsFromNode(inst);\n if (null === inst) return null;\n if ((inst = inst[registrationName]) && \"function\" !== typeof inst)\n throw Error(\n \"Expected `\" +\n registrationName +\n \"` listener to be a function, instead got a value of `\" +\n typeof inst +\n \"` type.\"\n );\n return inst;\n}\nvar customBubblingEventTypes =\n ReactNativePrivateInterface.ReactNativeViewConfigRegistry\n .customBubblingEventTypes,\n customDirectEventTypes =\n ReactNativePrivateInterface.ReactNativeViewConfigRegistry\n .customDirectEventTypes;\nfunction accumulateDirectionalDispatches$1(inst, phase, event) {\n if (\n (phase = getListener$1(\n inst,\n event.dispatchConfig.phasedRegistrationNames[phase]\n ))\n )\n (event._dispatchListeners = accumulateInto(\n event._dispatchListeners,\n phase\n )),\n (event._dispatchInstances = accumulateInto(\n event._dispatchInstances,\n inst\n ));\n}\nfunction accumulateTwoPhaseDispatchesSingle$1(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n for (var inst = event._targetInst, path = []; inst; ) {\n path.push(inst);\n do inst = inst.return;\n while (inst && 5 !== inst.tag);\n inst = inst ? inst : null;\n }\n for (inst = path.length; 0 < inst--; )\n accumulateDirectionalDispatches$1(path[inst], \"captured\", event);\n for (inst = 0; inst < path.length; inst++)\n accumulateDirectionalDispatches$1(path[inst], \"bubbled\", event);\n }\n}\nfunction accumulateDirectDispatchesSingle$1(event) {\n if (event && event.dispatchConfig.registrationName) {\n var inst = event._targetInst;\n if (inst && event && event.dispatchConfig.registrationName) {\n var listener = getListener$1(inst, event.dispatchConfig.registrationName);\n listener &&\n ((event._dispatchListeners = accumulateInto(\n event._dispatchListeners,\n listener\n )),\n (event._dispatchInstances = accumulateInto(\n event._dispatchInstances,\n inst\n )));\n }\n }\n}\nif (eventPluginOrder)\n throw Error(\n \"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\"\n );\neventPluginOrder = Array.prototype.slice.call([\n \"ResponderEventPlugin\",\n \"ReactNativeBridgeEventPlugin\"\n]);\nrecomputePluginOrdering();\nvar injectedNamesToPlugins$jscomp$inline_219 = {\n ResponderEventPlugin: ResponderEventPlugin,\n ReactNativeBridgeEventPlugin: {\n eventTypes: {},\n extractEvents: function(\n topLevelType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n if (null == targetInst) return null;\n var bubbleDispatchConfig = customBubblingEventTypes[topLevelType],\n directDispatchConfig = customDirectEventTypes[topLevelType];\n if (!bubbleDispatchConfig && !directDispatchConfig)\n throw Error(\n 'Unsupported top level event type \"' + topLevelType + '\" dispatched'\n );\n topLevelType = SyntheticEvent.getPooled(\n bubbleDispatchConfig || directDispatchConfig,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n if (bubbleDispatchConfig)\n forEachAccumulated(\n topLevelType,\n accumulateTwoPhaseDispatchesSingle$1\n );\n else if (directDispatchConfig)\n forEachAccumulated(topLevelType, accumulateDirectDispatchesSingle$1);\n else return null;\n return topLevelType;\n }\n }\n },\n isOrderingDirty$jscomp$inline_220 = !1,\n pluginName$jscomp$inline_221;\nfor (pluginName$jscomp$inline_221 in injectedNamesToPlugins$jscomp$inline_219)\n if (\n injectedNamesToPlugins$jscomp$inline_219.hasOwnProperty(\n pluginName$jscomp$inline_221\n )\n ) {\n var pluginModule$jscomp$inline_222 =\n injectedNamesToPlugins$jscomp$inline_219[pluginName$jscomp$inline_221];\n if (\n !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_221) ||\n namesToPlugins[pluginName$jscomp$inline_221] !==\n pluginModule$jscomp$inline_222\n ) {\n if (namesToPlugins[pluginName$jscomp$inline_221])\n throw Error(\n \"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" +\n pluginName$jscomp$inline_221 +\n \"`.\"\n );\n namesToPlugins[\n pluginName$jscomp$inline_221\n ] = pluginModule$jscomp$inline_222;\n isOrderingDirty$jscomp$inline_220 = !0;\n }\n }\nisOrderingDirty$jscomp$inline_220 && recomputePluginOrdering();\nvar instanceCache = new Map(),\n instanceProps = new Map();\nfunction getInstanceFromTag(tag) {\n return instanceCache.get(tag) || null;\n}\nfunction batchedUpdatesImpl(fn, bookkeeping) {\n return fn(bookkeeping);\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates(fn, bookkeeping) {\n if (isInsideEventHandler) return fn(bookkeeping);\n isInsideEventHandler = !0;\n try {\n return batchedUpdatesImpl(fn, bookkeeping);\n } finally {\n isInsideEventHandler = !1;\n }\n}\nvar eventQueue = null;\nfunction executeDispatchesAndReleaseTopLevel(e) {\n if (e) {\n var dispatchListeners = e._dispatchListeners,\n dispatchInstances = e._dispatchInstances;\n if (isArrayImpl(dispatchListeners))\n for (\n var i = 0;\n i < dispatchListeners.length && !e.isPropagationStopped();\n i++\n )\n executeDispatch(e, dispatchListeners[i], dispatchInstances[i]);\n else\n dispatchListeners &&\n executeDispatch(e, dispatchListeners, dispatchInstances);\n e._dispatchListeners = null;\n e._dispatchInstances = null;\n e.isPersistent() || e.constructor.release(e);\n }\n}\nvar EMPTY_NATIVE_EVENT = {};\nfunction _receiveRootNodeIDEvent(rootNodeID, topLevelType, nativeEventParam) {\n var nativeEvent = nativeEventParam || EMPTY_NATIVE_EVENT,\n inst = getInstanceFromTag(rootNodeID),\n target = null;\n null != inst && (target = inst.stateNode);\n batchedUpdates(function() {\n var JSCompiler_inline_result = target;\n for (\n var events = null, legacyPlugins = plugins, i = 0;\n i < legacyPlugins.length;\n i++\n ) {\n var possiblePlugin = legacyPlugins[i];\n possiblePlugin &&\n (possiblePlugin = possiblePlugin.extractEvents(\n topLevelType,\n inst,\n nativeEvent,\n JSCompiler_inline_result\n )) &&\n (events = accumulateInto(events, possiblePlugin));\n }\n JSCompiler_inline_result = events;\n null !== JSCompiler_inline_result &&\n (eventQueue = accumulateInto(eventQueue, JSCompiler_inline_result));\n JSCompiler_inline_result = eventQueue;\n eventQueue = null;\n if (JSCompiler_inline_result) {\n forEachAccumulated(\n JSCompiler_inline_result,\n executeDispatchesAndReleaseTopLevel\n );\n if (eventQueue)\n throw Error(\n \"processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.\"\n );\n if (hasRethrowError)\n throw ((JSCompiler_inline_result = rethrowError),\n (hasRethrowError = !1),\n (rethrowError = null),\n JSCompiler_inline_result);\n }\n });\n}\nReactNativePrivateInterface.RCTEventEmitter.register({\n receiveEvent: function(rootNodeID, topLevelType, nativeEventParam) {\n _receiveRootNodeIDEvent(rootNodeID, topLevelType, nativeEventParam);\n },\n receiveTouches: function(eventTopLevelType, touches, changedIndices) {\n if (\n \"topTouchEnd\" === eventTopLevelType ||\n \"topTouchCancel\" === eventTopLevelType\n ) {\n var JSCompiler_temp = [];\n for (var i = 0; i < changedIndices.length; i++) {\n var index$0 = changedIndices[i];\n JSCompiler_temp.push(touches[index$0]);\n touches[index$0] = null;\n }\n for (i = changedIndices = 0; i < touches.length; i++)\n (index$0 = touches[i]),\n null !== index$0 && (touches[changedIndices++] = index$0);\n touches.length = changedIndices;\n } else\n for (JSCompiler_temp = [], i = 0; i < changedIndices.length; i++)\n JSCompiler_temp.push(touches[changedIndices[i]]);\n for (\n changedIndices = 0;\n changedIndices < JSCompiler_temp.length;\n changedIndices++\n ) {\n i = JSCompiler_temp[changedIndices];\n i.changedTouches = JSCompiler_temp;\n i.touches = touches;\n index$0 = null;\n var target = i.target;\n null === target || void 0 === target || 1 > target || (index$0 = target);\n _receiveRootNodeIDEvent(index$0, eventTopLevelType, i);\n }\n }\n});\ngetFiberCurrentPropsFromNode = function(stateNode) {\n return instanceProps.get(stateNode._nativeTag) || null;\n};\ngetInstanceFromNode = getInstanceFromTag;\ngetNodeFromInstance = function(inst) {\n inst = inst.stateNode;\n var tag = inst._nativeTag;\n void 0 === tag && ((inst = inst.canonical), (tag = inst._nativeTag));\n if (!tag) throw Error(\"All native instances should have a tag.\");\n return inst;\n};\nResponderEventPlugin.injection.injectGlobalResponderHandler({\n onChange: function(from, to, blockNativeResponder) {\n null !== to\n ? ReactNativePrivateInterface.UIManager.setJSResponder(\n to.stateNode._nativeTag,\n blockNativeResponder\n )\n : ReactNativePrivateInterface.UIManager.clearJSResponder();\n }\n});\nvar ReactSharedInternals =\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,\n REACT_ELEMENT_TYPE = 60103,\n REACT_PORTAL_TYPE = 60106,\n REACT_FRAGMENT_TYPE = 60107,\n REACT_STRICT_MODE_TYPE = 60108,\n REACT_PROFILER_TYPE = 60114,\n REACT_PROVIDER_TYPE = 60109,\n REACT_CONTEXT_TYPE = 60110,\n REACT_FORWARD_REF_TYPE = 60112,\n REACT_SUSPENSE_TYPE = 60113,\n REACT_SUSPENSE_LIST_TYPE = 60120,\n REACT_MEMO_TYPE = 60115,\n REACT_LAZY_TYPE = 60116,\n REACT_DEBUG_TRACING_MODE_TYPE = 60129,\n REACT_OFFSCREEN_TYPE = 60130,\n REACT_LEGACY_HIDDEN_TYPE = 60131,\n REACT_CACHE_TYPE = 60132;\nif (\"function\" === typeof Symbol && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor(\"react.element\");\n REACT_PORTAL_TYPE = symbolFor(\"react.portal\");\n REACT_FRAGMENT_TYPE = symbolFor(\"react.fragment\");\n REACT_STRICT_MODE_TYPE = symbolFor(\"react.strict_mode\");\n REACT_PROFILER_TYPE = symbolFor(\"react.profiler\");\n REACT_PROVIDER_TYPE = symbolFor(\"react.provider\");\n REACT_CONTEXT_TYPE = symbolFor(\"react.context\");\n REACT_FORWARD_REF_TYPE = symbolFor(\"react.forward_ref\");\n REACT_SUSPENSE_TYPE = symbolFor(\"react.suspense\");\n REACT_SUSPENSE_LIST_TYPE = symbolFor(\"react.suspense_list\");\n REACT_MEMO_TYPE = symbolFor(\"react.memo\");\n REACT_LAZY_TYPE = symbolFor(\"react.lazy\");\n symbolFor(\"react.scope\");\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor(\"react.debug_trace_mode\");\n REACT_OFFSCREEN_TYPE = symbolFor(\"react.offscreen\");\n REACT_LEGACY_HIDDEN_TYPE = symbolFor(\"react.legacy_hidden\");\n REACT_CACHE_TYPE = symbolFor(\"react.cache\");\n}\nvar MAYBE_ITERATOR_SYMBOL = \"function\" === typeof Symbol && Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type) return type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_CACHE_TYPE:\n return \"Cache\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Consumer\";\n case REACT_PROVIDER_TYPE:\n return (type._context.displayName || \"Context\") + \".Provider\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nfunction getComponentNameFromFiber(fiber) {\n var type = fiber.type;\n switch (fiber.tag) {\n case 24:\n return \"Cache\";\n case 9:\n return (type.displayName || \"Context\") + \".Consumer\";\n case 10:\n return (type._context.displayName || \"Context\") + \".Provider\";\n case 18:\n return \"DehydratedFragment\";\n case 11:\n return (\n (fiber = type.render),\n (fiber = fiber.displayName || fiber.name || \"\"),\n type.displayName ||\n (\"\" !== fiber ? \"ForwardRef(\" + fiber + \")\" : \"ForwardRef\")\n );\n case 7:\n return \"Fragment\";\n case 5:\n return type;\n case 4:\n return \"Portal\";\n case 3:\n return \"Root\";\n case 6:\n return \"Text\";\n case 16:\n return getComponentNameFromType(type);\n case 23:\n return \"LegacyHidden\";\n case 8:\n return type === REACT_STRICT_MODE_TYPE ? \"StrictMode\" : \"Mode\";\n case 22:\n return \"Offscreen\";\n case 12:\n return \"Profiler\";\n case 21:\n return \"Scope\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 1:\n case 0:\n case 17:\n case 2:\n case 14:\n case 15:\n if (\"function\" === typeof type)\n return type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n }\n return null;\n}\nfunction getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 2050) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(\"Unable to find node on an unmounted component.\");\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate)\n throw Error(\"Unable to find node on an unmounted component.\");\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$1 = parentA.child; child$1; ) {\n if (child$1 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$1 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$1 = child$1.sibling;\n }\n if (!didFindChild) {\n for (child$1 = parentB.child; child$1; ) {\n if (child$1 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$1 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$1 = child$1.sibling;\n }\n if (!didFindChild)\n throw Error(\n \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\"\n );\n }\n }\n if (a.alternate !== b)\n throw Error(\n \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (3 !== a.tag)\n throw Error(\"Unable to find node on an unmounted component.\");\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiber(parent) {\n parent = findCurrentFiberUsingSlowPath(parent);\n return null !== parent ? findCurrentHostFiberImpl(parent) : null;\n}\nfunction findCurrentHostFiberImpl(node) {\n if (5 === node.tag || 6 === node.tag) return node;\n for (node = node.child; null !== node; ) {\n var match = findCurrentHostFiberImpl(node);\n if (null !== match) return match;\n node = node.sibling;\n }\n return null;\n}\nvar emptyObject = {},\n removedKeys = null,\n removedKeyCount = 0,\n deepDifferOptions = { unsafelyIgnoreFunctions: !0 };\nfunction defaultDiffer(prevProp, nextProp) {\n return \"object\" !== typeof nextProp || null === nextProp\n ? !0\n : ReactNativePrivateInterface.deepDiffer(\n prevProp,\n nextProp,\n deepDifferOptions\n );\n}\nfunction restoreDeletedValuesInNestedArray(\n updatePayload,\n node,\n validAttributes\n) {\n if (isArrayImpl(node))\n for (var i = node.length; i-- && 0 < removedKeyCount; )\n restoreDeletedValuesInNestedArray(\n updatePayload,\n node[i],\n validAttributes\n );\n else if (node && 0 < removedKeyCount)\n for (i in removedKeys)\n if (removedKeys[i]) {\n var nextProp = node[i];\n if (void 0 !== nextProp) {\n var attributeConfig = validAttributes[i];\n if (attributeConfig) {\n \"function\" === typeof nextProp && (nextProp = !0);\n \"undefined\" === typeof nextProp && (nextProp = null);\n if (\"object\" !== typeof attributeConfig)\n updatePayload[i] = nextProp;\n else if (\n \"function\" === typeof attributeConfig.diff ||\n \"function\" === typeof attributeConfig.process\n )\n (nextProp =\n \"function\" === typeof attributeConfig.process\n ? attributeConfig.process(nextProp)\n : nextProp),\n (updatePayload[i] = nextProp);\n removedKeys[i] = !1;\n removedKeyCount--;\n }\n }\n }\n}\nfunction diffNestedProperty(\n updatePayload,\n prevProp,\n nextProp,\n validAttributes\n) {\n if (!updatePayload && prevProp === nextProp) return updatePayload;\n if (!prevProp || !nextProp)\n return nextProp\n ? addNestedProperty(updatePayload, nextProp, validAttributes)\n : prevProp\n ? clearNestedProperty(updatePayload, prevProp, validAttributes)\n : updatePayload;\n if (!isArrayImpl(prevProp) && !isArrayImpl(nextProp))\n return diffProperties(updatePayload, prevProp, nextProp, validAttributes);\n if (isArrayImpl(prevProp) && isArrayImpl(nextProp)) {\n var minLength =\n prevProp.length < nextProp.length ? prevProp.length : nextProp.length,\n i;\n for (i = 0; i < minLength; i++)\n updatePayload = diffNestedProperty(\n updatePayload,\n prevProp[i],\n nextProp[i],\n validAttributes\n );\n for (; i < prevProp.length; i++)\n updatePayload = clearNestedProperty(\n updatePayload,\n prevProp[i],\n validAttributes\n );\n for (; i < nextProp.length; i++)\n updatePayload = addNestedProperty(\n updatePayload,\n nextProp[i],\n validAttributes\n );\n return updatePayload;\n }\n return isArrayImpl(prevProp)\n ? diffProperties(\n updatePayload,\n ReactNativePrivateInterface.flattenStyle(prevProp),\n nextProp,\n validAttributes\n )\n : diffProperties(\n updatePayload,\n prevProp,\n ReactNativePrivateInterface.flattenStyle(nextProp),\n validAttributes\n );\n}\nfunction addNestedProperty(updatePayload, nextProp, validAttributes) {\n if (!nextProp) return updatePayload;\n if (!isArrayImpl(nextProp))\n return diffProperties(\n updatePayload,\n emptyObject,\n nextProp,\n validAttributes\n );\n for (var i = 0; i < nextProp.length; i++)\n updatePayload = addNestedProperty(\n updatePayload,\n nextProp[i],\n validAttributes\n );\n return updatePayload;\n}\nfunction clearNestedProperty(updatePayload, prevProp, validAttributes) {\n if (!prevProp) return updatePayload;\n if (!isArrayImpl(prevProp))\n return diffProperties(\n updatePayload,\n prevProp,\n emptyObject,\n validAttributes\n );\n for (var i = 0; i < prevProp.length; i++)\n updatePayload = clearNestedProperty(\n updatePayload,\n prevProp[i],\n validAttributes\n );\n return updatePayload;\n}\nfunction diffProperties(updatePayload, prevProps, nextProps, validAttributes) {\n var attributeConfig, propKey;\n for (propKey in nextProps)\n if ((attributeConfig = validAttributes[propKey])) {\n var prevProp = prevProps[propKey];\n var nextProp = nextProps[propKey];\n \"function\" === typeof nextProp &&\n ((nextProp = !0), \"function\" === typeof prevProp && (prevProp = !0));\n \"undefined\" === typeof nextProp &&\n ((nextProp = null),\n \"undefined\" === typeof prevProp && (prevProp = null));\n removedKeys && (removedKeys[propKey] = !1);\n if (updatePayload && void 0 !== updatePayload[propKey])\n if (\"object\" !== typeof attributeConfig)\n updatePayload[propKey] = nextProp;\n else {\n if (\n \"function\" === typeof attributeConfig.diff ||\n \"function\" === typeof attributeConfig.process\n )\n (attributeConfig =\n \"function\" === typeof attributeConfig.process\n ? attributeConfig.process(nextProp)\n : nextProp),\n (updatePayload[propKey] = attributeConfig);\n }\n else if (prevProp !== nextProp)\n if (\"object\" !== typeof attributeConfig)\n defaultDiffer(prevProp, nextProp) &&\n ((updatePayload || (updatePayload = {}))[propKey] = nextProp);\n else if (\n \"function\" === typeof attributeConfig.diff ||\n \"function\" === typeof attributeConfig.process\n ) {\n if (\n void 0 === prevProp ||\n (\"function\" === typeof attributeConfig.diff\n ? attributeConfig.diff(prevProp, nextProp)\n : defaultDiffer(prevProp, nextProp))\n )\n (attributeConfig =\n \"function\" === typeof attributeConfig.process\n ? attributeConfig.process(nextProp)\n : nextProp),\n ((updatePayload || (updatePayload = {}))[\n propKey\n ] = attributeConfig);\n } else\n (removedKeys = null),\n (removedKeyCount = 0),\n (updatePayload = diffNestedProperty(\n updatePayload,\n prevProp,\n nextProp,\n attributeConfig\n )),\n 0 < removedKeyCount &&\n updatePayload &&\n (restoreDeletedValuesInNestedArray(\n updatePayload,\n nextProp,\n attributeConfig\n ),\n (removedKeys = null));\n }\n for (var propKey$3 in prevProps)\n void 0 === nextProps[propKey$3] &&\n (!(attributeConfig = validAttributes[propKey$3]) ||\n (updatePayload && void 0 !== updatePayload[propKey$3]) ||\n ((prevProp = prevProps[propKey$3]),\n void 0 !== prevProp &&\n (\"object\" !== typeof attributeConfig ||\n \"function\" === typeof attributeConfig.diff ||\n \"function\" === typeof attributeConfig.process\n ? (((updatePayload || (updatePayload = {}))[propKey$3] = null),\n removedKeys || (removedKeys = {}),\n removedKeys[propKey$3] ||\n ((removedKeys[propKey$3] = !0), removedKeyCount++))\n : (updatePayload = clearNestedProperty(\n updatePayload,\n prevProp,\n attributeConfig\n )))));\n return updatePayload;\n}\nfunction mountSafeCallback_NOT_REALLY_SAFE(context, callback) {\n return function() {\n if (\n callback &&\n (\"boolean\" !== typeof context.__isMounted || context.__isMounted)\n )\n return callback.apply(context, arguments);\n };\n}\nvar ReactNativeFiberHostComponent = (function() {\n function ReactNativeFiberHostComponent(tag, viewConfig) {\n this._nativeTag = tag;\n this._children = [];\n this.viewConfig = viewConfig;\n }\n var _proto = ReactNativeFiberHostComponent.prototype;\n _proto.blur = function() {\n ReactNativePrivateInterface.TextInputState.blurTextInput(this);\n };\n _proto.focus = function() {\n ReactNativePrivateInterface.TextInputState.focusTextInput(this);\n };\n _proto.measure = function(callback) {\n ReactNativePrivateInterface.UIManager.measure(\n this._nativeTag,\n mountSafeCallback_NOT_REALLY_SAFE(this, callback)\n );\n };\n _proto.measureInWindow = function(callback) {\n ReactNativePrivateInterface.UIManager.measureInWindow(\n this._nativeTag,\n mountSafeCallback_NOT_REALLY_SAFE(this, callback)\n );\n };\n _proto.measureLayout = function(relativeToNativeNode, onSuccess, onFail) {\n if (\"number\" === typeof relativeToNativeNode)\n var relativeNode = relativeToNativeNode;\n else\n relativeToNativeNode._nativeTag &&\n (relativeNode = relativeToNativeNode._nativeTag);\n null != relativeNode &&\n ReactNativePrivateInterface.UIManager.measureLayout(\n this._nativeTag,\n relativeNode,\n mountSafeCallback_NOT_REALLY_SAFE(this, onFail),\n mountSafeCallback_NOT_REALLY_SAFE(this, onSuccess)\n );\n };\n _proto.setNativeProps = function(nativeProps) {\n nativeProps = diffProperties(\n null,\n emptyObject,\n nativeProps,\n this.viewConfig.validAttributes\n );\n null != nativeProps &&\n ReactNativePrivateInterface.UIManager.updateView(\n this._nativeTag,\n this.viewConfig.uiViewClassName,\n nativeProps\n );\n };\n return ReactNativeFiberHostComponent;\n })(),\n scheduleCallback = Scheduler.unstable_scheduleCallback,\n cancelCallback = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority = Scheduler.unstable_NormalPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n rendererID = null,\n injectedHook = null;\nfunction onCommitRoot(root) {\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n try {\n injectedHook.onCommitFiberRoot(\n rendererID,\n root,\n void 0,\n 128 === (root.current.flags & 128)\n );\n } catch (err) {}\n}\nvar nextTransitionLane = 64,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 4194240;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n case 67108864:\n return lanes & 130023424;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 1073741824;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n nonIdlePendingLanes = pendingLanes & 268435455;\n if (0 !== nonIdlePendingLanes) {\n var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes;\n 0 !== nonIdleUnblockedLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes &&\n (nextLanes = getHighestPriorityLanes(pingedLanes)));\n } else\n (nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes &&\n (nextLanes = getHighestPriorityLanes(pingedLanes));\n if (0 === nextLanes) return 0;\n if (\n 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (pingedLanes = wipLanes & -wipLanes),\n suspendedLanes >= pingedLanes ||\n (16 === suspendedLanes && 0 !== (pingedLanes & 4194240)))\n )\n return wipLanes;\n 0 !== (nextLanes & 4) && (nextLanes |= pendingLanes & 16);\n wipLanes = root.entangledLanes;\n if (0 !== wipLanes)\n for (root = root.entanglements, wipLanes &= nextLanes; 0 < wipLanes; )\n (pendingLanes = 31 - clz32(wipLanes)),\n (suspendedLanes = 1 << pendingLanes),\n (nextLanes |= root[pendingLanes]),\n (wipLanes &= ~suspendedLanes);\n return nextLanes;\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n return currentTime + 250;\n case 8:\n case 16:\n case 32:\n case 64:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n case 67108864:\n return -1;\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction getLanesToRetrySynchronouslyOnError(root) {\n root = root.pendingLanes & -1073741825;\n return 0 !== root ? root : root & 1073741824 ? 1073741824 : 0;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated(root, updateLane, eventTime) {\n root.pendingLanes |= updateLane;\n 536870912 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0));\n root = root.eventTimes;\n updateLane = 31 - clz32(updateLane);\n root[updateLane] = eventTime;\n}\nfunction markRootFinished(root, remainingLanes) {\n var noLongerPendingLanes = root.pendingLanes & ~remainingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.mutableReadLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n remainingLanes = root.entanglements;\n var eventTimes = root.eventTimes;\n for (root = root.expirationTimes; 0 < noLongerPendingLanes; ) {\n var index$8 = 31 - clz32(noLongerPendingLanes),\n lane = 1 << index$8;\n remainingLanes[index$8] = 0;\n eventTimes[index$8] = -1;\n root[index$8] = -1;\n noLongerPendingLanes &= ~lane;\n }\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$9 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$9;\n (lane & entangledLanes) | (root[index$9] & entangledLanes) &&\n (root[index$9] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(lanes) {\n return 0 === lanes ? 32 : (31 - ((log(lanes) / LN2) | 0)) | 0;\n}\nvar currentUpdatePriority = 0;\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 1 < lanes\n ? 4 < lanes\n ? 0 !== (lanes & 268435455)\n ? 16\n : 536870912\n : 4\n : 1;\n}\nfunction shim() {\n throw Error(\n \"The current renderer does not support hydration. This error is likely caused by a bug in React. Please file an issue.\"\n );\n}\nvar getViewConfigForType =\n ReactNativePrivateInterface.ReactNativeViewConfigRegistry.get,\n UPDATE_SIGNAL = {},\n nextReactTag = 3;\nfunction allocateTag() {\n var tag = nextReactTag;\n 1 === tag % 10 && (tag += 2);\n nextReactTag = tag + 2;\n return tag;\n}\nfunction recursivelyUncacheFiberNode(node) {\n if (\"number\" === typeof node)\n instanceCache.delete(node), instanceProps.delete(node);\n else {\n var tag = node._nativeTag;\n instanceCache.delete(tag);\n instanceProps.delete(tag);\n node._children.forEach(recursivelyUncacheFiberNode);\n }\n}\nfunction finalizeInitialChildren(parentInstance) {\n if (0 === parentInstance._children.length) return !1;\n var nativeTags = parentInstance._children.map(function(child) {\n return \"number\" === typeof child ? child : child._nativeTag;\n });\n ReactNativePrivateInterface.UIManager.setChildren(\n parentInstance._nativeTag,\n nativeTags\n );\n return !1;\n}\nvar scheduleTimeout = setTimeout,\n cancelTimeout = clearTimeout;\nfunction describeComponentFrame(name, source, ownerName) {\n source = \"\";\n ownerName && (source = \" (created by \" + ownerName + \")\");\n return \"\\n in \" + (name || \"Unknown\") + source;\n}\nfunction describeFunctionComponentFrame(fn, source) {\n return fn\n ? describeComponentFrame(fn.displayName || fn.name || null, source, null)\n : \"\";\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar emptyContextObject = {},\n contextStackCursor = createCursor(emptyContextObject),\n didPerformWorkStackCursor = createCursor(!1),\n previousContext = emptyContextObject;\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n var contextTypes = workInProgress.type.contextTypes;\n if (!contextTypes) return emptyContextObject;\n var instance = workInProgress.stateNode;\n if (\n instance &&\n instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext\n )\n return instance.__reactInternalMemoizedMaskedChildContext;\n var context = {},\n key;\n for (key in contextTypes) context[key] = unmaskedContext[key];\n instance &&\n ((workInProgress = workInProgress.stateNode),\n (workInProgress.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext),\n (workInProgress.__reactInternalMemoizedMaskedChildContext = context));\n return context;\n}\nfunction isContextProvider(type) {\n type = type.childContextTypes;\n return null !== type && void 0 !== type;\n}\nfunction popContext() {\n pop(didPerformWorkStackCursor);\n pop(contextStackCursor);\n}\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n if (contextStackCursor.current !== emptyContextObject)\n throw Error(\n \"Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.\"\n );\n push(contextStackCursor, context);\n push(didPerformWorkStackCursor, didChange);\n}\nfunction processChildContext(fiber, type, parentContext) {\n var instance = fiber.stateNode;\n type = type.childContextTypes;\n if (\"function\" !== typeof instance.getChildContext) return parentContext;\n instance = instance.getChildContext();\n for (var contextKey in instance)\n if (!(contextKey in type))\n throw Error(\n (getComponentNameFromFiber(fiber) || \"Unknown\") +\n '.getChildContext(): key \"' +\n contextKey +\n '\" is not defined in childContextTypes.'\n );\n return Object.assign({}, parentContext, instance);\n}\nfunction pushContextProvider(workInProgress) {\n workInProgress =\n ((workInProgress = workInProgress.stateNode) &&\n workInProgress.__reactInternalMemoizedMergedChildContext) ||\n emptyContextObject;\n previousContext = contextStackCursor.current;\n push(contextStackCursor, workInProgress);\n push(didPerformWorkStackCursor, didPerformWorkStackCursor.current);\n return !0;\n}\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n var instance = workInProgress.stateNode;\n if (!instance)\n throw Error(\n \"Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.\"\n );\n didChange\n ? ((workInProgress = processChildContext(\n workInProgress,\n type,\n previousContext\n )),\n (instance.__reactInternalMemoizedMergedChildContext = workInProgress),\n pop(didPerformWorkStackCursor),\n pop(contextStackCursor),\n push(contextStackCursor, workInProgress))\n : pop(didPerformWorkStackCursor);\n push(didPerformWorkStackCursor, didChange);\n}\nvar syncQueue = null,\n includesLegacySyncCallbacks = !1,\n isFlushingSyncQueue = !1;\nfunction flushSyncCallbacks() {\n if (!isFlushingSyncQueue && null !== syncQueue) {\n isFlushingSyncQueue = !0;\n var i = 0,\n previousUpdatePriority = currentUpdatePriority;\n try {\n var queue = syncQueue;\n for (currentUpdatePriority = 1; i < queue.length; i++) {\n var callback = queue[i];\n do callback = callback(!0);\n while (null !== callback);\n }\n syncQueue = null;\n includesLegacySyncCallbacks = !1;\n } catch (error) {\n throw (null !== syncQueue && (syncQueue = syncQueue.slice(i + 1)),\n scheduleCallback(ImmediatePriority, flushSyncCallbacks),\n error);\n } finally {\n (currentUpdatePriority = previousUpdatePriority),\n (isFlushingSyncQueue = !1);\n }\n }\n return null;\n}\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig;\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++)\n if (\n !hasOwnProperty.call(objB, keysA[keysB]) ||\n !objectIs(objA[keysA[keysB]], objB[keysA[keysB]])\n )\n return !1;\n return !0;\n}\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case 5:\n return describeComponentFrame(fiber.type, null, null);\n case 16:\n return describeComponentFrame(\"Lazy\", null, null);\n case 13:\n return describeComponentFrame(\"Suspense\", null, null);\n case 19:\n return describeComponentFrame(\"SuspenseList\", null, null);\n case 0:\n case 2:\n case 15:\n return describeFunctionComponentFrame(fiber.type, null);\n case 11:\n return describeFunctionComponentFrame(fiber.type.render, null);\n case 1:\n return (fiber = describeFunctionComponentFrame(fiber.type, null)), fiber;\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\";\n do\n (info += describeFiber(workInProgress)),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nfunction resolveDefaultProps(Component, baseProps) {\n if (Component && Component.defaultProps) {\n baseProps = Object.assign({}, baseProps);\n Component = Component.defaultProps;\n for (var propName in Component)\n void 0 === baseProps[propName] &&\n (baseProps[propName] = Component[propName]);\n return baseProps;\n }\n return baseProps;\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber = null,\n lastContextDependency = null,\n lastFullyObservedContext = null;\nfunction resetContextDependencies() {\n lastFullyObservedContext = lastContextDependency = currentlyRenderingFiber = null;\n}\nfunction popProvider(context) {\n var currentValue = valueCursor.current;\n pop(valueCursor);\n context._currentValue = currentValue;\n}\nfunction scheduleWorkOnParentPath(parent, renderLanes) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n if ((parent.childLanes & renderLanes) === renderLanes)\n if (\n null === alternate ||\n (alternate.childLanes & renderLanes) === renderLanes\n )\n break;\n else alternate.childLanes |= renderLanes;\n else\n (parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes);\n parent = parent.return;\n }\n}\nfunction prepareToReadContext(workInProgress, renderLanes) {\n currentlyRenderingFiber = workInProgress;\n lastFullyObservedContext = lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress &&\n null !== workInProgress.firstContext &&\n (0 !== (workInProgress.lanes & renderLanes) && (didReceiveUpdate = !0),\n (workInProgress.firstContext = null));\n}\nfunction readContext(context) {\n var value = context._currentValue;\n if (lastFullyObservedContext !== context)\n if (\n ((context = { context: context, memoizedValue: value, next: null }),\n null === lastContextDependency)\n ) {\n if (null === currentlyRenderingFiber)\n throw Error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n lastContextDependency = context;\n currentlyRenderingFiber.dependencies = {\n lanes: 0,\n firstContext: context\n };\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar interleavedQueues = null,\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, interleaved: null, lanes: 0 },\n effects: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n effects: current.effects\n });\n}\nfunction createUpdate(eventTime, lane) {\n return {\n eventTime: eventTime,\n lane: lane,\n tag: 0,\n payload: null,\n callback: null,\n next: null\n };\n}\nfunction enqueueUpdate(fiber, update) {\n var updateQueue = fiber.updateQueue;\n null !== updateQueue &&\n ((updateQueue = updateQueue.shared),\n null !== workInProgressRoot &&\n 0 !== (fiber.mode & 1) &&\n 0 === (executionContext & 8)\n ? ((fiber = updateQueue.interleaved),\n null === fiber\n ? ((update.next = update),\n null === interleavedQueues\n ? (interleavedQueues = [updateQueue])\n : interleavedQueues.push(updateQueue))\n : ((update.next = fiber.next), (fiber.next = update)),\n (updateQueue.interleaved = update))\n : ((fiber = updateQueue.pending),\n null === fiber\n ? (update.next = update)\n : ((update.next = fiber.next), (fiber.next = update)),\n (updateQueue.pending = update)));\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194240))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n eventTime: queue.eventTime,\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: queue.callback,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n effects: current.effects\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance,\n renderLanes\n) {\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane,\n updateEventTime = pendingQueue.eventTime;\n if ((renderLanes & updateLane) === updateLane) {\n null !== current &&\n (current = current.next = {\n eventTime: updateEventTime,\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n updateEventTime = instance;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(\n updateEventTime,\n newState,\n updateLane\n );\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -16385) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(updateEventTime, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = Object.assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n null !== pendingQueue.callback &&\n 0 !== pendingQueue.lane &&\n ((workInProgress$jscomp$0.flags |= 64),\n (updateLane = queue.effects),\n null === updateLane\n ? (queue.effects = [pendingQueue])\n : updateLane.push(pendingQueue));\n } else\n (updateEventTime = {\n eventTime: updateEventTime,\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = updateEventTime),\n (lastPendingUpdate = newState))\n : (current = current.next = updateEventTime),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (updateLane = pendingQueue),\n (pendingQueue = updateLane.next),\n (updateLane.next = null),\n (queue.lastBaseUpdate = updateLane),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n props = queue.shared.interleaved;\n if (null !== props) {\n queue = props;\n do (lastBaseUpdate |= queue.lane), (queue = queue.next);\n while (queue !== props);\n } else null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance) {\n finishedWork = finishedQueue.effects;\n finishedQueue.effects = null;\n if (null !== finishedWork)\n for (\n finishedQueue = 0;\n finishedQueue < finishedWork.length;\n finishedQueue++\n ) {\n var effect = finishedWork[finishedQueue],\n callback = effect.callback;\n if (null !== callback) {\n effect.callback = null;\n if (\"function\" !== typeof callback)\n throw Error(\n \"Invalid argument passed as callback. Expected a function. Instead received: \" +\n callback\n );\n callback.call(instance);\n }\n }\n}\nvar emptyRefsObject = new React.Component().refs;\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : Object.assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n isMounted: function(component) {\n return (component = component._reactInternals)\n ? getNearestMountedFiber(component) === component\n : !1;\n },\n enqueueSetState: function(inst, payload, callback) {\n inst = inst._reactInternals;\n var eventTime = requestEventTime(),\n lane = requestUpdateLane(inst),\n update = createUpdate(eventTime, lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n enqueueUpdate(inst, update);\n payload = scheduleUpdateOnFiber(inst, lane, eventTime);\n null !== payload && entangleTransitions(payload, inst, lane);\n },\n enqueueReplaceState: function(inst, payload, callback) {\n inst = inst._reactInternals;\n var eventTime = requestEventTime(),\n lane = requestUpdateLane(inst),\n update = createUpdate(eventTime, lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n enqueueUpdate(inst, update);\n payload = scheduleUpdateOnFiber(inst, lane, eventTime);\n null !== payload && entangleTransitions(payload, inst, lane);\n },\n enqueueForceUpdate: function(inst, callback) {\n inst = inst._reactInternals;\n var eventTime = requestEventTime(),\n lane = requestUpdateLane(inst),\n update = createUpdate(eventTime, lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n enqueueUpdate(inst, update);\n callback = scheduleUpdateOnFiber(inst, lane, eventTime);\n null !== callback && entangleTransitions(callback, inst, lane);\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction constructClassInstance(workInProgress, ctor, props) {\n var isLegacyContextConsumer = !1,\n unmaskedContext = emptyContextObject;\n var context = ctor.contextType;\n \"object\" === typeof context && null !== context\n ? (context = readContext(context))\n : ((unmaskedContext = isContextProvider(ctor)\n ? previousContext\n : contextStackCursor.current),\n (isLegacyContextConsumer = ctor.contextTypes),\n (context = (isLegacyContextConsumer =\n null !== isLegacyContextConsumer && void 0 !== isLegacyContextConsumer)\n ? getMaskedContext(workInProgress, unmaskedContext)\n : emptyContextObject));\n ctor = new ctor(props, context);\n workInProgress.memoizedState =\n null !== ctor.state && void 0 !== ctor.state ? ctor.state : null;\n ctor.updater = classComponentUpdater;\n workInProgress.stateNode = ctor;\n ctor._reactInternals = workInProgress;\n isLegacyContextConsumer &&\n ((workInProgress = workInProgress.stateNode),\n (workInProgress.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext),\n (workInProgress.__reactInternalMemoizedMaskedChildContext = context));\n return ctor;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction mountClassInstance(workInProgress, ctor, newProps, renderLanes) {\n var instance = workInProgress.stateNode;\n instance.props = newProps;\n instance.state = workInProgress.memoizedState;\n instance.refs = emptyRefsObject;\n initializeUpdateQueue(workInProgress);\n var contextType = ctor.contextType;\n \"object\" === typeof contextType && null !== contextType\n ? (instance.context = readContext(contextType))\n : ((contextType = isContextProvider(ctor)\n ? previousContext\n : contextStackCursor.current),\n (instance.context = getMaskedContext(workInProgress, contextType)));\n instance.state = workInProgress.memoizedState;\n contextType = ctor.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(workInProgress, ctor, contextType, newProps),\n (instance.state = workInProgress.memoizedState));\n \"function\" === typeof ctor.getDerivedStateFromProps ||\n \"function\" === typeof instance.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof instance.componentWillMount) ||\n ((ctor = instance.state),\n \"function\" === typeof instance.componentWillMount &&\n instance.componentWillMount(),\n \"function\" === typeof instance.UNSAFE_componentWillMount &&\n instance.UNSAFE_componentWillMount(),\n ctor !== instance.state &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null),\n processUpdateQueue(workInProgress, newProps, instance, renderLanes),\n (instance.state = workInProgress.memoizedState));\n \"function\" === typeof instance.componentDidMount &&\n (workInProgress.flags |= 4);\n}\nfunction coerceRef(returnFiber, current, element) {\n returnFiber = element.ref;\n if (\n null !== returnFiber &&\n \"function\" !== typeof returnFiber &&\n \"object\" !== typeof returnFiber\n ) {\n if (element._owner) {\n element = element._owner;\n if (element) {\n if (1 !== element.tag)\n throw Error(\n \"Function components cannot have string refs. We recommend using useRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref\"\n );\n var inst = element.stateNode;\n }\n if (!inst)\n throw Error(\n \"Missing owner for string ref \" +\n returnFiber +\n \". This error is likely caused by a bug in React. Please file an issue.\"\n );\n var stringRef = \"\" + returnFiber;\n if (\n null !== current &&\n null !== current.ref &&\n \"function\" === typeof current.ref &&\n current.ref._stringRef === stringRef\n )\n return current.ref;\n current = function(value) {\n var refs = inst.refs;\n refs === emptyRefsObject && (refs = inst.refs = {});\n null === value ? delete refs[stringRef] : (refs[stringRef] = value);\n };\n current._stringRef = stringRef;\n return current;\n }\n if (\"string\" !== typeof returnFiber)\n throw Error(\n \"Expected ref to be a function, a string, an object returned by React.createRef(), or null.\"\n );\n if (!element._owner)\n throw Error(\n \"Element ref was specified as a string (\" +\n returnFiber +\n \") but no owner was set. This could happen for one of the following reasons:\\n1. You may be adding a ref to a function component\\n2. You may be adding a ref to a component that was not created inside a component's render method\\n3. You have multiple copies of React loaded\\nSee https://reactjs.org/link/refs-must-have-owner for more information.\"\n );\n }\n return returnFiber;\n}\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n}\nfunction ChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(returnFiber, currentFirstChild) {\n for (returnFiber = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? returnFiber.set(currentFirstChild.key, currentFirstChild)\n : returnFiber.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return returnFiber;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects) return lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 2), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 2;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 2);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n );\n if (null !== current && current.elementType === elementType)\n return (\n (lanes = useFiber(current, element.props)),\n (lanes.ref = coerceRef(returnFiber, current, element)),\n (lanes.return = returnFiber),\n lanes\n );\n lanes = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n lanes.ref = coerceRef(returnFiber, current, element);\n lanes.return = returnFiber;\n return lanes;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\"string\" === typeof newChild || \"number\" === typeof newChild)\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n (lanes.ref = coerceRef(returnFiber, null, newChild)),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\"string\" === typeof newChild || \"number\" === typeof newChild)\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\"string\" === typeof newChild || \"number\" === typeof newChild)\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber), resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(returnFiber, oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function(child) {\n return deleteChild(returnFiber, child);\n });\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildrenIterable,\n lanes\n ) {\n var iteratorFn = getIteratorFn(newChildrenIterable);\n if (\"function\" !== typeof iteratorFn)\n throw Error(\n \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\"\n );\n newChildrenIterable = iteratorFn.call(newChildrenIterable);\n if (null == newChildrenIterable)\n throw Error(\"An iterable object provided no iterator.\");\n for (\n var previousNewFiber = (iteratorFn = null),\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildrenIterable.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildrenIterable.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (iteratorFn = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return deleteRemainingChildren(returnFiber, oldFiber), iteratorFn;\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildrenIterable.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (iteratorFn = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n return iteratorFn;\n }\n for (\n oldFiber = mapRemainingChildren(returnFiber, oldFiber);\n !step.done;\n newIdx++, step = newChildrenIterable.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n null !== step.alternate &&\n oldFiber.delete(null === step.key ? newIdx : step.key),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (iteratorFn = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function(child) {\n return deleteChild(returnFiber, child);\n });\n return iteratorFn;\n }\n return function(returnFiber, currentFirstChild, newChild, lanes) {\n var isUnkeyedTopLevelFragment =\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key;\n isUnkeyedTopLevelFragment && (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n var key = newChild.key;\n for (\n isUnkeyedTopLevelFragment = currentFirstChild;\n null !== isUnkeyedTopLevelFragment;\n\n ) {\n if (isUnkeyedTopLevelFragment.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === isUnkeyedTopLevelFragment.tag) {\n deleteRemainingChildren(\n returnFiber,\n isUnkeyedTopLevelFragment.sibling\n );\n currentFirstChild = useFiber(\n isUnkeyedTopLevelFragment,\n newChild.props.children\n );\n currentFirstChild.return = returnFiber;\n returnFiber = currentFirstChild;\n break a;\n }\n } else if (isUnkeyedTopLevelFragment.elementType === key) {\n deleteRemainingChildren(\n returnFiber,\n isUnkeyedTopLevelFragment.sibling\n );\n currentFirstChild = useFiber(\n isUnkeyedTopLevelFragment,\n newChild.props\n );\n currentFirstChild.ref = coerceRef(\n returnFiber,\n isUnkeyedTopLevelFragment,\n newChild\n );\n currentFirstChild.return = returnFiber;\n returnFiber = currentFirstChild;\n break a;\n }\n deleteRemainingChildren(returnFiber, isUnkeyedTopLevelFragment);\n break;\n } else deleteChild(returnFiber, isUnkeyedTopLevelFragment);\n isUnkeyedTopLevelFragment = isUnkeyedTopLevelFragment.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((currentFirstChild = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (currentFirstChild.return = returnFiber),\n (returnFiber = currentFirstChild))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n (lanes.ref = coerceRef(\n returnFiber,\n currentFirstChild,\n newChild\n )),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (\n isUnkeyedTopLevelFragment = newChild.key;\n null !== currentFirstChild;\n\n ) {\n if (currentFirstChild.key === isUnkeyedTopLevelFragment)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n currentFirstChild = useFiber(\n currentFirstChild,\n newChild.children || []\n );\n currentFirstChild.return = returnFiber;\n returnFiber = currentFirstChild;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n currentFirstChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n );\n currentFirstChild.return = returnFiber;\n returnFiber = currentFirstChild;\n }\n return placeSingleChild(returnFiber);\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild))\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n if (\"string\" === typeof newChild || \"number\" === typeof newChild)\n return (\n (newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (currentFirstChild = useFiber(currentFirstChild, newChild)),\n (currentFirstChild.return = returnFiber),\n (returnFiber = currentFirstChild))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (currentFirstChild = createFiberFromText(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (currentFirstChild.return = returnFiber),\n (returnFiber = currentFirstChild)),\n placeSingleChild(returnFiber)\n );\n if (\"undefined\" === typeof newChild && !isUnkeyedTopLevelFragment)\n switch (returnFiber.tag) {\n case 1:\n case 0:\n case 11:\n case 15:\n throw Error(\n (getComponentNameFromFiber(returnFiber) || \"Component\") +\n \"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.\"\n );\n }\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n };\n}\nvar reconcileChildFibers = ChildReconciler(!0),\n mountChildFibers = ChildReconciler(!1),\n NO_CONTEXT = {},\n contextStackCursor$1 = createCursor(NO_CONTEXT),\n contextFiberStackCursor = createCursor(NO_CONTEXT),\n rootInstanceStackCursor = createCursor(NO_CONTEXT);\nfunction requiredContext(c) {\n if (c === NO_CONTEXT)\n throw Error(\n \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\"\n );\n return c;\n}\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor$1, NO_CONTEXT);\n pop(contextStackCursor$1);\n push(contextStackCursor$1, { isInAParentText: !1 });\n}\nfunction popHostContainer() {\n pop(contextStackCursor$1);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n requiredContext(rootInstanceStackCursor.current);\n var context = requiredContext(contextStackCursor$1.current);\n var JSCompiler_inline_result = fiber.type;\n JSCompiler_inline_result =\n \"AndroidTextInput\" === JSCompiler_inline_result ||\n \"RCTMultilineTextInputView\" === JSCompiler_inline_result ||\n \"RCTSinglelineTextInputView\" === JSCompiler_inline_result ||\n \"RCTText\" === JSCompiler_inline_result ||\n \"RCTVirtualText\" === JSCompiler_inline_result;\n JSCompiler_inline_result =\n context.isInAParentText !== JSCompiler_inline_result\n ? { isInAParentText: JSCompiler_inline_result }\n : context;\n context !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor$1, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor$1), pop(contextFiberStackCursor));\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (null !== state && (null === state.dehydrated || shim() || shim()))\n return node;\n } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar workInProgressSources = [];\nfunction resetWorkInProgressVersions() {\n for (var i = 0; i < workInProgressSources.length; i++)\n workInProgressSources[i]._workInProgressVersionPrimary = null;\n workInProgressSources.length = 0;\n}\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig,\n renderLanes = 0,\n currentlyRenderingFiber$1 = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\nfunction throwInvalidHookError() {\n throw Error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber$1 = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactCurrentDispatcher$1.current =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n current = Component(props, secondArg);\n if (didScheduleRenderPhaseUpdateDuringThisPass) {\n nextRenderLanes = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (!(25 > nextRenderLanes))\n throw Error(\n \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\"\n );\n nextRenderLanes += 1;\n workInProgressHook = currentHook = null;\n workInProgress.updateQueue = null;\n ReactCurrentDispatcher$1.current = HooksDispatcherOnRerender;\n current = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n }\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n workInProgress = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber$1 = null;\n didScheduleRenderPhaseUpdate = !1;\n if (workInProgress)\n throw Error(\n \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\"\n );\n return current;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber$1.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber$1.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook)\n throw Error(\"Rendered more hooks than during the previous render.\");\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber$1.memoizedState = workInProgressHook = nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. This is likely a bug in React. Please file an issue.\"\n );\n queue.lastRenderedReducer = reducer;\n var current = currentHook,\n baseQueue = current.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n if (null !== baseQueue) {\n pendingQueue = baseQueue.next;\n current = current.baseState;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = pendingQueue;\n do {\n var updateLane = update.lane;\n if ((renderLanes & updateLane) === updateLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next = {\n lane: 0,\n action: update.action,\n eagerReducer: update.eagerReducer,\n eagerState: update.eagerState,\n next: null\n }),\n (current =\n update.eagerReducer === reducer\n ? update.eagerState\n : reducer(current, update.action));\n else {\n var clone = {\n lane: updateLane,\n action: update.action,\n eagerReducer: update.eagerReducer,\n eagerState: update.eagerState,\n next: null\n };\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = clone),\n (baseFirst = current))\n : (newBaseQueueLast = newBaseQueueLast.next = clone);\n currentlyRenderingFiber$1.lanes |= updateLane;\n workInProgressRootSkippedLanes |= updateLane;\n }\n update = update.next;\n } while (null !== update && update !== pendingQueue);\n null === newBaseQueueLast\n ? (baseFirst = current)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n objectIs(current, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = current;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = current;\n }\n reducer = queue.interleaved;\n if (null !== reducer) {\n baseQueue = reducer;\n do\n (pendingQueue = baseQueue.lane),\n (currentlyRenderingFiber$1.lanes |= pendingQueue),\n (workInProgressRootSkippedLanes |= pendingQueue),\n (baseQueue = baseQueue.next);\n while (baseQueue !== reducer);\n } else null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. This is likely a bug in React. Please file an issue.\"\n );\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction readFromUnsubcribedMutableSource(root, source, getSnapshot) {\n var getVersion = source._getVersion;\n getVersion = getVersion(source._source);\n var JSCompiler_inline_result = source._workInProgressVersionPrimary;\n if (null !== JSCompiler_inline_result)\n root = JSCompiler_inline_result === getVersion;\n else if (\n ((root = root.mutableReadLanes), (root = (renderLanes & root) === root))\n )\n (source._workInProgressVersionPrimary = getVersion),\n workInProgressSources.push(source);\n if (root) return getSnapshot(source._source);\n workInProgressSources.push(source);\n throw Error(\n \"Cannot read from mutable source during the current render without tearing. This may be a bug in React. Please file an issue.\"\n );\n}\nfunction useMutableSource(hook, source, getSnapshot, subscribe) {\n var root = workInProgressRoot;\n if (null === root)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n var getVersion = source._getVersion,\n version = getVersion(source._source),\n dispatcher = ReactCurrentDispatcher$1.current,\n _dispatcher$useState = dispatcher.useState(function() {\n return readFromUnsubcribedMutableSource(root, source, getSnapshot);\n }),\n setSnapshot = _dispatcher$useState[1],\n snapshot = _dispatcher$useState[0];\n _dispatcher$useState = workInProgressHook;\n var memoizedState = hook.memoizedState,\n refs = memoizedState.refs,\n prevGetSnapshot = refs.getSnapshot,\n prevSource = memoizedState.source;\n memoizedState = memoizedState.subscribe;\n var fiber = currentlyRenderingFiber$1;\n hook.memoizedState = { refs: refs, source: source, subscribe: subscribe };\n dispatcher.useEffect(\n function() {\n refs.getSnapshot = getSnapshot;\n refs.setSnapshot = setSnapshot;\n var maybeNewVersion = getVersion(source._source);\n objectIs(version, maybeNewVersion) ||\n ((maybeNewVersion = getSnapshot(source._source)),\n objectIs(snapshot, maybeNewVersion) ||\n (setSnapshot(maybeNewVersion),\n (maybeNewVersion = requestUpdateLane(fiber)),\n (root.mutableReadLanes |= maybeNewVersion & root.pendingLanes)),\n markRootEntangled(root, root.mutableReadLanes));\n },\n [getSnapshot, source, subscribe]\n );\n dispatcher.useEffect(\n function() {\n return subscribe(source._source, function() {\n var latestGetSnapshot = refs.getSnapshot,\n latestSetSnapshot = refs.setSnapshot;\n try {\n latestSetSnapshot(latestGetSnapshot(source._source));\n var lane = requestUpdateLane(fiber);\n root.mutableReadLanes |= lane & root.pendingLanes;\n } catch (error) {\n latestSetSnapshot(function() {\n throw error;\n });\n }\n });\n },\n [source, subscribe]\n );\n (objectIs(prevGetSnapshot, getSnapshot) &&\n objectIs(prevSource, source) &&\n objectIs(memoizedState, subscribe)) ||\n ((hook = {\n pending: null,\n interleaved: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: snapshot\n }),\n (hook.dispatch = setSnapshot = dispatchAction.bind(\n null,\n currentlyRenderingFiber$1,\n hook\n )),\n (_dispatcher$useState.queue = hook),\n (_dispatcher$useState.baseQueue = null),\n (snapshot = readFromUnsubcribedMutableSource(root, source, getSnapshot)),\n (_dispatcher$useState.memoizedState = _dispatcher$useState.baseState = snapshot));\n return snapshot;\n}\nfunction updateMutableSource(source, getSnapshot, subscribe) {\n var hook = updateWorkInProgressHook();\n return useMutableSource(hook, source, getSnapshot, subscribe);\n}\nfunction mountState(initialState) {\n var hook = mountWorkInProgressHook();\n \"function\" === typeof initialState && (initialState = initialState());\n hook.memoizedState = hook.baseState = initialState;\n initialState = hook.queue = {\n pending: null,\n interleaved: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n initialState = initialState.dispatch = dispatchAction.bind(\n null,\n currentlyRenderingFiber$1,\n initialState\n );\n return [hook.memoizedState, initialState];\n}\nfunction pushEffect(tag, create, destroy, deps) {\n tag = { tag: tag, create: create, destroy: destroy, deps: deps, next: null };\n create = currentlyRenderingFiber$1.updateQueue;\n null === create\n ? ((create = { lastEffect: null }),\n (currentlyRenderingFiber$1.updateQueue = create),\n (create.lastEffect = tag.next = tag))\n : ((destroy = create.lastEffect),\n null === destroy\n ? (create.lastEffect = tag.next = tag)\n : ((deps = destroy.next),\n (destroy.next = tag),\n (tag.next = deps),\n (create.lastEffect = tag)));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(\n 1 | hookFlags,\n create,\n void 0,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var destroy = void 0;\n if (null !== currentHook) {\n var prevEffect = currentHook.memoizedState;\n destroy = prevEffect.destroy;\n if (null !== deps && areHookInputsEqual(deps, prevEffect.deps)) {\n hook.memoizedState = pushEffect(hookFlags, create, destroy, deps);\n return;\n }\n }\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(1 | hookFlags, create, destroy, deps);\n}\nfunction mountEffect(create, deps) {\n return mountEffectImpl(1049600, 4, create, deps);\n}\nfunction updateEffect(create, deps) {\n return updateEffectImpl(1024, 4, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref)\n return (\n (create = create()),\n ref(create),\n function() {\n ref(null);\n }\n );\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function() {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n return updateEffectImpl(\n 4,\n 2,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (\n null !== prevState &&\n null !== deps &&\n areHookInputsEqual(deps, prevState[1])\n )\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (\n null !== prevState &&\n null !== deps &&\n areHookInputsEqual(deps, prevState[1])\n )\n return prevState[0];\n nextCreate = nextCreate();\n hook.memoizedState = [nextCreate, deps];\n return nextCreate;\n}\nfunction startTransition(setPending, callback) {\n var previousPriority = currentUpdatePriority;\n currentUpdatePriority =\n 0 !== previousPriority && 4 > previousPriority ? previousPriority : 4;\n setPending(!0);\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = 1;\n try {\n setPending(!1), callback();\n } finally {\n (currentUpdatePriority = previousPriority),\n (ReactCurrentBatchConfig$1.transition = prevTransition);\n }\n}\nfunction dispatchAction(fiber, queue, action) {\n var eventTime = requestEventTime(),\n lane = requestUpdateLane(fiber),\n update = {\n lane: lane,\n action: action,\n eagerReducer: null,\n eagerState: null,\n next: null\n },\n alternate = fiber.alternate;\n if (\n fiber === currentlyRenderingFiber$1 ||\n (null !== alternate && alternate === currentlyRenderingFiber$1)\n )\n (didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = !0),\n (lane = queue.pending),\n null === lane\n ? (update.next = update)\n : ((update.next = lane.next), (lane.next = update)),\n (queue.pending = update);\n else {\n if (\n null !== workInProgressRoot &&\n 0 !== (fiber.mode & 1) &&\n 0 === (executionContext & 8)\n ) {\n var interleaved = queue.interleaved;\n null === interleaved\n ? ((update.next = update),\n null === interleavedQueues\n ? (interleavedQueues = [queue])\n : interleavedQueues.push(queue))\n : ((update.next = interleaved.next), (interleaved.next = update));\n queue.interleaved = update;\n } else\n (interleaved = queue.pending),\n null === interleaved\n ? (update.next = update)\n : ((update.next = interleaved.next), (interleaved.next = update)),\n (queue.pending = update);\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.eagerReducer = alternate;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState)) return;\n } catch (error) {\n } finally {\n }\n update = scheduleUpdateOnFiber(fiber, lane, eventTime);\n 0 !== (lane & 4194240) &&\n null !== update &&\n ((fiber = queue.lanes),\n (fiber &= update.pendingLanes),\n (lane |= fiber),\n (queue.lanes = lane),\n markRootEntangled(update, lane));\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useMutableSource: throwInvalidHookError,\n useOpaqueIdentifier: throwInvalidHookError,\n unstable_isNewReconciler: !1\n },\n HooksDispatcherOnMount = {\n readContext: readContext,\n useCallback: function(callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n return mountEffectImpl(\n 4,\n 2,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function(create, deps) {\n return mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n nextCreate = nextCreate();\n hook.memoizedState = [nextCreate, deps];\n return nextCreate;\n },\n useReducer: function(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n initialArg = void 0 !== init ? init(initialArg) : initialArg;\n hook.memoizedState = hook.baseState = initialArg;\n reducer = hook.queue = {\n pending: null,\n interleaved: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialArg\n };\n reducer = reducer.dispatch = dispatchAction.bind(\n null,\n currentlyRenderingFiber$1,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function(initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: mountState,\n useDebugValue: mountDebugValue,\n useDeferredValue: function(value) {\n var _mountState = mountState(value),\n prevValue = _mountState[0],\n setValue = _mountState[1];\n mountEffect(\n function() {\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = 1;\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.transition = prevTransition;\n }\n },\n [value]\n );\n return prevValue;\n },\n useTransition: function() {\n var _mountState2 = mountState(!1),\n isPending = _mountState2[0];\n _mountState2 = startTransition.bind(null, _mountState2[1]);\n mountWorkInProgressHook().memoizedState = _mountState2;\n return [isPending, _mountState2];\n },\n useMutableSource: function(source, getSnapshot, subscribe) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = {\n refs: { getSnapshot: getSnapshot, setSnapshot: null },\n source: source,\n subscribe: subscribe\n };\n return useMutableSource(hook, source, getSnapshot, subscribe);\n },\n useOpaqueIdentifier: function() {\n throw Error(\"Not yet implemented\");\n },\n unstable_isNewReconciler: !1\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function() {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function(value) {\n var _updateState = updateReducer(basicStateReducer),\n prevValue = _updateState[0],\n setValue = _updateState[1];\n updateEffect(\n function() {\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = 1;\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.transition = prevTransition;\n }\n },\n [value]\n );\n return prevValue;\n },\n useTransition: function() {\n var isPending = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [isPending, start];\n },\n useMutableSource: updateMutableSource,\n useOpaqueIdentifier: function() {\n return updateReducer(basicStateReducer)[0];\n },\n unstable_isNewReconciler: !1\n },\n HooksDispatcherOnRerender = {\n readContext: readContext,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function() {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function(value) {\n var _rerenderState = rerenderReducer(basicStateReducer),\n prevValue = _rerenderState[0],\n setValue = _rerenderState[1];\n updateEffect(\n function() {\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = 1;\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.transition = prevTransition;\n }\n },\n [value]\n );\n return prevValue;\n },\n useTransition: function() {\n var isPending = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [isPending, start];\n },\n useMutableSource: updateMutableSource,\n useOpaqueIdentifier: function() {\n return rerenderReducer(basicStateReducer)[0];\n },\n unstable_isNewReconciler: !1\n };\nfunction createCapturedValue(value, source) {\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nif (\n \"function\" !==\n typeof ReactNativePrivateInterface.ReactFiberErrorDialog.showErrorDialog\n)\n throw Error(\n \"Expected ReactFiberErrorDialog.showErrorDialog to be a function.\"\n );\nfunction logCapturedError(boundary, errorInfo) {\n try {\n !1 !==\n ReactNativePrivateInterface.ReactFiberErrorDialog.showErrorDialog({\n componentStack: null !== errorInfo.stack ? errorInfo.stack : \"\",\n error: errorInfo.value,\n errorBoundary:\n null !== boundary && 1 === boundary.tag ? boundary.stateNode : null\n }) && console.error(errorInfo.value);\n } catch (e) {\n setTimeout(function() {\n throw e;\n });\n }\n}\nvar PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map;\nfunction createRootErrorUpdate(fiber, errorInfo, lane) {\n lane = createUpdate(-1, lane);\n lane.tag = 3;\n lane.payload = { element: null };\n var error = errorInfo.value;\n lane.callback = function() {\n hasUncaughtError || ((hasUncaughtError = !0), (firstUncaughtError = error));\n logCapturedError(fiber, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(fiber, errorInfo, lane) {\n lane = createUpdate(-1, lane);\n lane.tag = 3;\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n lane.payload = function() {\n logCapturedError(fiber, errorInfo);\n return getDerivedStateFromError(error);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (lane.callback = function() {\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this),\n logCapturedError(fiber, errorInfo));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n return lane;\n}\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner,\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n prepareToReadContext(workInProgress, renderLanes);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n ref,\n renderLanes\n );\n if (null !== current && !didReceiveUpdate)\n return (\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.flags &= -1029),\n (current.lanes &= ~renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n updateLanes,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare &&\n void 0 === Component.defaultProps\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n updateLanes,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (\n 0 === (updateLanes & renderLanes) &&\n ((updateLanes = type.memoizedProps),\n (Component = Component.compare),\n (Component = null !== Component ? Component : shallowEqual),\n Component(updateLanes, nextProps) && current.ref === workInProgress.ref)\n )\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n updateLanes,\n renderLanes\n) {\n if (\n null !== current &&\n shallowEqual(current.memoizedProps, nextProps) &&\n current.ref === workInProgress.ref\n ) {\n didReceiveUpdate = !1;\n if (0 === (renderLanes & updateLanes))\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n 0 !== (current.flags & 32768) && (didReceiveUpdate = !0);\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n if (\n \"hidden\" === nextProps.mode ||\n \"unstable-defer-without-hiding\" === nextProps.mode\n )\n if (0 === (workInProgress.mode & 1))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n push(subtreeRenderLanesCursor, subtreeRenderLanes),\n (subtreeRenderLanes |= renderLanes);\n else {\n if (0 === (renderLanes & 1073741824))\n return (\n (current =\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes),\n (workInProgress.lanes = workInProgress.childLanes = 1073741824),\n (workInProgress.memoizedState = {\n baseLanes: current,\n cachePool: null\n }),\n (workInProgress.updateQueue = null),\n push(subtreeRenderLanesCursor, subtreeRenderLanes),\n (subtreeRenderLanes |= current),\n null\n );\n workInProgress.memoizedState = { baseLanes: 0, cachePool: null };\n nextProps = null !== prevState ? prevState.baseLanes : renderLanes;\n push(subtreeRenderLanesCursor, subtreeRenderLanes);\n subtreeRenderLanes |= nextProps;\n }\n else\n null !== prevState\n ? ((nextProps = prevState.baseLanes | renderLanes),\n (workInProgress.memoizedState = null))\n : (nextProps = renderLanes),\n push(subtreeRenderLanesCursor, subtreeRenderLanes),\n (subtreeRenderLanes |= nextProps);\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (\n (null === current && null !== ref) ||\n (null !== current && current.ref !== ref)\n )\n workInProgress.flags |= 256;\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n var context = isContextProvider(Component)\n ? previousContext\n : contextStackCursor.current;\n context = getMaskedContext(workInProgress, context);\n prepareToReadContext(workInProgress, renderLanes);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n context,\n renderLanes\n );\n if (null !== current && !didReceiveUpdate)\n return (\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.flags &= -1029),\n (current.lanes &= ~renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (isContextProvider(Component)) {\n var hasContext = !0;\n pushContextProvider(workInProgress);\n } else hasContext = !1;\n prepareToReadContext(workInProgress, renderLanes);\n if (null === workInProgress.stateNode)\n null !== current &&\n ((current.alternate = null),\n (workInProgress.alternate = null),\n (workInProgress.flags |= 2)),\n constructClassInstance(workInProgress, Component, nextProps),\n mountClassInstance(workInProgress, Component, nextProps, renderLanes),\n (nextProps = !0);\n else if (null === current) {\n var instance = workInProgress.stateNode,\n oldProps = workInProgress.memoizedProps;\n instance.props = oldProps;\n var oldContext = instance.context,\n contextType = Component.contextType;\n \"object\" === typeof contextType && null !== contextType\n ? (contextType = readContext(contextType))\n : ((contextType = isContextProvider(Component)\n ? previousContext\n : contextStackCursor.current),\n (contextType = getMaskedContext(workInProgress, contextType)));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps,\n hasNewLifecycles =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof instance.getSnapshotBeforeUpdate;\n hasNewLifecycles ||\n (\"function\" !== typeof instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof instance.componentWillReceiveProps) ||\n ((oldProps !== nextProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n instance,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, instance, renderLanes);\n oldContext = workInProgress.memoizedState;\n oldProps !== nextProps ||\n oldState !== oldContext ||\n didPerformWorkStackCursor.current ||\n hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (hasNewLifecycles ||\n (\"function\" !== typeof instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof instance.componentWillMount) ||\n (\"function\" === typeof instance.componentWillMount &&\n instance.componentWillMount(),\n \"function\" === typeof instance.UNSAFE_componentWillMount &&\n instance.UNSAFE_componentWillMount()),\n \"function\" === typeof instance.componentDidMount &&\n (workInProgress.flags |= 4))\n : (\"function\" === typeof instance.componentDidMount &&\n (workInProgress.flags |= 4),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (instance.props = nextProps),\n (instance.state = oldContext),\n (instance.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof instance.componentDidMount &&\n (workInProgress.flags |= 4),\n (nextProps = !1));\n } else {\n instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n oldProps = workInProgress.memoizedProps;\n contextType =\n workInProgress.type === workInProgress.elementType\n ? oldProps\n : resolveDefaultProps(workInProgress.type, oldProps);\n instance.props = contextType;\n hasNewLifecycles = workInProgress.pendingProps;\n oldState = instance.context;\n oldContext = Component.contextType;\n \"object\" === typeof oldContext && null !== oldContext\n ? (oldContext = readContext(oldContext))\n : ((oldContext = isContextProvider(Component)\n ? previousContext\n : contextStackCursor.current),\n (oldContext = getMaskedContext(workInProgress, oldContext)));\n var getDerivedStateFromProps$jscomp$0 = Component.getDerivedStateFromProps;\n (getDerivedStateFromProps =\n \"function\" === typeof getDerivedStateFromProps$jscomp$0 ||\n \"function\" === typeof instance.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof instance.componentWillReceiveProps) ||\n ((oldProps !== hasNewLifecycles || oldState !== oldContext) &&\n callComponentWillReceiveProps(\n workInProgress,\n instance,\n nextProps,\n oldContext\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, instance, renderLanes);\n var newState = workInProgress.memoizedState;\n oldProps !== hasNewLifecycles ||\n oldState !== newState ||\n didPerformWorkStackCursor.current ||\n hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps$jscomp$0 &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps$jscomp$0,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType,\n nextProps,\n oldState,\n newState,\n oldContext\n ) ||\n !1)\n ? (getDerivedStateFromProps ||\n (\"function\" !== typeof instance.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof instance.componentWillUpdate) ||\n (\"function\" === typeof instance.componentWillUpdate &&\n instance.componentWillUpdate(nextProps, newState, oldContext),\n \"function\" === typeof instance.UNSAFE_componentWillUpdate &&\n instance.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldContext\n )),\n \"function\" === typeof instance.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof instance.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 512))\n : (\"function\" !== typeof instance.componentDidUpdate ||\n (oldProps === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof instance.getSnapshotBeforeUpdate ||\n (oldProps === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 512),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (instance.props = nextProps),\n (instance.state = newState),\n (instance.context = oldContext),\n (nextProps = contextType))\n : (\"function\" !== typeof instance.componentDidUpdate ||\n (oldProps === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof instance.getSnapshotBeforeUpdate ||\n (oldProps === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 512),\n (nextProps = !1));\n }\n return finishClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n hasContext,\n renderLanes\n );\n}\nfunction finishClassComponent(\n current,\n workInProgress,\n Component,\n shouldUpdate,\n hasContext,\n renderLanes\n) {\n markRef(current, workInProgress);\n var didCaptureError = 0 !== (workInProgress.flags & 128);\n if (!shouldUpdate && !didCaptureError)\n return (\n hasContext && invalidateContextProvider(workInProgress, Component, !1),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n shouldUpdate = workInProgress.stateNode;\n ReactCurrentOwner$1.current = workInProgress;\n var nextChildren =\n didCaptureError && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : shouldUpdate.render();\n workInProgress.flags |= 1;\n null !== current && didCaptureError\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n nextChildren,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n workInProgress.memoizedState = shouldUpdate.state;\n hasContext && invalidateContextProvider(workInProgress, Component, !0);\n return workInProgress.child;\n}\nfunction pushHostRootContext(workInProgress) {\n var root = workInProgress.stateNode;\n root.pendingContext\n ? pushTopLevelContextObject(\n workInProgress,\n root.pendingContext,\n root.pendingContext !== root.context\n )\n : root.context &&\n pushTopLevelContextObject(workInProgress, root.context, !1);\n pushHostContainer(workInProgress, root.containerInfo);\n}\nvar SUSPENDED_MARKER = { dehydrated: null, retryLane: 0 };\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: null };\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n suspenseContext = suspenseStackCursor.current,\n showFallback = !1,\n JSCompiler_temp;\n (JSCompiler_temp = 0 !== (workInProgress.flags & 128)) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseContext & 2));\n JSCompiler_temp\n ? ((showFallback = !0), (workInProgress.flags &= -129))\n : (null !== current && null === current.memoizedState) ||\n void 0 === nextProps.fallback ||\n !0 === nextProps.unstable_avoidThisFallback ||\n (suspenseContext |= 1);\n push(suspenseStackCursor, suspenseContext & 1);\n if (null === current) {\n current = nextProps.children;\n suspenseContext = nextProps.fallback;\n if (showFallback)\n return (\n (current = mountSuspenseFallbackChildren(\n workInProgress,\n current,\n suspenseContext,\n renderLanes\n )),\n (workInProgress.child.memoizedState = mountSuspenseOffscreenState(\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n current\n );\n if (\"number\" === typeof nextProps.unstable_expectedLoadTime)\n return (\n (current = mountSuspenseFallbackChildren(\n workInProgress,\n current,\n suspenseContext,\n renderLanes\n )),\n (workInProgress.child.memoizedState = mountSuspenseOffscreenState(\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress.lanes = 4194304),\n current\n );\n renderLanes = createFiberFromOffscreen(\n { mode: \"visible\", children: current },\n workInProgress.mode,\n renderLanes,\n null\n );\n renderLanes.return = workInProgress;\n return (workInProgress.child = renderLanes);\n }\n if (null !== current.memoizedState) {\n if (showFallback)\n return (\n (nextProps = updateSuspenseFallbackChildren(\n current,\n workInProgress,\n nextProps.children,\n nextProps.fallback,\n renderLanes\n )),\n (showFallback = workInProgress.child),\n (suspenseContext = current.child.memoizedState),\n (showFallback.memoizedState =\n null === suspenseContext\n ? mountSuspenseOffscreenState(renderLanes)\n : {\n baseLanes: suspenseContext.baseLanes | renderLanes,\n cachePool: null\n }),\n (showFallback.childLanes = current.childLanes & ~renderLanes),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n nextProps\n );\n renderLanes = updateSuspensePrimaryChildren(\n current,\n workInProgress,\n nextProps.children,\n renderLanes\n );\n workInProgress.memoizedState = null;\n return renderLanes;\n }\n if (showFallback)\n return (\n (nextProps = updateSuspenseFallbackChildren(\n current,\n workInProgress,\n nextProps.children,\n nextProps.fallback,\n renderLanes\n )),\n (showFallback = workInProgress.child),\n (suspenseContext = current.child.memoizedState),\n (showFallback.memoizedState =\n null === suspenseContext\n ? mountSuspenseOffscreenState(renderLanes)\n : {\n baseLanes: suspenseContext.baseLanes | renderLanes,\n cachePool: null\n }),\n (showFallback.childLanes = current.childLanes & ~renderLanes),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n nextProps\n );\n renderLanes = updateSuspensePrimaryChildren(\n current,\n workInProgress,\n nextProps.children,\n renderLanes\n );\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspenseFallbackChildren(\n workInProgress,\n primaryChildren,\n fallbackChildren,\n renderLanes\n) {\n var mode = workInProgress.mode,\n progressedPrimaryFragment = workInProgress.child;\n primaryChildren = { mode: \"hidden\", children: primaryChildren };\n 0 === (mode & 1) && null !== progressedPrimaryFragment\n ? ((progressedPrimaryFragment.childLanes = 0),\n (progressedPrimaryFragment.pendingProps = primaryChildren))\n : (progressedPrimaryFragment = createFiberFromOffscreen(\n primaryChildren,\n mode,\n 0,\n null\n ));\n fallbackChildren = createFiberFromFragment(\n fallbackChildren,\n mode,\n renderLanes,\n null\n );\n progressedPrimaryFragment.return = workInProgress;\n fallbackChildren.return = workInProgress;\n progressedPrimaryFragment.sibling = fallbackChildren;\n workInProgress.child = progressedPrimaryFragment;\n return fallbackChildren;\n}\nfunction updateSuspensePrimaryChildren(\n current,\n workInProgress,\n primaryChildren,\n renderLanes\n) {\n var currentPrimaryChildFragment = current.child;\n current = currentPrimaryChildFragment.sibling;\n primaryChildren = createWorkInProgress(currentPrimaryChildFragment, {\n mode: \"visible\",\n children: primaryChildren\n });\n 0 === (workInProgress.mode & 1) && (primaryChildren.lanes = renderLanes);\n primaryChildren.return = workInProgress;\n primaryChildren.sibling = null;\n null !== current &&\n ((renderLanes = workInProgress.deletions),\n null === renderLanes\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : renderLanes.push(current));\n return (workInProgress.child = primaryChildren);\n}\nfunction updateSuspenseFallbackChildren(\n current,\n workInProgress,\n primaryChildren,\n fallbackChildren,\n renderLanes\n) {\n var mode = workInProgress.mode;\n current = current.child;\n var currentFallbackChildFragment = current.sibling,\n primaryChildProps = { mode: \"hidden\", children: primaryChildren };\n 0 === (mode & 1) && workInProgress.child !== current\n ? ((primaryChildren = workInProgress.child),\n (primaryChildren.childLanes = 0),\n (primaryChildren.pendingProps = primaryChildProps),\n (workInProgress.deletions = null))\n : ((primaryChildren = createWorkInProgress(current, primaryChildProps)),\n (primaryChildren.subtreeFlags = current.subtreeFlags & 1835008));\n null !== currentFallbackChildFragment\n ? (fallbackChildren = createWorkInProgress(\n currentFallbackChildFragment,\n fallbackChildren\n ))\n : ((fallbackChildren = createFiberFromFragment(\n fallbackChildren,\n mode,\n renderLanes,\n null\n )),\n (fallbackChildren.flags |= 2));\n fallbackChildren.return = workInProgress;\n primaryChildren.return = workInProgress;\n primaryChildren.sibling = fallbackChildren;\n workInProgress.child = primaryChildren;\n return fallbackChildren;\n}\nfunction scheduleWorkOnFiber(fiber, renderLanes) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleWorkOnParentPath(fiber.return, renderLanes);\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n nextProps = suspenseStackCursor.current;\n if (0 !== (nextProps & 2))\n (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n else {\n if (null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleWorkOnFiber(current, renderLanes);\n else if (19 === current.tag) scheduleWorkOnFiber(current, renderLanes);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n nextProps &= 1;\n }\n push(suspenseStackCursor, nextProps);\n if (0 === (workInProgress.mode & 1)) workInProgress.memoizedState = null;\n else\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode\n );\n break;\n case \"backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode\n );\n break;\n case \"together\":\n initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes)) return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(\"Resuming work not yet implemented.\");\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling = createWorkInProgress(\n current,\n current.pendingProps\n )),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nvar appendAllChildren,\n updateHostContainer,\n updateHostComponent$1,\n updateHostText$1;\nappendAllChildren = function(parent, workInProgress) {\n for (var node = workInProgress.child; null !== node; ) {\n if (5 === node.tag || 6 === node.tag) parent._children.push(node.stateNode);\n else if (4 !== node.tag && null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === workInProgress) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === workInProgress) return;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n};\nupdateHostContainer = function() {};\nupdateHostComponent$1 = function(current, workInProgress, type, newProps) {\n current.memoizedProps !== newProps &&\n (requiredContext(contextStackCursor$1.current),\n (workInProgress.updateQueue = UPDATE_SIGNAL)) &&\n (workInProgress.flags |= 4);\n};\nupdateHostText$1 = function(current, workInProgress, oldText, newText) {\n oldText !== newText && (workInProgress.flags |= 4);\n};\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var lastTailNode$69 = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (lastTailNode$69 = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === lastTailNode$69\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode$69.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$70 = completedWork.child; null !== child$70; )\n (newChildLanes |= child$70.lanes | child$70.childLanes),\n (subtreeFlags |= child$70.subtreeFlags & 1835008),\n (subtreeFlags |= child$70.flags & 1835008),\n (child$70.return = completedWork),\n (child$70 = child$70.sibling);\n else\n for (child$70 = completedWork.child; null !== child$70; )\n (newChildLanes |= child$70.lanes | child$70.childLanes),\n (subtreeFlags |= child$70.subtreeFlags),\n (subtreeFlags |= child$70.flags),\n (child$70.return = completedWork),\n (child$70 = child$70.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n switch (workInProgress.tag) {\n case 2:\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return (\n isContextProvider(workInProgress.type) && popContext(),\n bubbleProperties(workInProgress),\n null\n );\n case 3:\n return (\n (newProps = workInProgress.stateNode),\n popHostContainer(),\n pop(didPerformWorkStackCursor),\n pop(contextStackCursor),\n resetWorkInProgressVersions(),\n newProps.pendingContext &&\n ((newProps.context = newProps.pendingContext),\n (newProps.pendingContext = null)),\n (null !== current && null !== current.child) ||\n newProps.hydrate ||\n (workInProgress.flags |= 512),\n updateHostContainer(current, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 5:\n popHostContext(workInProgress);\n renderLanes = requiredContext(rootInstanceStackCursor.current);\n var type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n updateHostComponent$1(\n current,\n workInProgress,\n type,\n newProps,\n renderLanes\n ),\n current.ref !== workInProgress.ref && (workInProgress.flags |= 256);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n requiredContext(contextStackCursor$1.current);\n current = allocateTag();\n type = getViewConfigForType(type);\n var updatePayload = diffProperties(\n null,\n emptyObject,\n newProps,\n type.validAttributes\n );\n ReactNativePrivateInterface.UIManager.createView(\n current,\n type.uiViewClassName,\n renderLanes,\n updatePayload\n );\n renderLanes = new ReactNativeFiberHostComponent(\n current,\n type,\n workInProgress\n );\n instanceCache.set(current, workInProgress);\n instanceProps.set(current, newProps);\n appendAllChildren(renderLanes, workInProgress, !1, !1);\n workInProgress.stateNode = renderLanes;\n finalizeInitialChildren(renderLanes) && (workInProgress.flags |= 4);\n null !== workInProgress.ref && (workInProgress.flags |= 256);\n }\n bubbleProperties(workInProgress);\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n updateHostText$1(\n current,\n workInProgress,\n current.memoizedProps,\n newProps\n );\n else {\n if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n current = requiredContext(rootInstanceStackCursor.current);\n if (!requiredContext(contextStackCursor$1.current).isInAParentText)\n throw Error(\n \"Text strings must be rendered within a component.\"\n );\n renderLanes = allocateTag();\n ReactNativePrivateInterface.UIManager.createView(\n renderLanes,\n \"RCTRawText\",\n current,\n { text: newProps }\n );\n instanceCache.set(renderLanes, workInProgress);\n workInProgress.stateNode = renderLanes;\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n pop(suspenseStackCursor);\n newProps = workInProgress.memoizedState;\n if (0 !== (workInProgress.flags & 128))\n return (workInProgress.lanes = renderLanes), workInProgress;\n newProps = null !== newProps;\n renderLanes = !1;\n null !== current && (renderLanes = null !== current.memoizedState);\n if (newProps && !renderLanes && 0 !== (workInProgress.mode & 1))\n if (\n (null === current &&\n !0 !== workInProgress.memoizedProps.unstable_avoidThisFallback) ||\n 0 !== (suspenseStackCursor.current & 1)\n )\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3);\n else {\n if (\n 0 === workInProgressRootExitStatus ||\n 3 === workInProgressRootExitStatus\n )\n workInProgressRootExitStatus = 4;\n null === workInProgressRoot ||\n (0 === (workInProgressRootSkippedLanes & 268435455) &&\n 0 === (workInProgressRootUpdatedLanes & 268435455)) ||\n markRootSuspended$1(\n workInProgressRoot,\n workInProgressRootRenderLanes\n );\n }\n if (newProps || renderLanes) workInProgress.flags |= 4;\n bubbleProperties(workInProgress);\n return null;\n case 4:\n return (\n popHostContainer(),\n updateHostContainer(current, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type._context),\n bubbleProperties(workInProgress),\n null\n );\n case 17:\n return (\n isContextProvider(workInProgress.type) && popContext(),\n bubbleProperties(workInProgress),\n null\n );\n case 19:\n pop(suspenseStackCursor);\n type = workInProgress.memoizedState;\n if (null === type) return bubbleProperties(workInProgress), null;\n newProps = 0 !== (workInProgress.flags & 128);\n updatePayload = type.rendering;\n if (null === updatePayload)\n if (newProps) cutOffTailIfNeeded(type, !1);\n else {\n if (\n 0 !== workInProgressRootExitStatus ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n updatePayload = findFirstSuspended(current);\n if (null !== updatePayload) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(type, !1);\n current = updatePayload.updateQueue;\n null !== current &&\n ((workInProgress.updateQueue = current),\n (workInProgress.flags |= 4));\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (newProps = workInProgress.child; null !== newProps; )\n (renderLanes = newProps),\n (type = current),\n (renderLanes.flags &= 1835010),\n (updatePayload = renderLanes.alternate),\n null === updatePayload\n ? ((renderLanes.childLanes = 0),\n (renderLanes.lanes = type),\n (renderLanes.child = null),\n (renderLanes.subtreeFlags = 0),\n (renderLanes.memoizedProps = null),\n (renderLanes.memoizedState = null),\n (renderLanes.updateQueue = null),\n (renderLanes.dependencies = null),\n (renderLanes.stateNode = null))\n : ((renderLanes.childLanes = updatePayload.childLanes),\n (renderLanes.lanes = updatePayload.lanes),\n (renderLanes.child = updatePayload.child),\n (renderLanes.subtreeFlags = 0),\n (renderLanes.deletions = null),\n (renderLanes.memoizedProps =\n updatePayload.memoizedProps),\n (renderLanes.memoizedState =\n updatePayload.memoizedState),\n (renderLanes.updateQueue = updatePayload.updateQueue),\n (renderLanes.type = updatePayload.type),\n (type = updatePayload.dependencies),\n (renderLanes.dependencies =\n null === type\n ? null\n : {\n lanes: type.lanes,\n firstContext: type.firstContext\n })),\n (newProps = newProps.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current & 1) | 2\n );\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== type.tail &&\n now() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(type, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!newProps)\n if (\n ((current = findFirstSuspended(updatePayload)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (newProps = !0),\n (current = current.updateQueue),\n null !== current &&\n ((workInProgress.updateQueue = current),\n (workInProgress.flags |= 4)),\n cutOffTailIfNeeded(type, !0),\n null === type.tail &&\n \"hidden\" === type.tailMode &&\n !updatePayload.alternate)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now() - type.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 1073741824 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(type, !1),\n (workInProgress.lanes = 4194304));\n type.isBackwards\n ? ((updatePayload.sibling = workInProgress.child),\n (workInProgress.child = updatePayload))\n : ((current = type.last),\n null !== current\n ? (current.sibling = updatePayload)\n : (workInProgress.child = updatePayload),\n (type.last = updatePayload));\n }\n if (null !== type.tail)\n return (\n (workInProgress = type.tail),\n (type.rendering = workInProgress),\n (type.tail = workInProgress.sibling),\n (type.renderingStartTime = now()),\n (workInProgress.sibling = null),\n (current = suspenseStackCursor.current),\n push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n workInProgress\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popRenderLanes(),\n (renderLanes = null !== workInProgress.memoizedState),\n null !== current &&\n (null !== current.memoizedState) !== renderLanes &&\n \"unstable-defer-without-hiding\" !== newProps.mode &&\n (workInProgress.flags |= 4),\n (renderLanes &&\n 0 === (subtreeRenderLanes & 1073741824) &&\n 0 !== (workInProgress.mode & 1)) ||\n bubbleProperties(workInProgress),\n null\n );\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n}\nfunction unwindWork(workInProgress) {\n switch (workInProgress.tag) {\n case 1:\n isContextProvider(workInProgress.type) && popContext();\n var flags = workInProgress.flags;\n return flags & 16384\n ? ((workInProgress.flags = (flags & -16385) | 128), workInProgress)\n : null;\n case 3:\n popHostContainer();\n pop(didPerformWorkStackCursor);\n pop(contextStackCursor);\n resetWorkInProgressVersions();\n flags = workInProgress.flags;\n if (0 !== (flags & 128))\n throw Error(\n \"The root failed to unmount after an error. This is likely a bug in React. Please file an issue.\"\n );\n workInProgress.flags = (flags & -16385) | 128;\n return workInProgress;\n case 5:\n return popHostContext(workInProgress), null;\n case 13:\n return (\n pop(suspenseStackCursor),\n (flags = workInProgress.flags),\n flags & 16384\n ? ((workInProgress.flags = (flags & -16385) | 128), workInProgress)\n : null\n );\n case 19:\n return pop(suspenseStackCursor), null;\n case 4:\n return popHostContainer(), null;\n case 10:\n return popProvider(workInProgress.type._context), null;\n case 22:\n case 23:\n return popRenderLanes(), null;\n case 24:\n return null;\n default:\n return null;\n }\n}\nvar PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null;\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref;\n if (null !== ref)\n if (\"function\" === typeof ref)\n try {\n ref(null);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n else ref.current = null;\n}\nvar shouldFireAfterActiveInstanceBlur = !1;\nfunction commitBeforeMutationEffects(root, firstChild) {\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((root = nextEffect),\n (firstChild = root.child),\n 0 !== (root.subtreeFlags & 516) && null !== firstChild)\n )\n (firstChild.return = root), (nextEffect = firstChild);\n else\n for (; null !== nextEffect; ) {\n root = nextEffect;\n try {\n var current = root.alternate;\n if (0 !== (root.flags & 512))\n switch (root.tag) {\n case 0:\n case 11:\n case 15:\n break;\n case 1:\n if (null !== current) {\n var prevProps = current.memoizedProps,\n prevState = current.memoizedState,\n instance = root.stateNode,\n snapshot = instance.getSnapshotBeforeUpdate(\n root.elementType === root.type\n ? prevProps\n : resolveDefaultProps(root.type, prevProps),\n prevState\n );\n instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n }\n break;\n case 3:\n break;\n case 5:\n case 6:\n case 4:\n case 17:\n break;\n default:\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n } catch (error) {\n captureCommitPhaseError(root, root.return, error);\n }\n firstChild = root.sibling;\n if (null !== firstChild) {\n firstChild.return = root.return;\n nextEffect = firstChild;\n break;\n }\n nextEffect = root.return;\n }\n current = shouldFireAfterActiveInstanceBlur;\n shouldFireAfterActiveInstanceBlur = !1;\n return current;\n}\nfunction commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor$jscomp$0\n) {\n var updateQueue = finishedWork.updateQueue;\n updateQueue = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== updateQueue) {\n var effect = (updateQueue = updateQueue.next);\n do {\n if ((effect.tag & flags) === flags) {\n var destroy = effect.destroy;\n effect.destroy = void 0;\n if (void 0 !== destroy) {\n var current = finishedWork,\n nearestMountedAncestor = nearestMountedAncestor$jscomp$0;\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n }\n effect = effect.next;\n } while (effect !== updateQueue);\n }\n}\nfunction commitHookEffectListMount(tag, finishedWork) {\n finishedWork = finishedWork.updateQueue;\n finishedWork = null !== finishedWork ? finishedWork.lastEffect : null;\n if (null !== finishedWork) {\n var effect = (finishedWork = finishedWork.next);\n do {\n if ((effect.tag & tag) === tag) {\n var create$82 = effect.create;\n effect.destroy = create$82();\n }\n effect = effect.next;\n } while (effect !== finishedWork);\n }\n}\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n for (var hostSubtreeRoot = null, node = finishedWork; ; ) {\n if (5 === node.tag) {\n if (null === hostSubtreeRoot) {\n hostSubtreeRoot = node;\n var instance = node.stateNode;\n if (isHidden) {\n var viewConfig = instance.viewConfig;\n var updatePayload = diffProperties(\n null,\n emptyObject,\n { style: { display: \"none\" } },\n viewConfig.validAttributes\n );\n ReactNativePrivateInterface.UIManager.updateView(\n instance._nativeTag,\n viewConfig.uiViewClassName,\n updatePayload\n );\n } else {\n instance = node.stateNode;\n updatePayload = node.memoizedProps;\n viewConfig = instance.viewConfig;\n var prevProps = Object.assign({}, updatePayload, {\n style: [updatePayload.style, { display: \"none\" }]\n });\n updatePayload = diffProperties(\n null,\n prevProps,\n updatePayload,\n viewConfig.validAttributes\n );\n ReactNativePrivateInterface.UIManager.updateView(\n instance._nativeTag,\n viewConfig.uiViewClassName,\n updatePayload\n );\n }\n }\n } else if (6 === node.tag) {\n if (null === hostSubtreeRoot) throw Error(\"Not yet implemented.\");\n } else if (\n ((22 !== node.tag && 23 !== node.tag) ||\n null === node.memoizedState ||\n node === finishedWork) &&\n null !== node.child\n ) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return;\n hostSubtreeRoot === node && (hostSubtreeRoot = null);\n node = node.return;\n }\n hostSubtreeRoot === node && (hostSubtreeRoot = null);\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\nfunction commitUnmount(finishedRoot, current, nearestMountedAncestor$jscomp$0) {\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n try {\n injectedHook.onCommitFiberUnmount(rendererID, current);\n } catch (err) {}\n switch (current.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n finishedRoot = current.updateQueue;\n if (\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.lastEffect), null !== finishedRoot)\n ) {\n var effect = (finishedRoot = finishedRoot.next);\n do {\n var _effect = effect,\n destroy = _effect.destroy;\n _effect = _effect.tag;\n if (void 0 !== destroy && 0 !== (_effect & 2)) {\n _effect = current;\n var nearestMountedAncestor = nearestMountedAncestor$jscomp$0;\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(_effect, nearestMountedAncestor, error);\n }\n }\n effect = effect.next;\n } while (effect !== finishedRoot);\n }\n break;\n case 1:\n safelyDetachRef(current, nearestMountedAncestor$jscomp$0);\n finishedRoot = current.stateNode;\n if (\"function\" === typeof finishedRoot.componentWillUnmount)\n try {\n (finishedRoot.props = current.memoizedProps),\n (finishedRoot.state = current.memoizedState),\n finishedRoot.componentWillUnmount();\n } catch (unmountError) {\n captureCommitPhaseError(\n current,\n nearestMountedAncestor$jscomp$0,\n unmountError\n );\n }\n break;\n case 5:\n safelyDetachRef(current, nearestMountedAncestor$jscomp$0);\n break;\n case 4:\n unmountHostComponents(\n finishedRoot,\n current,\n nearestMountedAncestor$jscomp$0\n );\n }\n}\nfunction detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n fiber.stateNode = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n}\nfunction isHostParent(fiber) {\n return 5 === fiber.tag || 3 === fiber.tag || 4 === fiber.tag;\n}\nfunction commitPlacement(finishedWork) {\n a: {\n for (var parent = finishedWork.return; null !== parent; ) {\n if (isHostParent(parent)) break a;\n parent = parent.return;\n }\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n var parentFiber = parent;\n parent = parentFiber.stateNode;\n switch (parentFiber.tag) {\n case 5:\n var isContainer = !1;\n break;\n case 3:\n parent = parent.containerInfo;\n isContainer = !0;\n break;\n case 4:\n parent = parent.containerInfo;\n isContainer = !0;\n break;\n default:\n throw Error(\n \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n parentFiber.flags & 32 && (parentFiber.flags &= -33);\n a: b: for (parentFiber = finishedWork; ; ) {\n for (; null === parentFiber.sibling; ) {\n if (null === parentFiber.return || isHostParent(parentFiber.return)) {\n parentFiber = null;\n break a;\n }\n parentFiber = parentFiber.return;\n }\n parentFiber.sibling.return = parentFiber.return;\n for (\n parentFiber = parentFiber.sibling;\n 5 !== parentFiber.tag && 6 !== parentFiber.tag && 18 !== parentFiber.tag;\n\n ) {\n if (parentFiber.flags & 2) continue b;\n if (null === parentFiber.child || 4 === parentFiber.tag) continue b;\n else\n (parentFiber.child.return = parentFiber),\n (parentFiber = parentFiber.child);\n }\n if (!(parentFiber.flags & 2)) {\n parentFiber = parentFiber.stateNode;\n break a;\n }\n }\n isContainer\n ? insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n parentFiber,\n parent\n )\n : insertOrAppendPlacementNode(finishedWork, parentFiber, parent);\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n if (((node = node.stateNode), before)) {\n if (\"number\" === typeof parent)\n throw Error(\"Container does not support insertBefore operation\");\n } else\n ReactNativePrivateInterface.UIManager.setChildren(parent, [\n \"number\" === typeof node ? node : node._nativeTag\n ]);\n else if (4 !== tag && ((node = node.child), null !== node))\n for (\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n if (((node = node.stateNode), before)) {\n tag = parent._children;\n var index = tag.indexOf(node);\n 0 <= index\n ? (tag.splice(index, 1),\n (before = tag.indexOf(before)),\n tag.splice(before, 0, node),\n ReactNativePrivateInterface.UIManager.manageChildren(\n parent._nativeTag,\n [index],\n [before],\n [],\n [],\n []\n ))\n : ((before = tag.indexOf(before)),\n tag.splice(before, 0, node),\n ReactNativePrivateInterface.UIManager.manageChildren(\n parent._nativeTag,\n [],\n [],\n [\"number\" === typeof node ? node : node._nativeTag],\n [before],\n []\n ));\n } else\n (before = \"number\" === typeof node ? node : node._nativeTag),\n (tag = parent._children),\n (index = tag.indexOf(node)),\n 0 <= index\n ? (tag.splice(index, 1),\n tag.push(node),\n ReactNativePrivateInterface.UIManager.manageChildren(\n parent._nativeTag,\n [index],\n [tag.length - 1],\n [],\n [],\n []\n ))\n : (tag.push(node),\n ReactNativePrivateInterface.UIManager.manageChildren(\n parent._nativeTag,\n [],\n [],\n [before],\n [tag.length - 1],\n []\n ));\n else if (4 !== tag && ((node = node.child), null !== node))\n for (\n insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction unmountHostComponents(\n finishedRoot$jscomp$0,\n current,\n nearestMountedAncestor$jscomp$0\n) {\n for (\n var node = current,\n currentParentIsValid = !1,\n currentParent,\n currentParentIsContainer;\n ;\n\n ) {\n if (!currentParentIsValid) {\n currentParentIsValid = node.return;\n a: for (;;) {\n if (null === currentParentIsValid)\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentParent = currentParentIsValid.stateNode;\n switch (currentParentIsValid.tag) {\n case 5:\n currentParentIsContainer = !1;\n break a;\n case 3:\n currentParent = currentParent.containerInfo;\n currentParentIsContainer = !0;\n break a;\n case 4:\n currentParent = currentParent.containerInfo;\n currentParentIsContainer = !0;\n break a;\n }\n currentParentIsValid = currentParentIsValid.return;\n }\n currentParentIsValid = !0;\n }\n if (5 === node.tag || 6 === node.tag) {\n a: for (\n var finishedRoot = finishedRoot$jscomp$0,\n root = node,\n nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n node$jscomp$0 = root;\n ;\n\n )\n if (\n (commitUnmount(finishedRoot, node$jscomp$0, nearestMountedAncestor),\n null !== node$jscomp$0.child && 4 !== node$jscomp$0.tag)\n )\n (node$jscomp$0.child.return = node$jscomp$0),\n (node$jscomp$0 = node$jscomp$0.child);\n else {\n if (node$jscomp$0 === root) break a;\n for (; null === node$jscomp$0.sibling; ) {\n if (null === node$jscomp$0.return || node$jscomp$0.return === root)\n break a;\n node$jscomp$0 = node$jscomp$0.return;\n }\n node$jscomp$0.sibling.return = node$jscomp$0.return;\n node$jscomp$0 = node$jscomp$0.sibling;\n }\n currentParentIsContainer\n ? ((finishedRoot = currentParent),\n recursivelyUncacheFiberNode(node.stateNode),\n ReactNativePrivateInterface.UIManager.manageChildren(\n finishedRoot,\n [],\n [],\n [],\n [],\n [0]\n ))\n : ((finishedRoot = currentParent),\n (nearestMountedAncestor = node.stateNode),\n recursivelyUncacheFiberNode(nearestMountedAncestor),\n (root = finishedRoot._children),\n (nearestMountedAncestor = root.indexOf(nearestMountedAncestor)),\n root.splice(nearestMountedAncestor, 1),\n ReactNativePrivateInterface.UIManager.manageChildren(\n finishedRoot._nativeTag,\n [],\n [],\n [],\n [],\n [nearestMountedAncestor]\n ));\n } else if (4 === node.tag) {\n if (null !== node.child) {\n currentParent = node.stateNode.containerInfo;\n currentParentIsContainer = !0;\n node.child.return = node;\n node = node.child;\n continue;\n }\n } else if (\n (commitUnmount(\n finishedRoot$jscomp$0,\n node,\n nearestMountedAncestor$jscomp$0\n ),\n null !== node.child)\n ) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === current) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === current) return;\n node = node.return;\n 4 === node.tag && (currentParentIsValid = !1);\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\nfunction commitWork(current, finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(3, finishedWork, finishedWork.return);\n return;\n case 1:\n return;\n case 5:\n var instance = finishedWork.stateNode;\n if (null != instance) {\n var newProps = finishedWork.memoizedProps;\n current = null !== current ? current.memoizedProps : newProps;\n var updatePayload = finishedWork.updateQueue;\n finishedWork.updateQueue = null;\n null !== updatePayload &&\n ((finishedWork = instance.viewConfig),\n instanceProps.set(instance._nativeTag, newProps),\n (newProps = diffProperties(\n null,\n current,\n newProps,\n finishedWork.validAttributes\n )),\n null != newProps &&\n ReactNativePrivateInterface.UIManager.updateView(\n instance._nativeTag,\n finishedWork.uiViewClassName,\n newProps\n ));\n }\n return;\n case 6:\n if (null === finishedWork.stateNode)\n throw Error(\n \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\"\n );\n ReactNativePrivateInterface.UIManager.updateView(\n finishedWork.stateNode,\n \"RCTRawText\",\n { text: finishedWork.memoizedProps }\n );\n return;\n case 3:\n return;\n case 12:\n return;\n case 13:\n null !== finishedWork.memoizedState &&\n ((globalMostRecentFallbackTime = now()),\n hideOrUnhideAllChildren(finishedWork.child, !0));\n attachSuspenseRetryListeners(finishedWork);\n return;\n case 19:\n attachSuspenseRetryListeners(finishedWork);\n return;\n case 17:\n return;\n case 22:\n case 23:\n hideOrUnhideAllChildren(\n finishedWork,\n null !== finishedWork.memoizedState\n );\n return;\n }\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n}\nfunction attachSuspenseRetryListeners(finishedWork) {\n var wakeables = finishedWork.updateQueue;\n if (null !== wakeables) {\n finishedWork.updateQueue = null;\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n wakeables.forEach(function(wakeable) {\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n retryCache.has(wakeable) ||\n (retryCache.add(wakeable), wakeable.then(retry, retry));\n });\n }\n}\nfunction commitMutationEffects(root, firstChild) {\n for (nextEffect = firstChild; null !== nextEffect; ) {\n firstChild = nextEffect;\n var deletions = firstChild.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n try {\n unmountHostComponents(root, childToDelete, firstChild);\n var alternate = childToDelete.alternate;\n null !== alternate && (alternate.return = null);\n childToDelete.return = null;\n } catch (error) {\n captureCommitPhaseError(childToDelete, firstChild, error);\n }\n }\n deletions = firstChild.child;\n if (0 !== (firstChild.subtreeFlags & 6454) && null !== deletions)\n (deletions.return = firstChild), (nextEffect = deletions);\n else\n for (; null !== nextEffect; ) {\n firstChild = nextEffect;\n try {\n var flags = firstChild.flags;\n if (flags & 256) {\n var current = firstChild.alternate;\n if (null !== current) {\n var currentRef = current.ref;\n null !== currentRef &&\n (\"function\" === typeof currentRef\n ? currentRef(null)\n : (currentRef.current = null));\n }\n }\n switch (flags & 2054) {\n case 2:\n commitPlacement(firstChild);\n firstChild.flags &= -3;\n break;\n case 6:\n commitPlacement(firstChild);\n firstChild.flags &= -3;\n commitWork(firstChild.alternate, firstChild);\n break;\n case 2048:\n firstChild.flags &= -2049;\n break;\n case 2052:\n firstChild.flags &= -2049;\n commitWork(firstChild.alternate, firstChild);\n break;\n case 4:\n commitWork(firstChild.alternate, firstChild);\n }\n } catch (error) {\n captureCommitPhaseError(firstChild, firstChild.return, error);\n }\n deletions = firstChild.sibling;\n if (null !== deletions) {\n deletions.return = firstChild.return;\n nextEffect = deletions;\n break;\n }\n nextEffect = firstChild.return;\n }\n }\n}\nfunction commitLayoutEffects(finishedWork) {\n for (nextEffect = finishedWork; null !== nextEffect; ) {\n var fiber = nextEffect,\n firstChild = fiber.child;\n if (0 !== (fiber.subtreeFlags & 324) && null !== firstChild)\n (firstChild.return = fiber), (nextEffect = firstChild);\n else\n for (fiber = finishedWork; null !== nextEffect; ) {\n firstChild = nextEffect;\n if (0 !== (firstChild.flags & 324)) {\n var current = firstChild.alternate;\n try {\n if (0 !== (firstChild.flags & 68))\n switch (firstChild.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListMount(3, firstChild);\n break;\n case 1:\n var instance = firstChild.stateNode;\n if (firstChild.flags & 4)\n if (null === current) instance.componentDidMount();\n else {\n var prevProps =\n firstChild.elementType === firstChild.type\n ? current.memoizedProps\n : resolveDefaultProps(\n firstChild.type,\n current.memoizedProps\n );\n instance.componentDidUpdate(\n prevProps,\n current.memoizedState,\n instance.__reactInternalSnapshotBeforeUpdate\n );\n }\n var updateQueue = firstChild.updateQueue;\n null !== updateQueue &&\n commitUpdateQueue(firstChild, updateQueue, instance);\n break;\n case 3:\n var updateQueue$83 = firstChild.updateQueue;\n if (null !== updateQueue$83) {\n current = null;\n if (null !== firstChild.child)\n switch (firstChild.child.tag) {\n case 5:\n current = firstChild.child.stateNode;\n break;\n case 1:\n current = firstChild.child.stateNode;\n }\n commitUpdateQueue(firstChild, updateQueue$83, current);\n }\n break;\n case 5:\n break;\n case 6:\n break;\n case 4:\n break;\n case 12:\n break;\n case 13:\n break;\n case 19:\n case 17:\n case 21:\n case 22:\n case 23:\n break;\n default:\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (firstChild.flags & 256) {\n current = void 0;\n var ref = firstChild.ref;\n if (null !== ref) {\n var instance$jscomp$0 = firstChild.stateNode;\n switch (firstChild.tag) {\n case 5:\n current = instance$jscomp$0;\n break;\n default:\n current = instance$jscomp$0;\n }\n \"function\" === typeof ref\n ? ref(current)\n : (ref.current = current);\n }\n }\n } catch (error) {\n captureCommitPhaseError(firstChild, firstChild.return, error);\n }\n }\n if (firstChild === fiber) {\n nextEffect = null;\n break;\n }\n current = firstChild.sibling;\n if (null !== current) {\n current.return = firstChild.return;\n nextEffect = current;\n break;\n }\n nextEffect = firstChild.return;\n }\n }\n}\nvar ceil = Math.ceil,\n ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,\n ReactCurrentBatchConfig$2 = ReactSharedInternals.ReactCurrentBatchConfig,\n executionContext = 0,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n subtreeRenderLanes = 0,\n subtreeRenderLanesCursor = createCursor(0),\n workInProgressRootExitStatus = 0,\n workInProgressRootFatalError = null,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n globalMostRecentFallbackTime = 0,\n workInProgressRootRenderTargetTime = Infinity,\n hasUncaughtError = !1,\n firstUncaughtError = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n rootDoesHavePassiveEffects = !1,\n rootWithPendingPassiveEffects = null,\n pendingPassiveEffectsLanes = 0,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null,\n currentEventTime = -1,\n currentEventTransitionLane = 0;\nfunction requestEventTime() {\n return 0 !== (executionContext & 24)\n ? now()\n : -1 !== currentEventTime\n ? currentEventTime\n : (currentEventTime = now());\n}\nfunction requestUpdateLane(fiber) {\n if (0 === (fiber.mode & 1)) return 1;\n if (0 !== (executionContext & 8) && 0 !== workInProgressRootRenderLanes)\n return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n if (0 !== ReactCurrentBatchConfig.transition)\n return (\n 0 === currentEventTransitionLane &&\n ((fiber = nextTransitionLane),\n (nextTransitionLane <<= 1),\n 0 === (nextTransitionLane & 4194240) && (nextTransitionLane = 64),\n (currentEventTransitionLane = fiber)),\n currentEventTransitionLane\n );\n fiber = currentUpdatePriority;\n return 0 !== fiber ? fiber : 16;\n}\nfunction scheduleUpdateOnFiber(fiber, lane, eventTime) {\n if (50 < nestedUpdateCount)\n throw ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(\n \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\"\n ));\n var root = markUpdateLaneFromFiberToRoot(fiber, lane);\n if (null === root) return null;\n markRootUpdated(root, lane, eventTime);\n root === workInProgressRoot &&\n (0 === (executionContext & 8) && (workInProgressRootUpdatedLanes |= lane),\n 4 === workInProgressRootExitStatus &&\n markRootSuspended$1(root, workInProgressRootRenderLanes));\n 1 === lane\n ? 0 !== (executionContext & 4) && 0 === (executionContext & 24)\n ? performSyncWorkOnRoot(root)\n : (ensureRootIsScheduled(root, eventTime),\n 0 === executionContext &&\n 0 === (fiber.mode & 1) &&\n ((workInProgressRootRenderTargetTime = now() + 500),\n includesLegacySyncCallbacks && flushSyncCallbacks()))\n : ensureRootIsScheduled(root, eventTime);\n return root;\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n alternate = sourceFiber;\n for (sourceFiber = sourceFiber.return; null !== sourceFiber; )\n (sourceFiber.childLanes |= lane),\n (alternate = sourceFiber.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n (alternate = sourceFiber),\n (sourceFiber = sourceFiber.return);\n return 3 === alternate.tag ? alternate.stateNode : null;\n}\nfunction ensureRootIsScheduled(root, currentTime) {\n for (\n var existingCallbackNode = root.callbackNode,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes;\n 0 < lanes;\n\n ) {\n var index$6 = 31 - clz32(lanes),\n lane = 1 << index$6,\n expirationTime = expirationTimes[index$6];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index$6] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n suspendedLanes = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes : 0\n );\n if (0 === suspendedLanes)\n null !== existingCallbackNode && cancelCallback(existingCallbackNode),\n (root.callbackNode = null),\n (root.callbackPriority = 0);\n else if (\n ((currentTime = suspendedLanes & -suspendedLanes),\n root.callbackPriority !== currentTime)\n ) {\n null != existingCallbackNode && cancelCallback(existingCallbackNode);\n if (1 === currentTime)\n 0 === root.tag\n ? ((existingCallbackNode = performSyncWorkOnRoot.bind(null, root)),\n (includesLegacySyncCallbacks = !0),\n null === syncQueue\n ? (syncQueue = [existingCallbackNode])\n : syncQueue.push(existingCallbackNode))\n : ((existingCallbackNode = performSyncWorkOnRoot.bind(null, root)),\n null === syncQueue\n ? (syncQueue = [existingCallbackNode])\n : syncQueue.push(existingCallbackNode)),\n scheduleCallback(ImmediatePriority, flushSyncCallbacks),\n (existingCallbackNode = null);\n else {\n switch (lanesToEventPriority(suspendedLanes)) {\n case 1:\n existingCallbackNode = ImmediatePriority;\n break;\n case 4:\n existingCallbackNode = UserBlockingPriority;\n break;\n case 16:\n existingCallbackNode = NormalPriority;\n break;\n case 536870912:\n existingCallbackNode = IdlePriority;\n break;\n default:\n existingCallbackNode = NormalPriority;\n }\n existingCallbackNode = scheduleCallback(\n existingCallbackNode,\n performConcurrentWorkOnRoot.bind(null, root)\n );\n }\n root.callbackPriority = currentTime;\n root.callbackNode = existingCallbackNode;\n }\n}\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n currentEventTime = -1;\n currentEventTransitionLane = 0;\n if (0 !== (executionContext & 24))\n throw Error(\"Should not already be working.\");\n var originalCallbackNode = root.callbackNode;\n if (flushPassiveEffects() && root.callbackNode !== originalCallbackNode)\n return null;\n var lanes = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes : 0\n );\n if (0 === lanes) return null;\n var JSCompiler_inline_result =\n 0 !== (lanes & root.expiredLanes) ? !1 : 0 === (lanes & 30);\n if (JSCompiler_inline_result && !didTimeout) {\n didTimeout = lanes;\n JSCompiler_inline_result = executionContext;\n executionContext |= 8;\n var prevDispatcher = pushDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== didTimeout\n )\n (workInProgressRootRenderTargetTime = now() + 500),\n prepareFreshStack(root, didTimeout);\n do\n try {\n workLoopConcurrent();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n while (1);\n resetContextDependencies();\n ReactCurrentDispatcher$2.current = prevDispatcher;\n executionContext = JSCompiler_inline_result;\n null !== workInProgress\n ? (didTimeout = 0)\n : ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n (didTimeout = workInProgressRootExitStatus));\n } else didTimeout = renderRootSync(root, lanes);\n if (0 !== didTimeout) {\n 2 === didTimeout &&\n ((executionContext |= 32),\n root.hydrate && (root.hydrate = !1),\n (JSCompiler_inline_result = getLanesToRetrySynchronouslyOnError(root)),\n 0 !== JSCompiler_inline_result &&\n ((lanes = JSCompiler_inline_result),\n (didTimeout = renderRootSync(root, JSCompiler_inline_result))));\n if (1 === didTimeout)\n throw ((originalCallbackNode = workInProgressRootFatalError),\n prepareFreshStack(root, 0),\n markRootSuspended$1(root, lanes),\n ensureRootIsScheduled(root, now()),\n originalCallbackNode);\n root.finishedWork = root.current.alternate;\n root.finishedLanes = lanes;\n switch (didTimeout) {\n case 0:\n case 1:\n throw Error(\"Root did not complete. This is a bug in React.\");\n case 2:\n commitRoot(root);\n break;\n case 3:\n markRootSuspended$1(root, lanes);\n if (\n (lanes & 130023424) === lanes &&\n ((didTimeout = globalMostRecentFallbackTime + 500 - now()),\n 10 < didTimeout)\n ) {\n if (0 !== getNextLanes(root, 0)) break;\n JSCompiler_inline_result = root.suspendedLanes;\n if ((JSCompiler_inline_result & lanes) !== lanes) {\n requestEventTime();\n root.pingedLanes |= root.suspendedLanes & JSCompiler_inline_result;\n break;\n }\n root.timeoutHandle = scheduleTimeout(\n commitRoot.bind(null, root),\n didTimeout\n );\n break;\n }\n commitRoot(root);\n break;\n case 4:\n markRootSuspended$1(root, lanes);\n if ((lanes & 4194240) === lanes) break;\n didTimeout = root.eventTimes;\n for (JSCompiler_inline_result = -1; 0 < lanes; ) {\n var index$5 = 31 - clz32(lanes);\n prevDispatcher = 1 << index$5;\n index$5 = didTimeout[index$5];\n index$5 > JSCompiler_inline_result &&\n (JSCompiler_inline_result = index$5);\n lanes &= ~prevDispatcher;\n }\n lanes = JSCompiler_inline_result;\n lanes = now() - lanes;\n lanes =\n (120 > lanes\n ? 120\n : 480 > lanes\n ? 480\n : 1080 > lanes\n ? 1080\n : 1920 > lanes\n ? 1920\n : 3e3 > lanes\n ? 3e3\n : 4320 > lanes\n ? 4320\n : 1960 * ceil(lanes / 1960)) - lanes;\n if (10 < lanes) {\n root.timeoutHandle = scheduleTimeout(\n commitRoot.bind(null, root),\n lanes\n );\n break;\n }\n commitRoot(root);\n break;\n case 5:\n commitRoot(root);\n break;\n default:\n throw Error(\"Unknown root exit status.\");\n }\n }\n ensureRootIsScheduled(root, now());\n return root.callbackNode === originalCallbackNode\n ? performConcurrentWorkOnRoot.bind(null, root)\n : null;\n}\nfunction markRootSuspended$1(root, suspendedLanes) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n for (root = root.expirationTimes; 0 < suspendedLanes; ) {\n var index$7 = 31 - clz32(suspendedLanes),\n lane = 1 << index$7;\n root[index$7] = -1;\n suspendedLanes &= ~lane;\n }\n}\nfunction performSyncWorkOnRoot(root) {\n if (0 !== (executionContext & 24))\n throw Error(\"Should not already be working.\");\n flushPassiveEffects();\n var lanes = getNextLanes(root, 0);\n if (0 === (lanes & 1)) return ensureRootIsScheduled(root, now()), null;\n var exitStatus = renderRootSync(root, lanes);\n if (0 !== root.tag && 2 === exitStatus) {\n executionContext |= 32;\n root.hydrate && (root.hydrate = !1);\n var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);\n 0 !== errorRetryLanes &&\n ((lanes = errorRetryLanes), (exitStatus = renderRootSync(root, lanes)));\n }\n if (1 === exitStatus)\n throw ((exitStatus = workInProgressRootFatalError),\n prepareFreshStack(root, 0),\n markRootSuspended$1(root, lanes),\n ensureRootIsScheduled(root, now()),\n exitStatus);\n root.finishedWork = root.current.alternate;\n root.finishedLanes = lanes;\n commitRoot(root);\n ensureRootIsScheduled(root, now());\n return null;\n}\nfunction popRenderLanes() {\n subtreeRenderLanes = subtreeRenderLanesCursor.current;\n pop(subtreeRenderLanesCursor);\n}\nfunction prepareFreshStack(root, lanes) {\n root.finishedWork = null;\n root.finishedLanes = 0;\n var timeoutHandle = root.timeoutHandle;\n -1 !== timeoutHandle &&\n ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n if (null !== workInProgress)\n for (timeoutHandle = workInProgress.return; null !== timeoutHandle; ) {\n var interruptedWork = timeoutHandle;\n switch (interruptedWork.tag) {\n case 1:\n interruptedWork = interruptedWork.type.childContextTypes;\n null !== interruptedWork &&\n void 0 !== interruptedWork &&\n popContext();\n break;\n case 3:\n popHostContainer();\n pop(didPerformWorkStackCursor);\n pop(contextStackCursor);\n resetWorkInProgressVersions();\n break;\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer();\n break;\n case 13:\n pop(suspenseStackCursor);\n break;\n case 19:\n pop(suspenseStackCursor);\n break;\n case 10:\n popProvider(interruptedWork.type._context);\n break;\n case 22:\n case 23:\n popRenderLanes();\n }\n timeoutHandle = timeoutHandle.return;\n }\n workInProgressRoot = root;\n workInProgress = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = subtreeRenderLanes = lanes;\n workInProgressRootExitStatus = 0;\n workInProgressRootFatalError = null;\n workInProgressRootPingedLanes = workInProgressRootUpdatedLanes = workInProgressRootSkippedLanes = 0;\n if (null !== interleavedQueues) {\n for (root = 0; root < interleavedQueues.length; root++)\n if (\n ((lanes = interleavedQueues[root]),\n (timeoutHandle = lanes.interleaved),\n null !== timeoutHandle)\n ) {\n lanes.interleaved = null;\n interruptedWork = timeoutHandle.next;\n var lastPendingUpdate = lanes.pending;\n if (null !== lastPendingUpdate) {\n var firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = interruptedWork;\n timeoutHandle.next = firstPendingUpdate;\n }\n lanes.pending = timeoutHandle;\n }\n interleavedQueues = null;\n }\n}\nfunction handleError(root$jscomp$0, thrownValue) {\n do {\n var erroredWork = workInProgress;\n try {\n resetContextDependencies();\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n if (didScheduleRenderPhaseUpdate) {\n for (\n var hook = currentlyRenderingFiber$1.memoizedState;\n null !== hook;\n\n ) {\n var queue = hook.queue;\n null !== queue && (queue.pending = null);\n hook = hook.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber$1 = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n ReactCurrentOwner$2.current = null;\n if (null === erroredWork || null === erroredWork.return) {\n workInProgressRootExitStatus = 1;\n workInProgressRootFatalError = thrownValue;\n workInProgress = null;\n break;\n }\n a: {\n var root = root$jscomp$0,\n returnFiber = erroredWork.return,\n sourceFiber = erroredWork,\n value = thrownValue;\n thrownValue = workInProgressRootRenderLanes;\n sourceFiber.flags |= 8192;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n var wakeable = value,\n tag = sourceFiber.tag;\n if (\n 0 === (sourceFiber.mode & 1) &&\n (0 === tag || 11 === tag || 15 === tag)\n ) {\n var currentSource = sourceFiber.alternate;\n currentSource\n ? ((sourceFiber.updateQueue = currentSource.updateQueue),\n (sourceFiber.memoizedState = currentSource.memoizedState),\n (sourceFiber.lanes = currentSource.lanes))\n : ((sourceFiber.updateQueue = null),\n (sourceFiber.memoizedState = null));\n }\n var hasInvisibleParentBoundary =\n 0 !== (suspenseStackCursor.current & 1),\n workInProgress$32 = returnFiber;\n do {\n var JSCompiler_temp;\n if ((JSCompiler_temp = 13 === workInProgress$32.tag)) {\n var nextState = workInProgress$32.memoizedState;\n if (null !== nextState)\n JSCompiler_temp = null !== nextState.dehydrated ? !0 : !1;\n else {\n var props = workInProgress$32.memoizedProps;\n JSCompiler_temp =\n void 0 === props.fallback\n ? !1\n : !0 !== props.unstable_avoidThisFallback\n ? !0\n : hasInvisibleParentBoundary\n ? !1\n : !0;\n }\n }\n if (JSCompiler_temp) {\n var wakeables = workInProgress$32.updateQueue;\n if (null === wakeables) {\n var updateQueue = new Set();\n updateQueue.add(wakeable);\n workInProgress$32.updateQueue = updateQueue;\n } else wakeables.add(wakeable);\n if (\n 0 === (workInProgress$32.mode & 1) &&\n workInProgress$32 !== returnFiber\n ) {\n workInProgress$32.flags |= 128;\n sourceFiber.flags |= 32768;\n sourceFiber.flags &= -10053;\n if (1 === sourceFiber.tag)\n if (null === sourceFiber.alternate) sourceFiber.tag = 17;\n else {\n var update = createUpdate(-1, 1);\n update.tag = 2;\n enqueueUpdate(sourceFiber, update);\n }\n sourceFiber.lanes |= 1;\n break a;\n }\n value = void 0;\n sourceFiber = thrownValue;\n var pingCache = root.pingCache;\n null === pingCache\n ? ((pingCache = root.pingCache = new PossiblyWeakMap()),\n (value = new Set()),\n pingCache.set(wakeable, value))\n : ((value = pingCache.get(wakeable)),\n void 0 === value &&\n ((value = new Set()), pingCache.set(wakeable, value)));\n if (!value.has(sourceFiber)) {\n value.add(sourceFiber);\n var ping = pingSuspendedRoot.bind(\n null,\n root,\n wakeable,\n sourceFiber\n );\n wakeable.then(ping, ping);\n }\n workInProgress$32.flags |= 16384;\n workInProgress$32.lanes = thrownValue;\n break a;\n }\n workInProgress$32 = workInProgress$32.return;\n } while (null !== workInProgress$32);\n value = Error(\n (getComponentNameFromFiber(sourceFiber) || \"A React component\") +\n \" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a component higher in the tree to provide a loading indicator or placeholder to display.\"\n );\n }\n 5 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2);\n value = createCapturedValue(value, sourceFiber);\n workInProgress$32 = returnFiber;\n do {\n switch (workInProgress$32.tag) {\n case 3:\n root = value;\n workInProgress$32.flags |= 16384;\n thrownValue &= -thrownValue;\n workInProgress$32.lanes |= thrownValue;\n var update$33 = createRootErrorUpdate(\n workInProgress$32,\n root,\n thrownValue\n );\n enqueueCapturedUpdate(workInProgress$32, update$33);\n break a;\n case 1:\n root = value;\n var ctor = workInProgress$32.type,\n instance = workInProgress$32.stateNode;\n if (\n 0 === (workInProgress$32.flags & 128) &&\n (\"function\" === typeof ctor.getDerivedStateFromError ||\n (null !== instance &&\n \"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance))))\n ) {\n workInProgress$32.flags |= 16384;\n thrownValue &= -thrownValue;\n workInProgress$32.lanes |= thrownValue;\n var update$36 = createClassErrorUpdate(\n workInProgress$32,\n root,\n thrownValue\n );\n enqueueCapturedUpdate(workInProgress$32, update$36);\n break a;\n }\n }\n workInProgress$32 = workInProgress$32.return;\n } while (null !== workInProgress$32);\n }\n completeUnitOfWork(erroredWork);\n } catch (yetAnotherThrownValue) {\n thrownValue = yetAnotherThrownValue;\n workInProgress === erroredWork &&\n null !== erroredWork &&\n (workInProgress = erroredWork = erroredWork.return);\n continue;\n }\n break;\n } while (1);\n}\nfunction pushDispatcher() {\n var prevDispatcher = ReactCurrentDispatcher$2.current;\n ReactCurrentDispatcher$2.current = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction renderRootSync(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= 8;\n var prevDispatcher = pushDispatcher();\n (workInProgressRoot === root && workInProgressRootRenderLanes === lanes) ||\n prepareFreshStack(root, lanes);\n do\n try {\n workLoopSync();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n while (1);\n resetContextDependencies();\n executionContext = prevExecutionContext;\n ReactCurrentDispatcher$2.current = prevDispatcher;\n if (null !== workInProgress)\n throw Error(\n \"Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.\"\n );\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n return workInProgressRootExitStatus;\n}\nfunction workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction workLoopConcurrent() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n var next = beginWork$1(unitOfWork.alternate, unitOfWork, subtreeRenderLanes);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n ReactCurrentOwner$2.current = null;\n}\nfunction completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n var current = completedWork.alternate;\n unitOfWork = completedWork.return;\n if (0 === (completedWork.flags & 8192)) {\n if (\n ((current = completeWork(current, completedWork, subtreeRenderLanes)),\n null !== current)\n ) {\n workInProgress = current;\n return;\n }\n } else {\n current = unwindWork(completedWork);\n if (null !== current) {\n current.flags &= 8191;\n workInProgress = current;\n return;\n }\n null !== unitOfWork &&\n ((unitOfWork.flags |= 8192),\n (unitOfWork.subtreeFlags = 0),\n (unitOfWork.deletions = null));\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n 0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction commitRoot(root) {\n var previousUpdateLanePriority = currentUpdatePriority,\n prevTransition = ReactCurrentBatchConfig$2.transition;\n try {\n (ReactCurrentBatchConfig$2.transition = 0),\n (currentUpdatePriority = 1),\n commitRootImpl(root, previousUpdateLanePriority);\n } finally {\n (ReactCurrentBatchConfig$2.transition = prevTransition),\n (currentUpdatePriority = previousUpdateLanePriority);\n }\n return null;\n}\nfunction commitRootImpl(root, renderPriorityLevel) {\n do flushPassiveEffects();\n while (null !== rootWithPendingPassiveEffects);\n if (0 !== (executionContext & 24))\n throw Error(\"Should not already be working.\");\n var finishedWork = root.finishedWork,\n lanes = root.finishedLanes;\n if (null === finishedWork) return null;\n root.finishedWork = null;\n root.finishedLanes = 0;\n if (finishedWork === root.current)\n throw Error(\n \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\"\n );\n root.callbackNode = null;\n root.callbackPriority = 0;\n var remainingLanes = finishedWork.lanes | finishedWork.childLanes;\n markRootFinished(root, remainingLanes);\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n (0 === (finishedWork.subtreeFlags & 1040) &&\n 0 === (finishedWork.flags & 1040)) ||\n rootDoesHavePassiveEffects ||\n ((rootDoesHavePassiveEffects = !0),\n scheduleCallback(NormalPriority, function() {\n flushPassiveEffects();\n return null;\n }));\n remainingLanes = 0 !== (finishedWork.flags & 8054);\n if (0 !== (finishedWork.subtreeFlags & 8054) || remainingLanes) {\n remainingLanes = ReactCurrentBatchConfig$2.transition;\n ReactCurrentBatchConfig$2.transition = 0;\n var previousPriority = currentUpdatePriority;\n currentUpdatePriority = 1;\n var prevExecutionContext = executionContext;\n executionContext |= 16;\n ReactCurrentOwner$2.current = null;\n commitBeforeMutationEffects(root, finishedWork);\n commitMutationEffects(root, finishedWork);\n root.current = finishedWork;\n commitLayoutEffects(finishedWork, root, lanes);\n requestPaint();\n executionContext = prevExecutionContext;\n currentUpdatePriority = previousPriority;\n ReactCurrentBatchConfig$2.transition = remainingLanes;\n } else root.current = finishedWork;\n rootDoesHavePassiveEffects &&\n ((rootDoesHavePassiveEffects = !1),\n (rootWithPendingPassiveEffects = root),\n (pendingPassiveEffectsLanes = lanes));\n remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n 0 !== (remainingLanes & 1)\n ? root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n : (nestedUpdateCount = 0);\n onCommitRoot(finishedWork.stateNode, renderPriorityLevel);\n ensureRootIsScheduled(root, now());\n if (hasUncaughtError)\n throw ((hasUncaughtError = !1),\n (root = firstUncaughtError),\n (firstUncaughtError = null),\n root);\n if (0 !== (executionContext & 4)) return null;\n 0 !== (pendingPassiveEffectsLanes & 1) &&\n 0 !== root.tag &&\n flushPassiveEffects();\n flushSyncCallbacks();\n return null;\n}\nfunction flushPassiveEffects() {\n if (null !== rootWithPendingPassiveEffects) {\n var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes),\n prevTransition = ReactCurrentBatchConfig$2.transition,\n previousPriority = currentUpdatePriority;\n try {\n ReactCurrentBatchConfig$2.transition = 0;\n currentUpdatePriority = 16 > renderPriority ? 16 : renderPriority;\n if (null === rootWithPendingPassiveEffects)\n var JSCompiler_inline_result = !1;\n else {\n renderPriority = rootWithPendingPassiveEffects;\n rootWithPendingPassiveEffects = null;\n pendingPassiveEffectsLanes = 0;\n if (0 !== (executionContext & 24))\n throw Error(\"Cannot flush passive effects while already rendering.\");\n var prevExecutionContext = executionContext;\n executionContext |= 16;\n for (nextEffect = renderPriority.current; null !== nextEffect; ) {\n var fiber = nextEffect,\n child = fiber.child;\n if (0 !== (nextEffect.flags & 16)) {\n var deletions = fiber.deletions;\n if (null !== deletions) {\n for (var i = 0; i < deletions.length; i++) {\n var fiberToDelete = deletions[i];\n for (nextEffect = fiberToDelete; null !== nextEffect; ) {\n var fiber$jscomp$0 = nextEffect;\n switch (fiber$jscomp$0.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(4, fiber$jscomp$0, fiber);\n }\n var child$jscomp$0 = fiber$jscomp$0.child;\n if (null !== child$jscomp$0)\n (child$jscomp$0.return = fiber$jscomp$0),\n (nextEffect = child$jscomp$0);\n else\n for (; null !== nextEffect; ) {\n fiber$jscomp$0 = nextEffect;\n var sibling = fiber$jscomp$0.sibling,\n returnFiber = fiber$jscomp$0.return;\n detachFiberAfterEffects(fiber$jscomp$0);\n if (fiber$jscomp$0 === fiberToDelete) {\n nextEffect = null;\n break;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break;\n }\n nextEffect = returnFiber;\n }\n }\n }\n var previousFiber = fiber.alternate;\n if (null !== previousFiber) {\n var detachedChild = previousFiber.child;\n if (null !== detachedChild) {\n previousFiber.child = null;\n do {\n var detachedSibling = detachedChild.sibling;\n detachedChild.sibling = null;\n detachedChild = detachedSibling;\n } while (null !== detachedChild);\n }\n }\n nextEffect = fiber;\n }\n }\n if (0 !== (fiber.subtreeFlags & 1040) && null !== child)\n (child.return = fiber), (nextEffect = child);\n else\n b: for (; null !== nextEffect; ) {\n fiber = nextEffect;\n if (0 !== (fiber.flags & 1024))\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(5, fiber, fiber.return);\n }\n var sibling$jscomp$0 = fiber.sibling;\n if (null !== sibling$jscomp$0) {\n sibling$jscomp$0.return = fiber.return;\n nextEffect = sibling$jscomp$0;\n break b;\n }\n nextEffect = fiber.return;\n }\n }\n var finishedWork = renderPriority.current;\n for (nextEffect = finishedWork; null !== nextEffect; ) {\n child = nextEffect;\n var firstChild = child.child;\n if (0 !== (child.subtreeFlags & 1040) && null !== firstChild)\n (firstChild.return = child), (nextEffect = firstChild);\n else\n b: for (child = finishedWork; null !== nextEffect; ) {\n deletions = nextEffect;\n if (0 !== (deletions.flags & 1024))\n try {\n switch (deletions.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListMount(5, deletions);\n }\n } catch (error) {\n captureCommitPhaseError(deletions, deletions.return, error);\n }\n if (deletions === child) {\n nextEffect = null;\n break b;\n }\n var sibling$jscomp$1 = deletions.sibling;\n if (null !== sibling$jscomp$1) {\n sibling$jscomp$1.return = deletions.return;\n nextEffect = sibling$jscomp$1;\n break b;\n }\n nextEffect = deletions.return;\n }\n }\n executionContext = prevExecutionContext;\n flushSyncCallbacks();\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, renderPriority);\n } catch (err) {}\n JSCompiler_inline_result = !0;\n }\n return JSCompiler_inline_result;\n } finally {\n (currentUpdatePriority = previousPriority),\n (ReactCurrentBatchConfig$2.transition = prevTransition);\n }\n }\n return !1;\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValue(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber, sourceFiber, 1);\n enqueueUpdate(rootFiber, sourceFiber);\n sourceFiber = requestEventTime();\n rootFiber = markUpdateLaneFromFiberToRoot(rootFiber, 1);\n null !== rootFiber &&\n (markRootUpdated(rootFiber, 1, sourceFiber),\n ensureRootIsScheduled(rootFiber, sourceFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else\n for (\n nearestMountedAncestor = sourceFiber.return;\n null !== nearestMountedAncestor;\n\n ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n break;\n } else if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValue(error, sourceFiber);\n sourceFiber = createClassErrorUpdate(\n nearestMountedAncestor,\n sourceFiber,\n 1\n );\n enqueueUpdate(nearestMountedAncestor, sourceFiber);\n sourceFiber = requestEventTime();\n nearestMountedAncestor = markUpdateLaneFromFiberToRoot(\n nearestMountedAncestor,\n 1\n );\n null !== nearestMountedAncestor &&\n (markRootUpdated(nearestMountedAncestor, 1, sourceFiber),\n ensureRootIsScheduled(nearestMountedAncestor, sourceFiber));\n break;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n wakeable = requestEventTime();\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (4 === workInProgressRootExitStatus ||\n (3 === workInProgressRootExitStatus &&\n (workInProgressRootRenderLanes & 130023424) ===\n workInProgressRootRenderLanes &&\n 500 > now() - globalMostRecentFallbackTime)\n ? prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes));\n ensureRootIsScheduled(root, wakeable);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryCache = boundaryFiber.stateNode;\n null !== retryCache && retryCache.delete(wakeable);\n wakeable = 0;\n 0 === wakeable &&\n (0 === (boundaryFiber.mode & 1)\n ? (wakeable = 1)\n : ((wakeable = nextRetryLane),\n (nextRetryLane <<= 1),\n 0 === (nextRetryLane & 130023424) && (nextRetryLane = 4194304)));\n retryCache = requestEventTime();\n boundaryFiber = markUpdateLaneFromFiberToRoot(boundaryFiber, wakeable);\n null !== boundaryFiber &&\n (markRootUpdated(boundaryFiber, wakeable, retryCache),\n ensureRootIsScheduled(boundaryFiber, retryCache));\n}\nvar beginWork$1;\nbeginWork$1 = function(current, workInProgress, renderLanes) {\n var updateLanes = workInProgress.lanes;\n if (null !== current)\n if (\n current.memoizedProps !== workInProgress.pendingProps ||\n didPerformWorkStackCursor.current\n )\n didReceiveUpdate = !0;\n else {\n if (0 === (renderLanes & updateLanes)) {\n didReceiveUpdate = !1;\n switch (workInProgress.tag) {\n case 3:\n pushHostRootContext(workInProgress);\n break;\n case 5:\n pushHostContext(workInProgress);\n break;\n case 1:\n isContextProvider(workInProgress.type) &&\n pushContextProvider(workInProgress);\n break;\n case 4:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n break;\n case 10:\n updateLanes = workInProgress.type._context;\n var nextValue = workInProgress.memoizedProps.value;\n push(valueCursor, updateLanes._currentValue);\n updateLanes._currentValue = nextValue;\n break;\n case 13:\n if (null !== workInProgress.memoizedState) {\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(\n current,\n workInProgress,\n renderLanes\n );\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== workInProgress ? workInProgress.sibling : null;\n }\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n break;\n case 19:\n updateLanes = 0 !== (renderLanes & workInProgress.childLanes);\n if (0 !== (current.flags & 128)) {\n if (updateLanes)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n nextValue = workInProgress.memoizedState;\n null !== nextValue &&\n ((nextValue.rendering = null),\n (nextValue.tail = null),\n (nextValue.lastEffect = null));\n push(suspenseStackCursor, suspenseStackCursor.current);\n if (updateLanes) break;\n else return null;\n case 22:\n case 23:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(current, workInProgress, renderLanes)\n );\n }\n return bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n }\n didReceiveUpdate = 0 !== (current.flags & 32768) ? !0 : !1;\n }\n else didReceiveUpdate = !1;\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 2:\n updateLanes = workInProgress.type;\n null !== current &&\n ((current.alternate = null),\n (workInProgress.alternate = null),\n (workInProgress.flags |= 2));\n current = workInProgress.pendingProps;\n nextValue = getMaskedContext(workInProgress, contextStackCursor.current);\n prepareToReadContext(workInProgress, renderLanes);\n nextValue = renderWithHooks(\n null,\n workInProgress,\n updateLanes,\n current,\n nextValue,\n renderLanes\n );\n workInProgress.flags |= 1;\n if (\n \"object\" === typeof nextValue &&\n null !== nextValue &&\n \"function\" === typeof nextValue.render &&\n void 0 === nextValue.$$typeof\n ) {\n workInProgress.tag = 1;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n if (isContextProvider(updateLanes)) {\n var hasContext = !0;\n pushContextProvider(workInProgress);\n } else hasContext = !1;\n workInProgress.memoizedState =\n null !== nextValue.state && void 0 !== nextValue.state\n ? nextValue.state\n : null;\n initializeUpdateQueue(workInProgress);\n nextValue.updater = classComponentUpdater;\n workInProgress.stateNode = nextValue;\n nextValue._reactInternals = workInProgress;\n mountClassInstance(workInProgress, updateLanes, current, renderLanes);\n workInProgress = finishClassComponent(\n null,\n workInProgress,\n updateLanes,\n !0,\n hasContext,\n renderLanes\n );\n } else\n (workInProgress.tag = 0),\n reconcileChildren(null, workInProgress, nextValue, renderLanes),\n (workInProgress = workInProgress.child);\n return workInProgress;\n case 16:\n nextValue = workInProgress.elementType;\n a: {\n null !== current &&\n ((current.alternate = null),\n (workInProgress.alternate = null),\n (workInProgress.flags |= 2));\n current = workInProgress.pendingProps;\n hasContext = nextValue._init;\n nextValue = hasContext(nextValue._payload);\n workInProgress.type = nextValue;\n hasContext = workInProgress.tag = resolveLazyComponentTag(nextValue);\n current = resolveDefaultProps(nextValue, current);\n switch (hasContext) {\n case 0:\n workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n nextValue,\n current,\n renderLanes\n );\n break a;\n case 1:\n workInProgress = updateClassComponent(\n null,\n workInProgress,\n nextValue,\n current,\n renderLanes\n );\n break a;\n case 11:\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n nextValue,\n current,\n renderLanes\n );\n break a;\n case 14:\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n nextValue,\n resolveDefaultProps(nextValue.type, current),\n updateLanes,\n renderLanes\n );\n break a;\n }\n throw Error(\n \"Element type is invalid. Received a promise that resolves to: \" +\n nextValue +\n \". Lazy element type must resolve to a class or function.\"\n );\n }\n return workInProgress;\n case 0:\n return (\n (updateLanes = workInProgress.type),\n (nextValue = workInProgress.pendingProps),\n (nextValue =\n workInProgress.elementType === updateLanes\n ? nextValue\n : resolveDefaultProps(updateLanes, nextValue)),\n updateFunctionComponent(\n current,\n workInProgress,\n updateLanes,\n nextValue,\n renderLanes\n )\n );\n case 1:\n return (\n (updateLanes = workInProgress.type),\n (nextValue = workInProgress.pendingProps),\n (nextValue =\n workInProgress.elementType === updateLanes\n ? nextValue\n : resolveDefaultProps(updateLanes, nextValue)),\n updateClassComponent(\n current,\n workInProgress,\n updateLanes,\n nextValue,\n renderLanes\n )\n );\n case 3:\n pushHostRootContext(workInProgress);\n updateLanes = workInProgress.updateQueue;\n if (null === current || null === updateLanes)\n throw Error(\n \"If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue.\"\n );\n nextValue = workInProgress.pendingProps;\n updateLanes = workInProgress.memoizedState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, nextValue, null, renderLanes);\n nextValue = workInProgress.memoizedState.element;\n nextValue === updateLanes\n ? (workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ))\n : (reconcileChildren(current, workInProgress, nextValue, renderLanes),\n (workInProgress = workInProgress.child));\n return workInProgress;\n case 5:\n return (\n pushHostContext(workInProgress),\n (updateLanes = workInProgress.pendingProps.children),\n markRef(current, workInProgress),\n reconcileChildren(current, workInProgress, updateLanes, renderLanes),\n workInProgress.child\n );\n case 6:\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (updateLanes = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n updateLanes,\n renderLanes\n ))\n : reconcileChildren(\n current,\n workInProgress,\n updateLanes,\n renderLanes\n ),\n workInProgress.child\n );\n case 11:\n return (\n (updateLanes = workInProgress.type),\n (nextValue = workInProgress.pendingProps),\n (nextValue =\n workInProgress.elementType === updateLanes\n ? nextValue\n : resolveDefaultProps(updateLanes, nextValue)),\n updateForwardRef(\n current,\n workInProgress,\n updateLanes,\n nextValue,\n renderLanes\n )\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n a: {\n updateLanes = workInProgress.type._context;\n nextValue = workInProgress.pendingProps;\n hasContext = workInProgress.memoizedProps;\n var newValue = nextValue.value;\n push(valueCursor, updateLanes._currentValue);\n updateLanes._currentValue = newValue;\n if (null !== hasContext)\n if (objectIs(hasContext.value, newValue)) {\n if (\n hasContext.children === nextValue.children &&\n !didPerformWorkStackCursor.current\n ) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n } else\n for (\n newValue = workInProgress.child,\n null !== newValue && (newValue.return = workInProgress);\n null !== newValue;\n\n ) {\n var list = newValue.dependencies;\n if (null !== list) {\n hasContext = newValue.child;\n for (\n var dependency = list.firstContext;\n null !== dependency;\n\n ) {\n if (dependency.context === updateLanes) {\n if (1 === newValue.tag) {\n dependency = createUpdate(-1, renderLanes & -renderLanes);\n dependency.tag = 2;\n var updateQueue = newValue.updateQueue;\n if (null !== updateQueue) {\n updateQueue = updateQueue.shared;\n var pending = updateQueue.pending;\n null === pending\n ? (dependency.next = dependency)\n : ((dependency.next = pending.next),\n (pending.next = dependency));\n updateQueue.pending = dependency;\n }\n }\n newValue.lanes |= renderLanes;\n dependency = newValue.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleWorkOnParentPath(newValue.return, renderLanes);\n list.lanes |= renderLanes;\n break;\n }\n dependency = dependency.next;\n }\n } else\n hasContext =\n 10 === newValue.tag\n ? newValue.type === workInProgress.type\n ? null\n : newValue.child\n : newValue.child;\n if (null !== hasContext) hasContext.return = newValue;\n else\n for (hasContext = newValue; null !== hasContext; ) {\n if (hasContext === workInProgress) {\n hasContext = null;\n break;\n }\n newValue = hasContext.sibling;\n if (null !== newValue) {\n newValue.return = hasContext.return;\n hasContext = newValue;\n break;\n }\n hasContext = hasContext.return;\n }\n newValue = hasContext;\n }\n reconcileChildren(\n current,\n workInProgress,\n nextValue.children,\n renderLanes\n );\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 9:\n return (\n (nextValue = workInProgress.type),\n (updateLanes = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress, renderLanes),\n (nextValue = readContext(nextValue)),\n (updateLanes = updateLanes(nextValue)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, updateLanes, renderLanes),\n workInProgress.child\n );\n case 14:\n return (\n (nextValue = workInProgress.type),\n (hasContext = resolveDefaultProps(\n nextValue,\n workInProgress.pendingProps\n )),\n (hasContext = resolveDefaultProps(nextValue.type, hasContext)),\n updateMemoComponent(\n current,\n workInProgress,\n nextValue,\n hasContext,\n updateLanes,\n renderLanes\n )\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n updateLanes,\n renderLanes\n );\n case 17:\n return (\n (updateLanes = workInProgress.type),\n (nextValue = workInProgress.pendingProps),\n (nextValue =\n workInProgress.elementType === updateLanes\n ? nextValue\n : resolveDefaultProps(updateLanes, nextValue)),\n null !== current &&\n ((current.alternate = null),\n (workInProgress.alternate = null),\n (workInProgress.flags |= 2)),\n (workInProgress.tag = 1),\n isContextProvider(updateLanes)\n ? ((current = !0), pushContextProvider(workInProgress))\n : (current = !1),\n prepareToReadContext(workInProgress, renderLanes),\n constructClassInstance(workInProgress, updateLanes, nextValue),\n mountClassInstance(workInProgress, updateLanes, nextValue, renderLanes),\n finishClassComponent(\n null,\n workInProgress,\n updateLanes,\n !0,\n current,\n renderLanes\n )\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n case 23:\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null;\n this.index = 0;\n this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiber(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction resolveLazyComponentTag(Component) {\n if (\"function\" === typeof Component)\n return shouldConstruct(Component) ? 1 : 0;\n if (void 0 !== Component && null !== Component) {\n Component = Component.$$typeof;\n if (Component === REACT_FORWARD_REF_TYPE) return 11;\n if (Component === REACT_MEMO_TYPE) return 14;\n }\n return 2;\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiber(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 1835008;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 2;\n owner = type;\n if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n else if (\"string\" === typeof type) fiberTag = 5;\n else\n a: switch (type) {\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_DEBUG_TRACING_MODE_TYPE:\n fiberTag = 8;\n mode |= 4;\n break;\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 8;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiber(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiber(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiber(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_OFFSCREEN_TYPE:\n return createFiberFromOffscreen(pendingProps, mode, lanes, key);\n case REACT_LEGACY_HIDDEN_TYPE:\n return (\n (type = createFiber(23, pendingProps, key, mode)),\n (type.elementType = REACT_LEGACY_HIDDEN_TYPE),\n (type.lanes = lanes),\n type\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONTEXT_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n throw Error(\n \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" +\n (null == type ? type : typeof type) +\n \".\"\n );\n }\n key = createFiber(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiber(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromOffscreen(pendingProps, mode, lanes, key) {\n pendingProps = createFiber(22, pendingProps, key, mode);\n pendingProps.elementType = REACT_OFFSCREEN_TYPE;\n pendingProps.lanes = lanes;\n return pendingProps;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiber(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiber(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nfunction FiberRootNode(containerInfo, tag, hydrate) {\n this.tag = tag;\n this.containerInfo = containerInfo;\n this.finishedWork = this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = -1;\n this.pendingContext = this.context = null;\n this.hydrate = hydrate;\n this.callbackNode = null;\n this.callbackPriority = 0;\n this.eventTimes = createLaneMap(0);\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes = this.finishedLanes = this.mutableReadLanes = this.expiredLanes = this.pingedLanes = this.suspendedLanes = this.pendingLanes = 0;\n this.entanglements = createLaneMap(0);\n}\nfunction createPortal(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nfunction findHostInstance(component) {\n var fiber = component._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof component.render)\n throw Error(\"Unable to find node on an unmounted component.\");\n throw Error(\n \"Argument appears to not be a ReactComponent. Keys: \" +\n Object.keys(component)\n );\n }\n component = findCurrentHostFiber(fiber);\n return null === component ? null : component.stateNode;\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n var current = container.current,\n eventTime = requestEventTime(),\n lane = requestUpdateLane(current);\n a: if (parentComponent) {\n parentComponent = parentComponent._reactInternals;\n b: {\n if (\n getNearestMountedFiber(parentComponent) !== parentComponent ||\n 1 !== parentComponent.tag\n )\n throw Error(\n \"Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.\"\n );\n var JSCompiler_inline_result = parentComponent;\n do {\n switch (JSCompiler_inline_result.tag) {\n case 3:\n JSCompiler_inline_result =\n JSCompiler_inline_result.stateNode.context;\n break b;\n case 1:\n if (isContextProvider(JSCompiler_inline_result.type)) {\n JSCompiler_inline_result =\n JSCompiler_inline_result.stateNode\n .__reactInternalMemoizedMergedChildContext;\n break b;\n }\n }\n JSCompiler_inline_result = JSCompiler_inline_result.return;\n } while (null !== JSCompiler_inline_result);\n throw Error(\n \"Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (1 === parentComponent.tag) {\n var Component = parentComponent.type;\n if (isContextProvider(Component)) {\n parentComponent = processChildContext(\n parentComponent,\n Component,\n JSCompiler_inline_result\n );\n break a;\n }\n }\n parentComponent = JSCompiler_inline_result;\n } else parentComponent = emptyContextObject;\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n container = createUpdate(eventTime, lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback && (container.callback = callback);\n enqueueUpdate(current, container);\n element = scheduleUpdateOnFiber(current, lane, eventTime);\n null !== element && entangleTransitions(element, current, lane);\n return lane;\n}\nfunction emptyFindFiberByHostInstance() {\n return null;\n}\nfunction findNodeHandle(componentOrHandle) {\n if (null == componentOrHandle) return null;\n if (\"number\" === typeof componentOrHandle) return componentOrHandle;\n if (componentOrHandle._nativeTag) return componentOrHandle._nativeTag;\n if (componentOrHandle.canonical && componentOrHandle.canonical._nativeTag)\n return componentOrHandle.canonical._nativeTag;\n componentOrHandle = findHostInstance(componentOrHandle);\n return null == componentOrHandle\n ? componentOrHandle\n : componentOrHandle.canonical\n ? componentOrHandle.canonical._nativeTag\n : componentOrHandle._nativeTag;\n}\nfunction unmountComponentAtNode(containerTag) {\n var root = roots.get(containerTag);\n root &&\n updateContainer(null, root, null, function() {\n roots.delete(containerTag);\n });\n}\nbatchedUpdatesImpl = function(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext |= 1;\n try {\n return fn(a);\n } finally {\n (executionContext = prevExecutionContext),\n 0 === executionContext &&\n ((workInProgressRootRenderTargetTime = now() + 500),\n includesLegacySyncCallbacks && flushSyncCallbacks());\n }\n};\nvar roots = new Map(),\n devToolsConfig$jscomp$inline_983 = {\n findFiberByHostInstance: getInstanceFromTag,\n bundleType: 0,\n version: \"18.0.0-experimental-568dc3532\",\n rendererPackageName: \"react-native-renderer\",\n rendererConfig: {\n getInspectorDataForViewTag: function() {\n throw Error(\n \"getInspectorDataForViewTag() is not available in production\"\n );\n },\n getInspectorDataForViewAtPoint: function() {\n throw Error(\n \"getInspectorDataForViewAtPoint() is not available in production.\"\n );\n }.bind(null, findNodeHandle)\n }\n };\nvar internals$jscomp$inline_1237 = {\n bundleType: devToolsConfig$jscomp$inline_983.bundleType,\n version: devToolsConfig$jscomp$inline_983.version,\n rendererPackageName: devToolsConfig$jscomp$inline_983.rendererPackageName,\n rendererConfig: devToolsConfig$jscomp$inline_983.rendererConfig,\n overrideHookState: null,\n overrideHookStateDeletePath: null,\n overrideHookStateRenamePath: null,\n overrideProps: null,\n overridePropsDeletePath: null,\n overridePropsRenamePath: null,\n setErrorHandler: null,\n setSuspenseHandler: null,\n scheduleUpdate: null,\n currentDispatcherRef: ReactSharedInternals.ReactCurrentDispatcher,\n findHostInstanceByFiber: function(fiber) {\n fiber = findCurrentHostFiber(fiber);\n return null === fiber ? null : fiber.stateNode;\n },\n findFiberByHostInstance:\n devToolsConfig$jscomp$inline_983.findFiberByHostInstance ||\n emptyFindFiberByHostInstance,\n findHostInstancesForRefresh: null,\n scheduleRefresh: null,\n scheduleRoot: null,\n setRefreshHandler: null,\n getCurrentFiber: null,\n reconcilerVersion: \"18.0.0-experimental-568dc3532\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n var hook$jscomp$inline_1238 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (\n !hook$jscomp$inline_1238.isDisabled &&\n hook$jscomp$inline_1238.supportsFiber\n )\n try {\n (rendererID = hook$jscomp$inline_1238.inject(\n internals$jscomp$inline_1237\n )),\n (injectedHook = hook$jscomp$inline_1238);\n } catch (err) {}\n}\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {\n computeComponentStackForErrorReporting: function(reactTag) {\n return (reactTag = getInstanceFromTag(reactTag))\n ? getStackByFiberInDevAndProd(reactTag)\n : \"\";\n }\n};\nexports.createPortal = function(children, containerTag) {\n return createPortal(\n children,\n containerTag,\n null,\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null\n );\n};\nexports.dispatchCommand = function(handle, command, args) {\n null != handle._nativeTag &&\n (handle._internalInstanceHandle\n ? nativeFabricUIManager.dispatchCommand(\n handle._internalInstanceHandle.stateNode.node,\n command,\n args\n )\n : ReactNativePrivateInterface.UIManager.dispatchViewManagerCommand(\n handle._nativeTag,\n command,\n args\n ));\n};\nexports.findHostInstance_DEPRECATED = function(componentOrHandle) {\n if (null == componentOrHandle) return null;\n if (componentOrHandle._nativeTag) return componentOrHandle;\n if (componentOrHandle.canonical && componentOrHandle.canonical._nativeTag)\n return componentOrHandle.canonical;\n componentOrHandle = findHostInstance(componentOrHandle);\n return null == componentOrHandle\n ? componentOrHandle\n : componentOrHandle.canonical\n ? componentOrHandle.canonical\n : componentOrHandle;\n};\nexports.findNodeHandle = findNodeHandle;\nexports.render = function(element, containerTag, callback) {\n var root = roots.get(containerTag);\n if (!root) {\n root = new FiberRootNode(containerTag, 0, !1);\n var JSCompiler_inline_result = createFiber(3, null, null, 0);\n root.current = JSCompiler_inline_result;\n JSCompiler_inline_result.stateNode = root;\n JSCompiler_inline_result.memoizedState = { element: null };\n initializeUpdateQueue(JSCompiler_inline_result);\n roots.set(containerTag, root);\n }\n updateContainer(element, root, null, callback);\n a: if (((element = root.current), element.child))\n switch (element.child.tag) {\n case 5:\n element = element.child.stateNode;\n break a;\n default:\n element = element.child.stateNode;\n }\n else element = null;\n return element;\n};\nexports.sendAccessibilityEvent = function(handle, eventType) {\n null != handle._nativeTag &&\n (handle._internalInstanceHandle\n ? nativeFabricUIManager.sendAccessibilityEvent(\n handle._internalInstanceHandle.stateNode.node,\n eventType\n )\n : ReactNativePrivateInterface.legacySendAccessibilityEvent(\n handle._nativeTag,\n eventType\n ));\n};\nexports.unmountComponentAtNode = unmountComponentAtNode;\nexports.unmountComponentAtNodeAndRemoveContainer = function(containerTag) {\n unmountComponentAtNode(containerTag);\n ReactNativePrivateInterface.UIManager.removeRootView(containerTag);\n};\nexports.unstable_batchedUpdates = batchedUpdates;\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport '../Core/InitializeCore';\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n/* globals window: true */\n\n/**\n * Sets up global variables typical in most JavaScript environments.\n *\n * 1. Global timers (via `setTimeout` etc).\n * 2. Global console object.\n * 3. Hooks for printing stack traces with source maps.\n *\n * Leaves enough room in the environment for implementing your own:\n *\n * 1. Require system.\n * 2. Bridged modules.\n *\n */\n\n'use strict';\n\nconst start = Date.now();\n\nrequire('./setUpGlobals');\nrequire('./setUpPerformance');\nrequire('./setUpSystrace');\nrequire('./setUpErrorHandling');\nrequire('./polyfillPromise');\nrequire('./setUpRegeneratorRuntime');\nrequire('./setUpTimers');\nrequire('./setUpXHR');\nrequire('./setUpAlert');\nrequire('./setUpNavigator');\nrequire('./setUpBatchedBridge');\nrequire('./setUpSegmentFetcher');\nif (__DEV__) {\n require('./checkNativeVersion');\n require('./setUpDeveloperTools');\n require('../LogBox/LogBox').install();\n}\n\nconst GlobalPerformanceLogger = require('../Utilities/GlobalPerformanceLogger');\n// We could just call GlobalPerformanceLogger.markPoint at the top of the file,\n// but then we'd be excluding the time it took to require the logger.\n// Instead, we just use Date.now and backdate the timestamp.\nGlobalPerformanceLogger.markPoint(\n 'initializeCore_start',\n GlobalPerformanceLogger.currentTimestamp() - (Date.now() - start),\n);\nGlobalPerformanceLogger.markPoint('initializeCore_end');\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\n/**\n * Sets up global variables for React Native.\n * You can use this module directly, or just require InitializeCore.\n */\nif (global.GLOBAL === undefined) {\n global.GLOBAL = global;\n}\n\nif (global.window === undefined) {\n global.window = global;\n}\n\nif (global.self === undefined) {\n global.self = global;\n}\n\n// Set up process\nglobal.process = global.process || {};\nglobal.process.env = global.process.env || {};\nif (!global.process.env.NODE_ENV) {\n global.process.env.NODE_ENV = __DEV__ ? 'development' : 'production';\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nif (!global.performance) {\n global.performance = {};\n}\n\n/**\n * Returns a double, measured in milliseconds.\n * https://developer.mozilla.org/en-US/docs/Web/API/Performance/now\n */\nif (typeof global.performance.now !== 'function') {\n global.performance.now = function() {\n const performanceNow = global.nativePerformanceNow || Date.now;\n return performanceNow();\n };\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\n/**\n * Set up Systrace profiling hooks if necessary.\n * You can use this module directly, or just require InitializeCore.\n */\nif (global.__RCTProfileIsProfiling) {\n const Systrace = require('../Performance/Systrace');\n Systrace.installReactHook();\n Systrace.setEnabled(true);\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nconst invariant = require('invariant');\n\nconst TRACE_TAG_REACT_APPS = 1 << 17; // eslint-disable-line no-bitwise\nconst TRACE_TAG_JS_VM_CALLS = 1 << 27; // eslint-disable-line no-bitwise\n\nlet _enabled = false;\nlet _asyncCookie = 0;\nconst _markStack = [];\nlet _markStackIndex = -1;\nlet _canInstallReactHook = false;\n\n// Implements a subset of User Timing API necessary for React measurements.\n// https://developer.mozilla.org/en-US/docs/Web/API/User_Timing_API\nconst REACT_MARKER = '\\u269B';\nconst userTimingPolyfill = __DEV__\n ? {\n mark(markName: string) {\n if (_enabled) {\n _markStackIndex++;\n _markStack[_markStackIndex] = markName;\n let systraceLabel = markName;\n // Since perf measurements are a shared namespace in User Timing API,\n // we prefix all React results with a React emoji.\n if (markName[0] === REACT_MARKER) {\n // This is coming from React.\n // Removing component IDs keeps trace colors stable.\n const indexOfId = markName.lastIndexOf(' (#');\n const cutoffIndex = indexOfId !== -1 ? indexOfId : markName.length;\n // Also cut off the emoji because it breaks Systrace\n systraceLabel = markName.slice(2, cutoffIndex);\n }\n Systrace.beginEvent(systraceLabel);\n }\n },\n measure(measureName: string, startMark: ?string, endMark: ?string) {\n if (_enabled) {\n invariant(\n typeof measureName === 'string' &&\n typeof startMark === 'string' &&\n typeof endMark === 'undefined',\n 'Only performance.measure(string, string) overload is supported.',\n );\n const topMark = _markStack[_markStackIndex];\n invariant(\n startMark === topMark,\n 'There was a mismatching performance.measure() call. ' +\n 'Expected \"%s\" but got \"%s.\"',\n topMark,\n startMark,\n );\n _markStackIndex--;\n // We can't use more descriptive measureName because Systrace doesn't\n // let us edit labels post factum.\n Systrace.endEvent();\n }\n },\n clearMarks(markName: string) {\n if (_enabled) {\n if (_markStackIndex === -1) {\n return;\n }\n if (markName === _markStack[_markStackIndex]) {\n // React uses this for \"cancelling\" started measurements.\n // Systrace doesn't support deleting measurements, so we just stop them.\n if (userTimingPolyfill != null) {\n userTimingPolyfill.measure(markName, markName);\n }\n }\n }\n },\n clearMeasures() {\n // React calls this to avoid memory leaks in browsers, but we don't keep\n // measurements anyway.\n },\n }\n : null;\n\nfunction installPerformanceHooks(polyfill) {\n if (polyfill) {\n if (global.performance === undefined) {\n global.performance = {};\n }\n\n Object.keys(polyfill).forEach(methodName => {\n if (typeof global.performance[methodName] !== 'function') {\n global.performance[methodName] = polyfill[methodName];\n }\n });\n }\n}\n\nconst Systrace = {\n installReactHook() {\n if (_enabled) {\n if (__DEV__) {\n installPerformanceHooks(userTimingPolyfill);\n }\n }\n _canInstallReactHook = true;\n },\n\n setEnabled(enabled: boolean) {\n if (_enabled !== enabled) {\n if (__DEV__) {\n if (enabled) {\n global.nativeTraceBeginLegacy &&\n global.nativeTraceBeginLegacy(TRACE_TAG_JS_VM_CALLS);\n } else {\n global.nativeTraceEndLegacy &&\n global.nativeTraceEndLegacy(TRACE_TAG_JS_VM_CALLS);\n }\n if (_canInstallReactHook) {\n if (enabled) {\n installPerformanceHooks(userTimingPolyfill);\n }\n }\n }\n _enabled = enabled;\n }\n },\n\n isEnabled(): boolean {\n return _enabled;\n },\n\n /**\n * beginEvent/endEvent for starting and then ending a profile within the same call stack frame\n **/\n beginEvent(\n profileName?: string | (() => string),\n args?: {[string]: string, ...},\n ) {\n if (_enabled) {\n const profileNameString =\n typeof profileName === 'function' ? profileName() : profileName;\n global.nativeTraceBeginSection(\n TRACE_TAG_REACT_APPS,\n profileNameString,\n args,\n );\n }\n },\n\n endEvent() {\n if (_enabled) {\n global.nativeTraceEndSection(TRACE_TAG_REACT_APPS);\n }\n },\n\n /**\n * beginAsyncEvent/endAsyncEvent for starting and then ending a profile where the end can either\n * occur on another thread or out of the current stack frame, eg await\n * the returned cookie variable should be used as input into the endAsyncEvent call to end the profile\n **/\n beginAsyncEvent(profileName?: string | (() => string)): number {\n const cookie = _asyncCookie;\n if (_enabled) {\n _asyncCookie++;\n const profileNameString =\n typeof profileName === 'function' ? profileName() : profileName;\n global.nativeTraceBeginAsyncSection(\n TRACE_TAG_REACT_APPS,\n profileNameString,\n cookie,\n );\n }\n return cookie;\n },\n\n endAsyncEvent(profileName?: string | (() => string), cookie?: number) {\n if (_enabled) {\n const profileNameString =\n typeof profileName === 'function' ? profileName() : profileName;\n global.nativeTraceEndAsyncSection(\n TRACE_TAG_REACT_APPS,\n profileNameString,\n cookie,\n );\n }\n },\n\n /**\n * counterEvent registers the value to the profileName on the systrace timeline\n **/\n counterEvent(profileName?: string | (() => string), value?: number) {\n if (_enabled) {\n const profileNameString =\n typeof profileName === 'function' ? profileName() : profileName;\n global.nativeTraceCounter &&\n global.nativeTraceCounter(\n TRACE_TAG_REACT_APPS,\n profileNameString,\n value,\n );\n }\n },\n};\n\nif (__DEV__) {\n // The metro require polyfill can not have dependencies (true for all polyfills).\n // Ensure that `Systrace` is available in polyfill by exposing it globally.\n global[(global.__METRO_GLOBAL_PREFIX__ || '') + '__SYSTRACE'] = Systrace;\n}\n\nmodule.exports = Systrace;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\n/**\n * Sets up the console and exception handling (redbox) for React Native.\n * You can use this module directly, or just require InitializeCore.\n */\nconst ExceptionsManager = require('./ExceptionsManager');\nExceptionsManager.installConsoleErrorReporter();\n\n// Set up error handler\nif (!global.__fbDisableExceptionsManager) {\n const handleError = (e, isFatal) => {\n try {\n ExceptionsManager.handleException(e, isFatal);\n } catch (ee) {\n console.log('Failed to print error: ', ee.message);\n throw e;\n }\n };\n\n const ErrorUtils = require('../vendor/core/ErrorUtils');\n ErrorUtils.setGlobalHandler(handleError);\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nimport type {ExtendedError} from './ExtendedError';\nimport type {ExceptionData} from './NativeExceptionsManager';\n\nclass SyntheticError extends Error {\n name: string = '';\n}\n\ntype ExceptionDecorator = ExceptionData => ExceptionData;\n\nlet userExceptionDecorator: ?ExceptionDecorator;\nlet inUserExceptionDecorator = false;\n\n/**\n * Allows the app to add information to the exception report before it is sent\n * to native. This API is not final.\n */\n\nfunction unstable_setExceptionDecorator(\n exceptionDecorator: ?ExceptionDecorator,\n) {\n userExceptionDecorator = exceptionDecorator;\n}\n\nfunction preprocessException(data: ExceptionData): ExceptionData {\n if (userExceptionDecorator && !inUserExceptionDecorator) {\n inUserExceptionDecorator = true;\n try {\n return userExceptionDecorator(data);\n } catch {\n // Fall through\n } finally {\n inUserExceptionDecorator = false;\n }\n }\n return data;\n}\n\n/**\n * Handles the developer-visible aspect of errors and exceptions\n */\nlet exceptionID = 0;\nfunction reportException(\n e: ExtendedError,\n isFatal: boolean,\n reportToConsole: boolean, // only true when coming from handleException; the error has not yet been logged\n) {\n const NativeExceptionsManager = require('./NativeExceptionsManager').default;\n if (NativeExceptionsManager) {\n const parseErrorStack = require('./Devtools/parseErrorStack');\n const stack = parseErrorStack(e?.stack);\n const currentExceptionID = ++exceptionID;\n const originalMessage = e.message || '';\n let message = originalMessage;\n if (e.componentStack != null) {\n message += `\\n\\nThis error is located at:${e.componentStack}`;\n }\n const namePrefix = e.name == null || e.name === '' ? '' : `${e.name}: `;\n\n if (!message.startsWith(namePrefix)) {\n message = namePrefix + message;\n }\n\n message =\n e.jsEngine == null ? message : `${message}, js engine: ${e.jsEngine}`;\n\n const isHandledByLogBox =\n e.forceRedbox !== true && !global.RN$Bridgeless && !global.RN$Express;\n\n const data = preprocessException({\n message,\n originalMessage: message === originalMessage ? null : originalMessage,\n name: e.name == null || e.name === '' ? null : e.name,\n componentStack:\n typeof e.componentStack === 'string' ? e.componentStack : null,\n stack,\n id: currentExceptionID,\n isFatal,\n extraData: {\n jsEngine: e.jsEngine,\n rawStack: e.stack,\n\n // Hack to hide native redboxes when in the LogBox experiment.\n // This is intentionally untyped and stuffed here, because it is temporary.\n suppressRedBox: isHandledByLogBox,\n },\n });\n\n if (reportToConsole) {\n // we feed back into console.error, to make sure any methods that are\n // monkey patched on top of console.error are called when coming from\n // handleException\n console.error(data.message);\n }\n\n if (__DEV__ && isHandledByLogBox) {\n const LogBox = require('../LogBox/LogBox');\n LogBox.addException({\n ...data,\n isComponentError: !!e.isComponentError,\n });\n }\n\n if (isFatal || e.type !== 'warn') {\n NativeExceptionsManager.reportException(data);\n\n if (__DEV__ && !global.RN$Express) {\n if (e.preventSymbolication === true) {\n return;\n }\n const symbolicateStackTrace = require('./Devtools/symbolicateStackTrace');\n symbolicateStackTrace(stack)\n .then(({stack: prettyStack}) => {\n if (prettyStack) {\n NativeExceptionsManager.updateExceptionMessage(\n data.message,\n prettyStack,\n currentExceptionID,\n );\n } else {\n throw new Error('The stack is null');\n }\n })\n .catch(error => {\n console.log('Unable to symbolicate stack trace: ' + error.message);\n });\n }\n }\n } else if (reportToConsole) {\n // we feed back into console.error, to make sure any methods that are\n // monkey patched on top of console.error are called when coming from\n // handleException\n console.error(e);\n }\n}\n\ndeclare var console: typeof console & {\n _errorOriginal: typeof console.error,\n reportErrorsAsExceptions: boolean,\n ...\n};\n\n// If we trigger console.error _from_ handleException,\n// we do want to make sure that console.error doesn't trigger error reporting again\nlet inExceptionHandler = false;\n\n/**\n * Logs exceptions to the (native) console and displays them\n */\nfunction handleException(e: mixed, isFatal: boolean) {\n let error: Error;\n if (e instanceof Error) {\n error = e;\n } else {\n // Workaround for reporting errors caused by `throw 'some string'`\n // Unfortunately there is no way to figure out the stacktrace in this\n // case, so if you ended up here trying to trace an error, look for\n // `throw ''` somewhere in your codebase.\n error = new SyntheticError(e);\n }\n try {\n inExceptionHandler = true;\n /* $FlowFixMe[class-object-subtyping] added when improving typing for this\n * parameters */\n reportException(error, isFatal, /*reportToConsole*/ true);\n } finally {\n inExceptionHandler = false;\n }\n}\n\nfunction reactConsoleErrorHandler(...args) {\n // bubble up to any original handlers\n console._errorOriginal(...args);\n if (!console.reportErrorsAsExceptions) {\n return;\n }\n if (inExceptionHandler) {\n // The fundamental trick here is that are multiple entry point to logging errors:\n // (see D19743075 for more background)\n //\n // 1. An uncaught exception being caught by the global handler\n // 2. An error being logged throw console.error\n //\n // However, console.error is monkey patched multiple times: by this module, and by the\n // DevTools setup that sends messages to Metro.\n // The patching order cannot be relied upon.\n //\n // So, some scenarios that are handled by this flag:\n //\n // Logging an error:\n // 1. console.error called from user code\n // 2. (possibly) arrives _first_ at DevTool handler, send to Metro\n // 3. Bubbles to here\n // 4. goes into report Exception.\n // 5. should not trigger console.error again, to avoid looping / logging twice\n // 6. should still bubble up to original console\n // (which might either be console.log, or the DevTools handler in case it patched _earlier_ and (2) didn't happen)\n //\n // Throwing an uncaught exception:\n // 1. exception thrown\n // 2. picked up by handleException\n // 3. should be send to console.error (not console._errorOriginal, as DevTools might have patched _later_ and it needs to send it to Metro)\n // 4. that _might_ bubble again to the `reactConsoleErrorHandle` defined here\n // -> should not handle exception _again_, to avoid looping / showing twice (this code branch)\n // 5. should still bubble up to original console (which might either be console.log, or the DevTools handler in case that one patched _earlier_)\n return;\n }\n\n let error;\n\n const firstArg = args[0];\n if (firstArg?.stack) {\n // reportException will console.error this with high enough fidelity.\n error = firstArg;\n } else {\n const stringifySafe = require('../Utilities/stringifySafe').default;\n if (typeof firstArg === 'string' && firstArg.startsWith('Warning: ')) {\n // React warnings use console.error so that a stack trace is shown, but\n // we don't (currently) want these to show a redbox\n // (Note: Logic duplicated in polyfills/console.js.)\n return;\n }\n const message = args\n .map(arg => (typeof arg === 'string' ? arg : stringifySafe(arg)))\n .join(' ');\n\n error = new SyntheticError(message);\n error.name = 'console.error';\n }\n\n reportException(\n /* $FlowFixMe[class-object-subtyping] added when improving typing for this\n * parameters */\n error,\n false, // isFatal\n false, // reportToConsole\n );\n}\n\n/**\n * Shows a redbox with stacktrace for all console.error messages. Disable by\n * setting `console.reportErrorsAsExceptions = false;` in your app.\n */\nfunction installConsoleErrorReporter() {\n // Enable reportErrorsAsExceptions\n if (console._errorOriginal) {\n return; // already installed\n }\n // Flow doesn't like it when you set arbitrary values on a global object\n console._errorOriginal = console.error.bind(console);\n console.error = reactConsoleErrorHandler;\n if (console.reportErrorsAsExceptions === undefined) {\n // Individual apps can disable this\n // Flow doesn't like it when you set arbitrary values on a global object\n console.reportErrorsAsExceptions = true;\n }\n}\n\nmodule.exports = {\n handleException,\n installConsoleErrorReporter,\n SyntheticError,\n unstable_setExceptionDecorator,\n};\n","var getPrototypeOf = require(\"./getPrototypeOf.js\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nvar isNativeFunction = require(\"./isNativeFunction.js\");\n\nvar construct = require(\"./construct.js\");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports = _isNativeReflectConstruct;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport type StackFrame = {|\n column: ?number,\n file: ?string,\n lineNumber: ?number,\n methodName: string,\n collapse?: boolean,\n|};\n\nexport type ExceptionData = {\n message: string,\n originalMessage: ?string,\n name: ?string,\n componentStack: ?string,\n stack: Array,\n id: number,\n isFatal: boolean,\n // flowlint-next-line unclear-type:off\n extraData?: Object,\n ...\n};\n\nexport interface Spec extends TurboModule {\n // Deprecated: Use `reportException`\n +reportFatalException: (\n message: string,\n stack: Array,\n exceptionId: number,\n ) => void;\n // Deprecated: Use `reportException`\n +reportSoftException: (\n message: string,\n stack: Array,\n exceptionId: number,\n ) => void;\n +reportException?: (data: ExceptionData) => void;\n +updateExceptionMessage: (\n message: string,\n stack: Array,\n exceptionId: number,\n ) => void;\n // TODO(T53311281): This is a noop on iOS now. Implement it.\n +dismissRedbox?: () => void;\n}\n\nconst Platform = require('../Utilities/Platform');\n\nconst NativeModule = TurboModuleRegistry.getEnforcing(\n 'ExceptionsManager',\n);\n\nconst ExceptionsManager = {\n reportFatalException(\n message: string,\n stack: Array,\n exceptionId: number,\n ) {\n NativeModule.reportFatalException(message, stack, exceptionId);\n },\n reportSoftException(\n message: string,\n stack: Array,\n exceptionId: number,\n ) {\n NativeModule.reportSoftException(message, stack, exceptionId);\n },\n updateExceptionMessage(\n message: string,\n stack: Array,\n exceptionId: number,\n ) {\n NativeModule.updateExceptionMessage(message, stack, exceptionId);\n },\n dismissRedbox(): void {\n if (Platform.OS !== 'ios' && NativeModule.dismissRedbox) {\n // TODO(T53311281): This is a noop on iOS now. Implement it.\n NativeModule.dismissRedbox();\n }\n },\n reportException(data: ExceptionData): void {\n if (NativeModule.reportException) {\n NativeModule.reportException(data);\n return;\n }\n if (data.isFatal) {\n ExceptionsManager.reportFatalException(data.message, data.stack, data.id);\n } else {\n ExceptionsManager.reportSoftException(data.message, data.stack, data.id);\n }\n },\n};\n\nexport default ExceptionsManager;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nconst NativeModules = require('../BatchedBridge/NativeModules');\nimport type {TurboModule} from './RCTExport';\nimport invariant from 'invariant';\n\nconst turboModuleProxy = global.__turboModuleProxy;\n\nfunction requireModule(name: string): ?T {\n // Bridgeless mode requires TurboModules\n if (!global.RN$Bridgeless) {\n // Backward compatibility layer during migration.\n const legacyModule = NativeModules[name];\n if (legacyModule != null) {\n return ((legacyModule: $FlowFixMe): T);\n }\n }\n\n if (turboModuleProxy != null) {\n const module: ?T = turboModuleProxy(name);\n return module;\n }\n\n return null;\n}\n\nexport function get(name: string): ?T {\n return requireModule(name);\n}\n\nexport function getEnforcing(name: string): T {\n const module = requireModule(name);\n invariant(\n module != null,\n `TurboModuleRegistry.getEnforcing(...): '${name}' could not be found. ` +\n 'Verify that a module by this name is registered in the native binary.',\n );\n return module;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst BatchedBridge = require('./BatchedBridge');\n\nconst invariant = require('invariant');\n\nimport type {ExtendedError} from '../Core/ExtendedError';\n\nexport type ModuleConfig = [\n string /* name */,\n ?{...} /* constants */,\n ?$ReadOnlyArray /* functions */,\n ?$ReadOnlyArray /* promise method IDs */,\n ?$ReadOnlyArray /* sync method IDs */,\n];\n\nexport type MethodType = 'async' | 'promise' | 'sync';\n\nfunction genModule(\n config: ?ModuleConfig,\n moduleID: number,\n): ?{\n name: string,\n module?: {...},\n ...\n} {\n if (!config) {\n return null;\n }\n\n const [moduleName, constants, methods, promiseMethods, syncMethods] = config;\n invariant(\n !moduleName.startsWith('RCT') && !moduleName.startsWith('RK'),\n \"Module name prefixes should've been stripped by the native side \" +\n \"but wasn't for \" +\n moduleName,\n );\n\n if (!constants && !methods) {\n // Module contents will be filled in lazily later\n return {name: moduleName};\n }\n\n const module = {};\n methods &&\n methods.forEach((methodName, methodID) => {\n const isPromise =\n (promiseMethods && arrayContains(promiseMethods, methodID)) || false;\n const isSync =\n (syncMethods && arrayContains(syncMethods, methodID)) || false;\n invariant(\n !isPromise || !isSync,\n 'Cannot have a method that is both async and a sync hook',\n );\n const methodType = isPromise ? 'promise' : isSync ? 'sync' : 'async';\n module[methodName] = genMethod(moduleID, methodID, methodType);\n });\n\n Object.assign(module, constants);\n\n if (module.getConstants == null) {\n module.getConstants = () => constants || Object.freeze({});\n } else {\n console.warn(\n `Unable to define method 'getConstants()' on NativeModule '${moduleName}'. NativeModule '${moduleName}' already has a constant or method called 'getConstants'. Please remove it.`,\n );\n }\n\n if (__DEV__) {\n BatchedBridge.createDebugLookup(moduleID, moduleName, methods);\n }\n\n return {name: moduleName, module};\n}\n\n// export this method as a global so we can call it from native\nglobal.__fbGenNativeModule = genModule;\n\nfunction loadModule(name: string, moduleID: number): ?{...} {\n invariant(\n global.nativeRequireModuleConfig,\n \"Can't lazily create module without nativeRequireModuleConfig\",\n );\n const config = global.nativeRequireModuleConfig(name);\n const info = genModule(config, moduleID);\n return info && info.module;\n}\n\nfunction genMethod(moduleID: number, methodID: number, type: MethodType) {\n let fn = null;\n if (type === 'promise') {\n fn = function promiseMethodWrapper(...args: Array) {\n // In case we reject, capture a useful stack trace here.\n /* $FlowFixMe[class-object-subtyping] added when improving typing for\n * this parameters */\n const enqueueingFrameError: ExtendedError = new Error();\n return new Promise((resolve, reject) => {\n BatchedBridge.enqueueNativeCall(\n moduleID,\n methodID,\n args,\n data => resolve(data),\n errorData =>\n reject(\n updateErrorWithErrorData(\n (errorData: $FlowFixMe),\n enqueueingFrameError,\n ),\n ),\n );\n });\n };\n } else {\n fn = function nonPromiseMethodWrapper(...args: Array) {\n const lastArg = args.length > 0 ? args[args.length - 1] : null;\n const secondLastArg = args.length > 1 ? args[args.length - 2] : null;\n const hasSuccessCallback = typeof lastArg === 'function';\n const hasErrorCallback = typeof secondLastArg === 'function';\n hasErrorCallback &&\n invariant(\n hasSuccessCallback,\n 'Cannot have a non-function arg after a function arg.',\n );\n // $FlowFixMe[incompatible-type]\n const onSuccess: ?(mixed) => void = hasSuccessCallback ? lastArg : null;\n // $FlowFixMe[incompatible-type]\n const onFail: ?(mixed) => void = hasErrorCallback ? secondLastArg : null;\n const callbackCount = hasSuccessCallback + hasErrorCallback;\n const newArgs = args.slice(0, args.length - callbackCount);\n if (type === 'sync') {\n return BatchedBridge.callNativeSyncHook(\n moduleID,\n methodID,\n newArgs,\n onFail,\n onSuccess,\n );\n } else {\n BatchedBridge.enqueueNativeCall(\n moduleID,\n methodID,\n newArgs,\n onFail,\n onSuccess,\n );\n }\n };\n }\n fn.type = type;\n return fn;\n}\n\nfunction arrayContains(array: $ReadOnlyArray, value: T): boolean {\n return array.indexOf(value) !== -1;\n}\n\nfunction updateErrorWithErrorData(\n errorData: {message: string, ...},\n error: ExtendedError,\n): ExtendedError {\n /* $FlowFixMe[class-object-subtyping] added when improving typing for this\n * parameters */\n return Object.assign(error, errorData || {});\n}\n\nlet NativeModules: {[moduleName: string]: $FlowFixMe, ...} = {};\nif (global.nativeModuleProxy) {\n NativeModules = global.nativeModuleProxy;\n} else if (!global.nativeExtensions) {\n const bridgeConfig = global.__fbBatchedBridgeConfig;\n invariant(\n bridgeConfig,\n '__fbBatchedBridgeConfig is not set, cannot invoke native modules',\n );\n\n const defineLazyObjectProperty = require('../Utilities/defineLazyObjectProperty');\n (bridgeConfig.remoteModuleConfig || []).forEach(\n (config: ModuleConfig, moduleID: number) => {\n // Initially this config will only contain the module name when running in JSC. The actual\n // configuration of the module will be lazily loaded.\n const info = genModule(config, moduleID);\n if (!info) {\n return;\n }\n\n if (info.module) {\n NativeModules[info.name] = info.module;\n }\n // If there's no module config, define a lazy getter\n else {\n defineLazyObjectProperty(NativeModules, info.name, {\n get: () => loadModule(info.name, moduleID),\n });\n }\n },\n );\n}\n\nmodule.exports = NativeModules;\n","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst MessageQueue = require('./MessageQueue');\n\nconst BatchedBridge: MessageQueue = new MessageQueue();\n\n// Wire up the batched bridge on the global object so that we can call into it.\n// Ideally, this would be the inverse relationship. I.e. the native environment\n// provides this global directly with its script embedded. Then this module\n// would export it. A possible fix would be to trim the dependencies in\n// MessageQueue to its minimal features and embed that in the native runtime.\n\nObject.defineProperty(global, '__fbBatchedBridge', {\n configurable: true,\n value: BatchedBridge,\n});\n\nmodule.exports = BatchedBridge;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nconst ErrorUtils = require('../vendor/core/ErrorUtils');\nconst Systrace = require('../Performance/Systrace');\n\nconst deepFreezeAndThrowOnMutationInDev = require('../Utilities/deepFreezeAndThrowOnMutationInDev');\nconst invariant = require('invariant');\nconst stringifySafe = require('../Utilities/stringifySafe').default;\nconst warnOnce = require('../Utilities/warnOnce');\n\nexport type SpyData = {\n type: number,\n module: ?string,\n method: string | number,\n args: mixed[],\n ...\n};\n\nconst TO_JS = 0;\nconst TO_NATIVE = 1;\n\nconst MODULE_IDS = 0;\nconst METHOD_IDS = 1;\nconst PARAMS = 2;\nconst MIN_TIME_BETWEEN_FLUSHES_MS = 5;\n\n// eslint-disable-next-line no-bitwise\nconst TRACE_TAG_REACT_APPS = 1 << 17;\n\nconst DEBUG_INFO_LIMIT = 32;\n\nclass MessageQueue {\n _lazyCallableModules: {[key: string]: (void) => {...}, ...};\n _queue: [number[], number[], mixed[], number];\n _successCallbacks: Map void>;\n _failureCallbacks: Map void>;\n _callID: number;\n _lastFlush: number;\n _eventLoopStartTime: number;\n _reactNativeMicrotasksCallback: ?() => void;\n\n _debugInfo: {[number]: [number, number], ...};\n _remoteModuleTable: {[number]: string, ...};\n _remoteMethodTable: {[number]: $ReadOnlyArray, ...};\n\n __spy: ?(data: SpyData) => void;\n\n constructor() {\n this._lazyCallableModules = {};\n this._queue = [[], [], [], 0];\n this._successCallbacks = new Map();\n this._failureCallbacks = new Map();\n this._callID = 0;\n this._lastFlush = 0;\n this._eventLoopStartTime = Date.now();\n this._reactNativeMicrotasksCallback = null;\n\n if (__DEV__) {\n this._debugInfo = {};\n this._remoteModuleTable = {};\n this._remoteMethodTable = {};\n }\n\n // $FlowFixMe[cannot-write]\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.callFunctionReturnFlushedQueue = this.callFunctionReturnFlushedQueue.bind(\n this,\n );\n // $FlowFixMe[cannot-write]\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.flushedQueue = this.flushedQueue.bind(this);\n\n // $FlowFixMe[cannot-write]\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.invokeCallbackAndReturnFlushedQueue = this.invokeCallbackAndReturnFlushedQueue.bind(\n this,\n );\n }\n\n /**\n * Public APIs\n */\n\n static spy(spyOrToggle: boolean | ((data: SpyData) => void)) {\n if (spyOrToggle === true) {\n MessageQueue.prototype.__spy = info => {\n console.log(\n `${info.type === TO_JS ? 'N->JS' : 'JS->N'} : ` +\n `${info.module != null ? info.module + '.' : ''}${info.method}` +\n `(${JSON.stringify(info.args)})`,\n );\n };\n } else if (spyOrToggle === false) {\n MessageQueue.prototype.__spy = null;\n } else {\n MessageQueue.prototype.__spy = spyOrToggle;\n }\n }\n\n callFunctionReturnFlushedQueue(\n module: string,\n method: string,\n args: mixed[],\n ): null | [Array, Array, Array, number] {\n this.__guard(() => {\n this.__callFunction(module, method, args);\n });\n\n return this.flushedQueue();\n }\n\n invokeCallbackAndReturnFlushedQueue(\n cbID: number,\n args: mixed[],\n ): null | [Array, Array, Array, number] {\n this.__guard(() => {\n this.__invokeCallback(cbID, args);\n });\n\n return this.flushedQueue();\n }\n\n flushedQueue(): null | [Array, Array, Array, number] {\n this.__guard(() => {\n this.__callReactNativeMicrotasks();\n });\n\n const queue = this._queue;\n this._queue = [[], [], [], this._callID];\n return queue[0].length ? queue : null;\n }\n\n getEventLoopRunningTime(): number {\n return Date.now() - this._eventLoopStartTime;\n }\n\n registerCallableModule(name: string, module: {...}) {\n this._lazyCallableModules[name] = () => module;\n }\n\n registerLazyCallableModule(name: string, factory: void => interface {}) {\n let module: interface {};\n let getValue: ?(void) => interface {} = factory;\n this._lazyCallableModules[name] = () => {\n if (getValue) {\n module = getValue();\n getValue = null;\n }\n /* $FlowFixMe[class-object-subtyping] added when improving typing for\n * this parameters */\n return module;\n };\n }\n\n getCallableModule(name: string): {...} | null {\n const getValue = this._lazyCallableModules[name];\n return getValue ? getValue() : null;\n }\n\n callNativeSyncHook(\n moduleID: number,\n methodID: number,\n params: mixed[],\n onFail: ?(...mixed[]) => void,\n onSucc: ?(...mixed[]) => void,\n ): mixed {\n if (__DEV__) {\n invariant(\n global.nativeCallSyncHook,\n 'Calling synchronous methods on native ' +\n 'modules is not supported in Chrome.\\n\\n Consider providing alternative ' +\n 'methods to expose this method in debug mode, e.g. by exposing constants ' +\n 'ahead-of-time.',\n );\n }\n this.processCallbacks(moduleID, methodID, params, onFail, onSucc);\n return global.nativeCallSyncHook(moduleID, methodID, params);\n }\n\n processCallbacks(\n moduleID: number,\n methodID: number,\n params: mixed[],\n onFail: ?(...mixed[]) => void,\n onSucc: ?(...mixed[]) => void,\n ): void {\n if (onFail || onSucc) {\n if (__DEV__) {\n this._debugInfo[this._callID] = [moduleID, methodID];\n if (this._callID > DEBUG_INFO_LIMIT) {\n delete this._debugInfo[this._callID - DEBUG_INFO_LIMIT];\n }\n if (this._successCallbacks.size > 500) {\n const info = {};\n this._successCallbacks.forEach((_, callID) => {\n const debug = this._debugInfo[callID];\n const module = debug && this._remoteModuleTable[debug[0]];\n const method = debug && this._remoteMethodTable[debug[0]][debug[1]];\n info[callID] = {module, method};\n });\n warnOnce(\n 'excessive-number-of-pending-callbacks',\n `Please report: Excessive number of pending callbacks: ${\n this._successCallbacks.size\n }. Some pending callbacks that might have leaked by never being called from native code: ${stringifySafe(\n info,\n )}`,\n );\n }\n }\n // Encode callIDs into pairs of callback identifiers by shifting left and using the rightmost bit\n // to indicate fail (0) or success (1)\n // eslint-disable-next-line no-bitwise\n onFail && params.push(this._callID << 1);\n // eslint-disable-next-line no-bitwise\n onSucc && params.push((this._callID << 1) | 1);\n this._successCallbacks.set(this._callID, onSucc);\n this._failureCallbacks.set(this._callID, onFail);\n }\n if (__DEV__) {\n global.nativeTraceBeginAsyncFlow &&\n global.nativeTraceBeginAsyncFlow(\n TRACE_TAG_REACT_APPS,\n 'native',\n this._callID,\n );\n }\n this._callID++;\n }\n\n enqueueNativeCall(\n moduleID: number,\n methodID: number,\n params: mixed[],\n onFail: ?(...mixed[]) => void,\n onSucc: ?(...mixed[]) => void,\n ) {\n this.processCallbacks(moduleID, methodID, params, onFail, onSucc);\n\n this._queue[MODULE_IDS].push(moduleID);\n this._queue[METHOD_IDS].push(methodID);\n\n if (__DEV__) {\n // Validate that parameters passed over the bridge are\n // folly-convertible. As a special case, if a prop value is a\n // function it is permitted here, and special-cased in the\n // conversion.\n const isValidArgument = val => {\n switch (typeof val) {\n case 'undefined':\n case 'boolean':\n case 'string':\n return true;\n case 'number':\n return isFinite(val);\n case 'object':\n if (val == null) {\n return true;\n }\n\n if (Array.isArray(val)) {\n return val.every(isValidArgument);\n }\n\n for (const k in val) {\n if (typeof val[k] !== 'function' && !isValidArgument(val[k])) {\n return false;\n }\n }\n\n return true;\n case 'function':\n return false;\n default:\n return false;\n }\n };\n\n // Replacement allows normally non-JSON-convertible values to be\n // seen. There is ambiguity with string values, but in context,\n // it should at least be a strong hint.\n const replacer = (key, val) => {\n const t = typeof val;\n if (t === 'function') {\n return '<>';\n } else if (t === 'number' && !isFinite(val)) {\n return '<<' + val.toString() + '>>';\n } else {\n return val;\n }\n };\n\n // Note that JSON.stringify\n invariant(\n isValidArgument(params),\n '%s is not usable as a native method argument',\n JSON.stringify(params, replacer),\n );\n\n // The params object should not be mutated after being queued\n deepFreezeAndThrowOnMutationInDev(params);\n }\n this._queue[PARAMS].push(params);\n\n const now = Date.now();\n if (\n global.nativeFlushQueueImmediate &&\n now - this._lastFlush >= MIN_TIME_BETWEEN_FLUSHES_MS\n ) {\n const queue = this._queue;\n this._queue = [[], [], [], this._callID];\n this._lastFlush = now;\n global.nativeFlushQueueImmediate(queue);\n }\n Systrace.counterEvent('pending_js_to_native_queue', this._queue[0].length);\n if (__DEV__ && this.__spy && isFinite(moduleID)) {\n this.__spy({\n type: TO_NATIVE,\n module: this._remoteModuleTable[moduleID],\n method: this._remoteMethodTable[moduleID][methodID],\n args: params,\n });\n } else if (this.__spy) {\n this.__spy({\n type: TO_NATIVE,\n module: moduleID + '',\n method: methodID,\n args: params,\n });\n }\n }\n\n createDebugLookup(\n moduleID: number,\n name: string,\n methods: ?$ReadOnlyArray,\n ) {\n if (__DEV__) {\n this._remoteModuleTable[moduleID] = name;\n this._remoteMethodTable[moduleID] = methods || [];\n }\n }\n\n // For JSTimers to register its callback. Otherwise a circular dependency\n // between modules is introduced. Note that only one callback may be\n // registered at a time.\n setReactNativeMicrotasksCallback(fn: () => void) {\n this._reactNativeMicrotasksCallback = fn;\n }\n\n /**\n * Private methods\n */\n\n __guard(fn: () => void) {\n if (this.__shouldPauseOnThrow()) {\n fn();\n } else {\n try {\n fn();\n } catch (error) {\n ErrorUtils.reportFatalError(error);\n }\n }\n }\n\n // MessageQueue installs a global handler to catch all exceptions where JS users can register their own behavior\n // This handler makes all exceptions to be propagated from inside MessageQueue rather than by the VM at their origin\n // This makes stacktraces to be placed at MessageQueue rather than at where they were launched\n // The parameter DebuggerInternal.shouldPauseOnThrow is used to check before catching all exceptions and\n // can be configured by the VM or any Inspector\n __shouldPauseOnThrow(): boolean {\n return (\n // $FlowFixMe[cannot-resolve-name]\n typeof DebuggerInternal !== 'undefined' &&\n DebuggerInternal.shouldPauseOnThrow === true // eslint-disable-line no-undef\n );\n }\n\n __callReactNativeMicrotasks() {\n Systrace.beginEvent('JSTimers.callReactNativeMicrotasks()');\n if (this._reactNativeMicrotasksCallback != null) {\n this._reactNativeMicrotasksCallback();\n }\n Systrace.endEvent();\n }\n\n __callFunction(module: string, method: string, args: mixed[]): void {\n this._lastFlush = Date.now();\n this._eventLoopStartTime = this._lastFlush;\n if (__DEV__ || this.__spy) {\n Systrace.beginEvent(`${module}.${method}(${stringifySafe(args)})`);\n } else {\n Systrace.beginEvent(`${module}.${method}(...)`);\n }\n if (this.__spy) {\n this.__spy({type: TO_JS, module, method, args});\n }\n const moduleMethods = this.getCallableModule(module);\n invariant(\n !!moduleMethods,\n `Module ${module} is not a registered callable module (calling ${method}). A frequent cause of the error is that the application entry file path is incorrect.\n This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native.`,\n );\n invariant(\n !!moduleMethods[method],\n `Method ${method} does not exist on module ${module}`,\n );\n moduleMethods[method].apply(moduleMethods, args);\n Systrace.endEvent();\n }\n\n __invokeCallback(cbID: number, args: mixed[]) {\n this._lastFlush = Date.now();\n this._eventLoopStartTime = this._lastFlush;\n\n // The rightmost bit of cbID indicates fail (0) or success (1), the other bits are the callID shifted left.\n // eslint-disable-next-line no-bitwise\n const callID = cbID >>> 1;\n // eslint-disable-next-line no-bitwise\n const isSuccess = cbID & 1;\n const callback = isSuccess\n ? this._successCallbacks.get(callID)\n : this._failureCallbacks.get(callID);\n\n if (__DEV__) {\n const debug = this._debugInfo[callID];\n const module = debug && this._remoteModuleTable[debug[0]];\n const method = debug && this._remoteMethodTable[debug[0]][debug[1]];\n invariant(\n callback,\n `No callback found with cbID ${cbID} and callID ${callID} for ` +\n (method\n ? ` ${module}.${method} - most likely the callback was already invoked`\n : `module ${module || ''}`) +\n `. Args: '${stringifySafe(args)}'`,\n );\n const profileName = debug\n ? ''\n : cbID;\n if (callback && this.__spy) {\n this.__spy({type: TO_JS, module: null, method: profileName, args});\n }\n Systrace.beginEvent(\n `MessageQueue.invokeCallback(${profileName}, ${stringifySafe(args)})`,\n );\n }\n\n if (!callback) {\n return;\n }\n\n this._successCallbacks.delete(callID);\n this._failureCallbacks.delete(callID);\n callback(...args);\n\n if (__DEV__) {\n Systrace.endEvent();\n }\n }\n}\n\nmodule.exports = MessageQueue;\n","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nimport type {ErrorUtilsT} from '@react-native/polyfills/error-guard';\n\n/**\n * The particular require runtime that we are using looks for a global\n * `ErrorUtils` object and if it exists, then it requires modules with the\n * error handler specified via ErrorUtils.setGlobalHandler by calling the\n * require function with applyWithGuard. Since the require module is loaded\n * before any of the modules, this ErrorUtils must be defined (and the handler\n * set) globally before requiring anything.\n *\n * However, we still want to treat ErrorUtils as a module so that other modules\n * that use it aren't just using a global variable, so simply export the global\n * variable here. ErrorUtils is originally defined in a file named error-guard.js.\n */\nmodule.exports = (global.ErrorUtils: ErrorUtilsT);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\n/**\n * If your application is accepting different values for the same field over\n * time and is doing a diff on them, you can either (1) create a copy or\n * (2) ensure that those values are not mutated behind two passes.\n * This function helps you with (2) by freezing the object and throwing if\n * the user subsequently modifies the value.\n *\n * There are two caveats with this function:\n * - If the call site is not in strict mode, it will only throw when\n * mutating existing fields, adding a new one\n * will unfortunately fail silently :(\n * - If the object is already frozen or sealed, it will not continue the\n * deep traversal and will leave leaf nodes unfrozen.\n *\n * Freezing the object and adding the throw mechanism is expensive and will\n * only be used in DEV.\n */\nfunction deepFreezeAndThrowOnMutationInDev>(\n object: T,\n): T {\n if (__DEV__) {\n if (\n typeof object !== 'object' ||\n object === null ||\n Object.isFrozen(object) ||\n Object.isSealed(object)\n ) {\n return object;\n }\n\n // $FlowFixMe[not-an-object] `object` can be an array, but Object.keys works with arrays too\n const keys = Object.keys((object: {...} | Array));\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n const hasOwnProperty = Object.prototype.hasOwnProperty;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (hasOwnProperty.call(object, key)) {\n Object.defineProperty(object, key, {\n get: identity.bind(null, object[key]),\n });\n Object.defineProperty(object, key, {\n set: throwOnImmutableMutation.bind(null, key),\n });\n }\n }\n\n Object.freeze(object);\n Object.seal(object);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (hasOwnProperty.call(object, key)) {\n deepFreezeAndThrowOnMutationInDev(object[key]);\n }\n }\n }\n return object;\n}\n\nfunction throwOnImmutableMutation(key, value) {\n throw Error(\n 'You attempted to set the key `' +\n key +\n '` with the value `' +\n JSON.stringify(value) +\n '` on an object that is meant to be immutable ' +\n 'and has been frozen.',\n );\n}\n\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = deepFreezeAndThrowOnMutationInDev;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nimport invariant from 'invariant';\n\n/**\n * Tries to stringify with JSON.stringify and toString, but catches exceptions\n * (e.g. from circular objects) and always returns a string and never throws.\n */\nexport function createStringifySafeWithLimits(limits: {|\n maxDepth?: number,\n maxStringLimit?: number,\n maxArrayLimit?: number,\n maxObjectKeysLimit?: number,\n|}): mixed => string {\n const {\n maxDepth = Number.POSITIVE_INFINITY,\n maxStringLimit = Number.POSITIVE_INFINITY,\n maxArrayLimit = Number.POSITIVE_INFINITY,\n maxObjectKeysLimit = Number.POSITIVE_INFINITY,\n } = limits;\n const stack = [];\n function replacer(key: string, value: mixed): mixed {\n while (stack.length && this !== stack[0]) {\n stack.shift();\n }\n\n if (typeof value === 'string') {\n const truncatedString = '...(truncated)...';\n if (value.length > maxStringLimit + truncatedString.length) {\n return value.substring(0, maxStringLimit) + truncatedString;\n }\n return value;\n }\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n\n let retval = value;\n if (Array.isArray(value)) {\n if (stack.length >= maxDepth) {\n retval = `[ ... array with ${value.length} values ... ]`;\n } else if (value.length > maxArrayLimit) {\n retval = value\n .slice(0, maxArrayLimit)\n .concat([\n `... extra ${value.length - maxArrayLimit} values truncated ...`,\n ]);\n }\n } else {\n // Add refinement after Array.isArray call.\n invariant(typeof value === 'object', 'This was already found earlier');\n let keys = Object.keys(value);\n if (stack.length >= maxDepth) {\n retval = `{ ... object with ${keys.length} keys ... }`;\n } else if (keys.length > maxObjectKeysLimit) {\n // Return a sample of the keys.\n retval = {};\n for (let k of keys.slice(0, maxObjectKeysLimit)) {\n retval[k] = value[k];\n }\n const truncatedKey = '...(truncated keys)...';\n retval[truncatedKey] = keys.length - maxObjectKeysLimit;\n }\n }\n stack.unshift(retval);\n return retval;\n }\n\n return function stringifySafe(arg: mixed): string {\n if (arg === undefined) {\n return 'undefined';\n } else if (arg === null) {\n return 'null';\n } else if (typeof arg === 'function') {\n try {\n return arg.toString();\n } catch (e) {\n return '[function unknown]';\n }\n } else if (arg instanceof Error) {\n return arg.name + ': ' + arg.message;\n } else {\n // Perform a try catch, just in case the object has a circular\n // reference or stringify throws for some other reason.\n try {\n const ret = JSON.stringify(arg, replacer);\n if (ret === undefined) {\n return '[\"' + typeof arg + '\" failed to stringify]';\n }\n return ret;\n } catch (e) {\n if (typeof arg.toString === 'function') {\n try {\n // $FlowFixMe[incompatible-use] : toString shouldn't take any arguments in general.\n return arg.toString();\n } catch (E) {}\n }\n }\n }\n return '[\"' + typeof arg + '\" failed to stringify]';\n };\n}\n\nconst stringifySafe: mixed => string = createStringifySafeWithLimits({\n maxDepth: 10,\n maxStringLimit: 100,\n maxArrayLimit: 50,\n maxObjectKeysLimit: 50,\n});\n\nexport default stringifySafe;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\n/**\n * Defines a lazily evaluated property on the supplied `object`.\n */\nfunction defineLazyObjectProperty(\n object: interface {},\n name: string,\n descriptor: {\n get: () => T,\n enumerable?: boolean,\n writable?: boolean,\n ...\n },\n): void {\n const {get} = descriptor;\n const enumerable = descriptor.enumerable !== false;\n const writable = descriptor.writable !== false;\n\n let value;\n let valueSet = false;\n function getValue(): T {\n // WORKAROUND: A weird infinite loop occurs where calling `getValue` calls\n // `setValue` which calls `Object.defineProperty` which somehow triggers\n // `getValue` again. Adding `valueSet` breaks this loop.\n if (!valueSet) {\n // Calling `get()` here can trigger an infinite loop if it fails to\n // remove the getter on the property, which can happen when executing\n // JS in a V8 context. `valueSet = true` will break this loop, and\n // sets the value of the property to undefined, until the code in `get()`\n // finishes, at which point the property is set to the correct value.\n valueSet = true;\n setValue(get());\n }\n return value;\n }\n function setValue(newValue: T): void {\n value = newValue;\n valueSet = true;\n Object.defineProperty(object, name, {\n value: newValue,\n configurable: true,\n enumerable,\n writable,\n });\n }\n\n Object.defineProperty(object, name, {\n get: getValue,\n set: setValue,\n configurable: true,\n enumerable,\n });\n}\n\nmodule.exports = defineLazyObjectProperty;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nimport NativePlatformConstantsIOS from './NativePlatformConstantsIOS';\n\nexport type PlatformSelectSpec = {\n default?: D,\n native?: N,\n ios?: I,\n ...\n};\n\nconst Platform = {\n __constants: null,\n OS: 'ios',\n // $FlowFixMe[unsafe-getters-setters]\n get Version(): string {\n return this.constants.osVersion;\n },\n // $FlowFixMe[unsafe-getters-setters]\n get constants(): {|\n forceTouchAvailable: boolean,\n interfaceIdiom: string,\n isTesting: boolean,\n osVersion: string,\n reactNativeVersion: {|\n major: number,\n minor: number,\n patch: number,\n prerelease: ?number,\n |},\n systemName: string,\n |} {\n if (this.__constants == null) {\n this.__constants = NativePlatformConstantsIOS.getConstants();\n }\n return this.__constants;\n },\n // $FlowFixMe[unsafe-getters-setters]\n get isPad(): boolean {\n return this.constants.interfaceIdiom === 'pad';\n },\n /**\n * Deprecated, use `isTV` instead.\n */\n // $FlowFixMe[unsafe-getters-setters]\n get isTVOS(): boolean {\n return Platform.isTV;\n },\n // $FlowFixMe[unsafe-getters-setters]\n get isTV(): boolean {\n return this.constants.interfaceIdiom === 'tv';\n },\n // $FlowFixMe[unsafe-getters-setters]\n get isTesting(): boolean {\n if (__DEV__) {\n return this.constants.isTesting;\n }\n return false;\n },\n select: (spec: PlatformSelectSpec): D | N | I =>\n // $FlowFixMe[incompatible-return]\n 'ios' in spec ? spec.ios : 'native' in spec ? spec.native : spec.default,\n};\n\nmodule.exports = Platform;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n isTesting: boolean,\n reactNativeVersion: {|\n major: number,\n minor: number,\n patch: number,\n prerelease: ?number,\n |},\n forceTouchAvailable: boolean,\n osVersion: string,\n systemName: string,\n interfaceIdiom: string,\n |};\n}\n\nexport default (TurboModuleRegistry.getEnforcing(\n 'PlatformConstants',\n): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nimport type {StackFrame} from '../NativeExceptionsManager';\nimport type {HermesParsedStack} from './parseHermesStack';\n\nconst parseHermesStack = require('./parseHermesStack');\n\nfunction convertHermesStack(stack: HermesParsedStack): Array {\n const frames = [];\n for (const entry of stack.entries) {\n if (entry.type !== 'FRAME') {\n continue;\n }\n const {location, functionName} = entry;\n if (location.type === 'NATIVE') {\n continue;\n }\n frames.push({\n methodName: functionName,\n file: location.sourceUrl,\n lineNumber: location.line1Based,\n column:\n location.type === 'SOURCE'\n ? location.column1Based - 1\n : location.virtualOffset0Based,\n });\n }\n return frames;\n}\n\nfunction parseErrorStack(errorStack?: string): Array {\n if (errorStack == null) {\n return [];\n }\n\n const stacktraceParser = require('stacktrace-parser');\n const parsedStack = Array.isArray(errorStack)\n ? errorStack\n : global.HermesInternal\n ? convertHermesStack(parseHermesStack(errorStack))\n : stacktraceParser.parse(errorStack).map(frame => ({\n ...frame,\n column: frame.column != null ? frame.column - 1 : null,\n }));\n\n return parsedStack;\n}\n\nmodule.exports = parseErrorStack;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\ntype HermesStackLocationNative = {|\n +type: 'NATIVE',\n|};\n\ntype HermesStackLocationSource = {|\n +type: 'SOURCE',\n +sourceUrl: string,\n +line1Based: number,\n +column1Based: number,\n|};\n\ntype HermesStackLocationBytecode = {|\n +type: 'BYTECODE',\n +sourceUrl: string,\n +line1Based: number,\n +virtualOffset0Based: number,\n|};\n\ntype HermesStackLocation =\n | HermesStackLocationNative\n | HermesStackLocationSource\n | HermesStackLocationBytecode;\n\ntype HermesStackEntryFrame = {|\n +type: 'FRAME',\n +location: HermesStackLocation,\n +functionName: string,\n|};\n\ntype HermesStackEntrySkipped = {|\n +type: 'SKIPPED',\n +count: number,\n|};\n\ntype HermesStackEntry = HermesStackEntryFrame | HermesStackEntrySkipped;\n\nexport type HermesParsedStack = {|\n +message: string,\n +entries: $ReadOnlyArray,\n|};\n\n// Capturing groups:\n// 1. function name\n// 2. is this a native stack frame?\n// 3. is this a bytecode address or a source location?\n// 4. source URL (filename)\n// 5. line number (1 based)\n// 6. column number (1 based) or virtual offset (0 based)\nconst RE_FRAME = /^ {4}at (.+?)(?: \\((native)\\)?| \\((address at )?(.*?):(\\d+):(\\d+)\\))$/;\n\n// Capturing groups:\n// 1. count of skipped frames\nconst RE_SKIPPED = /^ {4}... skipping (\\d+) frames$/;\n\nfunction parseLine(line: string): ?HermesStackEntry {\n const asFrame = line.match(RE_FRAME);\n if (asFrame) {\n return {\n type: 'FRAME',\n functionName: asFrame[1],\n location:\n asFrame[2] === 'native'\n ? {type: 'NATIVE'}\n : asFrame[3] === 'address at '\n ? {\n type: 'BYTECODE',\n sourceUrl: asFrame[4],\n line1Based: Number.parseInt(asFrame[5], 10),\n virtualOffset0Based: Number.parseInt(asFrame[6], 10),\n }\n : {\n type: 'SOURCE',\n sourceUrl: asFrame[4],\n line1Based: Number.parseInt(asFrame[5], 10),\n column1Based: Number.parseInt(asFrame[6], 10),\n },\n };\n }\n const asSkipped = line.match(RE_SKIPPED);\n if (asSkipped) {\n return {\n type: 'SKIPPED',\n count: Number.parseInt(asSkipped[1], 10),\n };\n }\n}\n\nmodule.exports = function parseHermesStack(stack: string): HermesParsedStack {\n const lines = stack.split(/\\n/);\n let entries = [];\n let lastMessageLine = -1;\n for (let i = 0; i < lines.length; ++i) {\n const line = lines[i];\n if (!line) {\n continue;\n }\n const entry = parseLine(line);\n if (entry) {\n entries.push(entry);\n continue;\n }\n // No match - we're still in the message\n lastMessageLine = i;\n entries = [];\n }\n const message = lines.slice(0, lastMessageLine + 1).join('\\n');\n return {message, entries};\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar UNKNOWN_FUNCTION = '';\n/**\n * This parses the different stack traces and puts them into one format\n * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n */\n\nfunction parse(stackString) {\n var lines = stackString.split('\\n');\n return lines.reduce(function (stack, line) {\n var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n if (parseResult) {\n stack.push(parseResult);\n }\n\n return stack;\n }, []);\n}\nvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nfunction parseChrome(line) {\n var parts = chromeRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n var submatch = chromeEvalRe.exec(parts[2]);\n\n if (isEval && submatch != null) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n\n parts[3] = submatch[2]; // line\n\n parts[4] = submatch[3]; // column\n }\n\n return {\n file: !isNative ? parts[2] : null,\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: isNative ? [parts[2]] : [],\n lineNumber: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n}\n\nvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseWinjs(line) {\n var parts = winjsRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n return {\n file: parts[2],\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: [],\n lineNumber: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n}\n\nvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nfunction parseGecko(line) {\n var parts = geckoRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n var submatch = geckoEvalRe.exec(parts[3]);\n\n if (isEval && submatch != null) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n }\n\n return {\n file: parts[3],\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: parts[2] ? parts[2].split(',') : [],\n lineNumber: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n}\n\nvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\nfunction parseJSC(line) {\n var parts = javaScriptCoreRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n return {\n file: parts[3],\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: [],\n lineNumber: +parts[4],\n column: parts[5] ? +parts[5] : null\n };\n}\n\nvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseNode(line) {\n var parts = nodeRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n return {\n file: parts[2],\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: [],\n lineNumber: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n}\n\nexports.parse = parse;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nconst {polyfillGlobal} = require('../Utilities/PolyfillFunctions');\n\n/**\n * Set up Promise. The native Promise implementation throws the following error:\n * ERROR: Event loop not supported.\n *\n * If you don't need these polyfills, don't use InitializeCore; just directly\n * require the modules you need from InitializeCore for setup.\n */\n\n// If global.Promise is provided by Hermes, we are confident that it can provide\n// all the methods needed by React Native, so we can directly use it.\nif (global?.HermesInternal?.hasPromise?.()) {\n const HermesPromise = global.Promise;\n\n if (__DEV__) {\n if (typeof HermesPromise !== 'function') {\n console.error('HermesPromise does not exist');\n }\n global.HermesInternal?.enablePromiseRejectionTracker?.(\n require('../promiseRejectionTrackingOptions').default,\n );\n }\n} else {\n polyfillGlobal('Promise', () => require('../Promise'));\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nconst defineLazyObjectProperty = require('./defineLazyObjectProperty');\n\n/**\n * Sets an object's property. If a property with the same name exists, this will\n * replace it but maintain its descriptor configuration. The property will be\n * replaced with a lazy getter.\n *\n * In DEV mode the original property value will be preserved as `original[PropertyName]`\n * so that, if necessary, it can be restored. For example, if you want to route\n * network requests through DevTools (to trace them):\n *\n * global.XMLHttpRequest = global.originalXMLHttpRequest;\n *\n * @see https://github.com/facebook/react-native/issues/934\n */\nfunction polyfillObjectProperty(\n object: {...},\n name: string,\n getValue: () => T,\n): void {\n const descriptor = Object.getOwnPropertyDescriptor(object, name);\n if (__DEV__ && descriptor) {\n const backupName = `original${name[0].toUpperCase()}${name.substr(1)}`;\n Object.defineProperty(object, backupName, descriptor);\n }\n\n const {enumerable, writable, configurable = false} = descriptor || {};\n if (descriptor && !configurable) {\n console.error('Failed to set polyfill. ' + name + ' is not configurable.');\n return;\n }\n\n defineLazyObjectProperty(object, name, {\n get: getValue,\n enumerable: enumerable !== false,\n writable: writable !== false,\n });\n}\n\nfunction polyfillGlobal(name: string, getValue: () => T): void {\n polyfillObjectProperty(global, name, getValue);\n}\n\nmodule.exports = {polyfillObjectProperty, polyfillGlobal};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst Promise = require('promise/setimmediate/es6-extensions');\n\nrequire('promise/setimmediate/done');\nrequire('promise/setimmediate/finally');\n\nif (__DEV__) {\n require('promise/setimmediate/rejection-tracking').enable(\n require('./promiseRejectionTrackingOptions').default,\n );\n}\n\nmodule.exports = Promise;\n","'use strict';\n\n//This file contains the ES6 extensions to the core Promises/A+ API\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nvar TRUE = valuePromise(true);\nvar FALSE = valuePromise(false);\nvar NULL = valuePromise(null);\nvar UNDEFINED = valuePromise(undefined);\nvar ZERO = valuePromise(0);\nvar EMPTYSTRING = valuePromise('');\n\nfunction valuePromise(value) {\n var p = new Promise(Promise._0);\n p._V = 1;\n p._W = value;\n return p;\n}\nPromise.resolve = function (value) {\n if (value instanceof Promise) return value;\n\n if (value === null) return NULL;\n if (value === undefined) return UNDEFINED;\n if (value === true) return TRUE;\n if (value === false) return FALSE;\n if (value === 0) return ZERO;\n if (value === '') return EMPTYSTRING;\n\n if (typeof value === 'object' || typeof value === 'function') {\n try {\n var then = value.then;\n if (typeof then === 'function') {\n return new Promise(then.bind(value));\n }\n } catch (ex) {\n return new Promise(function (resolve, reject) {\n reject(ex);\n });\n }\n }\n return valuePromise(value);\n};\n\nvar iterableToArray = function (iterable) {\n if (typeof Array.from === 'function') {\n // ES2015+, iterables exist\n iterableToArray = Array.from;\n return Array.from(iterable);\n }\n\n // ES5, only arrays and array-likes exist\n iterableToArray = function (x) { return Array.prototype.slice.call(x); };\n return Array.prototype.slice.call(iterable);\n}\n\nPromise.all = function (arr) {\n var args = iterableToArray(arr);\n\n return new Promise(function (resolve, reject) {\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n if (val instanceof Promise && val.then === Promise.prototype.then) {\n while (val._V === 3) {\n val = val._W;\n }\n if (val._V === 1) return res(i, val._W);\n if (val._V === 2) reject(val._W);\n val.then(function (val) {\n res(i, val);\n }, reject);\n return;\n } else {\n var then = val.then;\n if (typeof then === 'function') {\n var p = new Promise(then.bind(val));\n p.then(function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n iterableToArray(values).forEach(function(value){\n Promise.resolve(value).then(resolve, reject);\n });\n });\n};\n\n/* Prototype Methods */\n\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\n","'use strict';\n\n\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._U = 0;\n this._V = 0;\n this._W = null;\n this._X = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._Y = null;\nPromise._Z = null;\nPromise._0 = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._V === 3) {\n self = self._W;\n }\n if (Promise._Y) {\n Promise._Y(self);\n }\n if (self._V === 0) {\n if (self._U === 0) {\n self._U = 1;\n self._X = deferred;\n return;\n }\n if (self._U === 1) {\n self._U = 2;\n self._X = [self._X, deferred];\n return;\n }\n self._X.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n setImmediate(function() {\n var cb = self._V === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._V === 1) {\n resolve(deferred.promise, self._W);\n } else {\n reject(deferred.promise, self._W);\n }\n return;\n }\n var ret = tryCallOne(cb, self._W);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._V = 3;\n self._W = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._V = 1;\n self._W = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._V = 2;\n self._W = newValue;\n if (Promise._Z) {\n Promise._Z(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._U === 1) {\n handle(self, self._X);\n self._X = null;\n }\n if (self._U === 2) {\n for (var i = 0; i < self._X.length; i++) {\n handle(self, self._X[i]);\n }\n self._X = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n","'use strict';\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\nPromise.prototype.done = function (onFulfilled, onRejected) {\n var self = arguments.length ? this.then.apply(this, arguments) : this;\n self.then(null, function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n });\n};\n","'use strict';\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\nPromise.prototype.finally = function (f) {\n return this.then(function (value) {\n return Promise.resolve(f()).then(function () {\n return value;\n });\n }, function (err) {\n return Promise.resolve(f()).then(function () {\n throw err;\n });\n });\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nconst {polyfillGlobal} = require('../Utilities/PolyfillFunctions');\nconst {hasNativeConstructor} = require('../Utilities/FeatureDetection');\n\n/**\n * Set up regenerator.\n * You can use this module directly, or just require InitializeCore.\n */\n\nlet hasNativeGenerator;\ntry {\n // If this function was lowered by regenerator-transform, it will try to\n // access `global.regeneratorRuntime` which doesn't exist yet and will throw.\n hasNativeGenerator = hasNativeConstructor(function*() {},\n 'GeneratorFunction');\n} catch {\n // In this case, we know generators are not provided natively.\n hasNativeGenerator = false;\n}\n\n// If generators are provided natively, which suggests that there was no\n// regenerator-transform, then there is no need to set up the runtime.\nif (!hasNativeGenerator) {\n polyfillGlobal('regeneratorRuntime', () => {\n // The require just sets up the global, so make sure when we first\n // invoke it the global does not exist\n delete global.regeneratorRuntime;\n\n // regenerator-runtime/runtime exports the regeneratorRuntime object, so we\n // can return it safely.\n return require('regenerator-runtime/runtime'); // flowlint-line untyped-import:off\n });\n}\n","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n/**\n * @return whether or not a @param {function} f is provided natively by calling\n * `toString` and check if the result includes `[native code]` in it.\n *\n * Note that a polyfill can technically fake this behavior but few does it.\n * Therefore, this is usually good enough for our purpose.\n */\nfunction isNativeFunction(f: Function): boolean {\n return typeof f === 'function' && f.toString().indexOf('[native code]') > -1;\n}\n\n/**\n * @return whether or not the constructor of @param {object} o is an native\n * function named with @param {string} expectedName.\n */\nfunction hasNativeConstructor(o: Object, expectedName: string): boolean {\n const con = Object.getPrototypeOf(o).constructor;\n return con.name === expectedName && isNativeFunction(con);\n}\n\nmodule.exports = {isNativeFunction, hasNativeConstructor};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nconst {polyfillGlobal} = require('../Utilities/PolyfillFunctions');\nconst {isNativeFunction} = require('../Utilities/FeatureDetection');\n\nif (__DEV__) {\n if (typeof global.Promise !== 'function') {\n console.error('Promise should exist before setting up timers.');\n }\n}\n\n// Currently, Hermes `Promise` is implemented via Internal Bytecode.\nconst hasHermesPromiseQueuedToJSVM =\n global.HermesInternal?.hasPromise?.() === true &&\n global.HermesInternal?.useEngineQueue?.() === true;\n\nconst hasNativePromise = isNativeFunction(Promise);\nconst hasPromiseQueuedToJSVM = hasNativePromise || hasHermesPromiseQueuedToJSVM;\n\n// In bridgeless mode, timers are host functions installed from cpp.\nif (!global.RN$Bridgeless) {\n /**\n * Set up timers.\n * You can use this module directly, or just require InitializeCore.\n */\n const defineLazyTimer = name => {\n polyfillGlobal(name, () => require('./Timers/JSTimers')[name]);\n };\n defineLazyTimer('setTimeout');\n defineLazyTimer('clearTimeout');\n defineLazyTimer('setInterval');\n defineLazyTimer('clearInterval');\n defineLazyTimer('requestAnimationFrame');\n defineLazyTimer('cancelAnimationFrame');\n defineLazyTimer('requestIdleCallback');\n defineLazyTimer('cancelIdleCallback');\n}\n\n/**\n * Set up immediate APIs, which is required to use the same microtask queue\n * as the Promise.\n */\nif (hasPromiseQueuedToJSVM) {\n // When promise queues to the JSVM microtasks queue, we shim the immedaite\n // APIs via `queueMicrotask` to maintain the backward compatibility.\n polyfillGlobal(\n 'setImmediate',\n () => require('./Timers/immediateShim').setImmediate,\n );\n polyfillGlobal(\n 'clearImmediate',\n () => require('./Timers/immediateShim').clearImmediate,\n );\n} else {\n // When promise was polyfilled hence is queued to the RN microtask queue,\n // we polyfill the immediate APIs as aliases to the ReactNativeMicrotask APIs.\n // Note that in bridgeless mode, immediate APIs are installed from cpp.\n if (!global.RN$Bridgeless) {\n polyfillGlobal(\n 'setImmediate',\n () => require('./Timers/JSTimers').queueReactNativeMicrotask,\n );\n polyfillGlobal(\n 'clearImmediate',\n () => require('./Timers/JSTimers').clearReactNativeMicrotask,\n );\n }\n}\n\n/**\n * Set up the microtask queueing API, which is required to use the same\n * microtask queue as the Promise.\n */\nif (hasHermesPromiseQueuedToJSVM) {\n // Fast path for Hermes.\n polyfillGlobal('queueMicrotask', () => global.HermesInternal?.enqueueJob);\n} else {\n // Polyfill it with promise (regardless it's polyfiled or native) otherwise.\n polyfillGlobal(\n 'queueMicrotask',\n () => require('./Timers/queueMicrotask.js').default,\n );\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nconst BatchedBridge = require('../../BatchedBridge/BatchedBridge');\nconst Systrace = require('../../Performance/Systrace');\n\nconst invariant = require('invariant');\n\nimport NativeTiming from './NativeTiming';\n\n/**\n * JS implementation of timer functions. Must be completely driven by an\n * external clock signal, all that's stored here is timerID, timer type, and\n * callback.\n */\n\nexport type JSTimerType =\n | 'setTimeout'\n | 'setInterval'\n | 'requestAnimationFrame'\n | 'queueReactNativeMicrotask'\n | 'requestIdleCallback';\n\n// These timing constants should be kept in sync with the ones in native ios and\n// android `RCTTiming` module.\nconst FRAME_DURATION = 1000 / 60;\nconst IDLE_CALLBACK_FRAME_DEADLINE = 1;\n\n// Parallel arrays\nconst callbacks: Array = [];\nconst types: Array = [];\nconst timerIDs: Array = [];\nlet reactNativeMicrotasks: Array = [];\nlet requestIdleCallbacks: Array = [];\nconst requestIdleCallbackTimeouts: {[number]: number, ...} = {};\n\nlet GUID = 1;\nlet errors: ?Array = null;\n\nlet hasEmittedTimeDriftWarning = false;\n\n// Returns a free index if one is available, and the next consecutive index otherwise.\nfunction _getFreeIndex(): number {\n let freeIndex = timerIDs.indexOf(null);\n if (freeIndex === -1) {\n freeIndex = timerIDs.length;\n }\n return freeIndex;\n}\n\nfunction _allocateCallback(func: Function, type: JSTimerType): number {\n const id = GUID++;\n const freeIndex = _getFreeIndex();\n timerIDs[freeIndex] = id;\n callbacks[freeIndex] = func;\n types[freeIndex] = type;\n return id;\n}\n\n/**\n * Calls the callback associated with the ID. Also unregister that callback\n * if it was a one time timer (setTimeout), and not unregister it if it was\n * recurring (setInterval).\n */\nfunction _callTimer(timerID: number, frameTime: number, didTimeout: ?boolean) {\n if (timerID > GUID) {\n console.warn(\n 'Tried to call timer with ID %s but no such timer exists.',\n timerID,\n );\n }\n\n // timerIndex of -1 means that no timer with that ID exists. There are\n // two situations when this happens, when a garbage timer ID was given\n // and when a previously existing timer was deleted before this callback\n // fired. In both cases we want to ignore the timer id, but in the former\n // case we warn as well.\n const timerIndex = timerIDs.indexOf(timerID);\n if (timerIndex === -1) {\n return;\n }\n\n const type = types[timerIndex];\n const callback = callbacks[timerIndex];\n if (!callback || !type) {\n console.error('No callback found for timerID ' + timerID);\n return;\n }\n\n if (__DEV__) {\n Systrace.beginEvent(type + ' [invoke]');\n }\n\n // Clear the metadata\n if (type !== 'setInterval') {\n _clearIndex(timerIndex);\n }\n\n try {\n if (\n type === 'setTimeout' ||\n type === 'setInterval' ||\n type === 'queueReactNativeMicrotask'\n ) {\n callback();\n } else if (type === 'requestAnimationFrame') {\n callback(global.performance.now());\n } else if (type === 'requestIdleCallback') {\n callback({\n timeRemaining: function() {\n // TODO: Optimisation: allow running for longer than one frame if\n // there are no pending JS calls on the bridge from native. This\n // would require a way to check the bridge queue synchronously.\n return Math.max(\n 0,\n FRAME_DURATION - (global.performance.now() - frameTime),\n );\n },\n didTimeout: !!didTimeout,\n });\n } else {\n console.error('Tried to call a callback with invalid type: ' + type);\n }\n } catch (e) {\n // Don't rethrow so that we can run all timers.\n if (!errors) {\n errors = [e];\n } else {\n errors.push(e);\n }\n }\n\n if (__DEV__) {\n Systrace.endEvent();\n }\n}\n\n/**\n * Performs a single pass over the enqueued reactNativeMicrotasks. Returns whether\n * more reactNativeMicrotasks are queued up (can be used as a condition a while loop).\n */\nfunction _callReactNativeMicrotasksPass() {\n if (reactNativeMicrotasks.length === 0) {\n return false;\n }\n\n if (__DEV__) {\n Systrace.beginEvent('callReactNativeMicrotasksPass()');\n }\n\n // The main reason to extract a single pass is so that we can track\n // in the system trace\n const passReactNativeMicrotasks = reactNativeMicrotasks;\n reactNativeMicrotasks = [];\n\n // Use for loop rather than forEach as per @vjeux's advice\n // https://github.com/facebook/react-native/commit/c8fd9f7588ad02d2293cac7224715f4af7b0f352#commitcomment-14570051\n for (let i = 0; i < passReactNativeMicrotasks.length; ++i) {\n _callTimer(passReactNativeMicrotasks[i], 0);\n }\n\n if (__DEV__) {\n Systrace.endEvent();\n }\n return reactNativeMicrotasks.length > 0;\n}\n\nfunction _clearIndex(i: number) {\n timerIDs[i] = null;\n callbacks[i] = null;\n types[i] = null;\n}\n\nfunction _freeCallback(timerID: number) {\n // timerIDs contains nulls after timers have been removed;\n // ignore nulls upfront so indexOf doesn't find them\n if (timerID == null) {\n return;\n }\n\n const index = timerIDs.indexOf(timerID);\n // See corresponding comment in `callTimers` for reasoning behind this\n if (index !== -1) {\n const type = types[index];\n _clearIndex(index);\n if (\n type !== 'queueReactNativeMicrotask' &&\n type !== 'requestIdleCallback'\n ) {\n deleteTimer(timerID);\n }\n }\n}\n\n/**\n * JS implementation of timer functions. Must be completely driven by an\n * external clock signal, all that's stored here is timerID, timer type, and\n * callback.\n */\nconst JSTimers = {\n /**\n * @param {function} func Callback to be invoked after `duration` ms.\n * @param {number} duration Number of milliseconds.\n */\n setTimeout: function(func: Function, duration: number, ...args: any): number {\n const id = _allocateCallback(\n () => func.apply(undefined, args),\n 'setTimeout',\n );\n createTimer(id, duration || 0, Date.now(), /* recurring */ false);\n return id;\n },\n\n /**\n * @param {function} func Callback to be invoked every `duration` ms.\n * @param {number} duration Number of milliseconds.\n */\n setInterval: function(\n func: Function,\n duration: number,\n ...args: any\n ): number {\n const id = _allocateCallback(\n () => func.apply(undefined, args),\n 'setInterval',\n );\n createTimer(id, duration || 0, Date.now(), /* recurring */ true);\n return id;\n },\n\n /**\n * The React Native microtask mechanism is used to back public APIs e.g.\n * `queueMicrotask`, `clearImmediate`, and `setImmediate` (which is used by\n * the Promise polyfill) when the JSVM microtask mechanism is not used.\n *\n * @param {function} func Callback to be invoked before the end of the\n * current JavaScript execution loop.\n */\n queueReactNativeMicrotask: function(func: Function, ...args: any) {\n const id = _allocateCallback(\n () => func.apply(undefined, args),\n 'queueReactNativeMicrotask',\n );\n reactNativeMicrotasks.push(id);\n return id;\n },\n\n /**\n * @param {function} func Callback to be invoked every frame.\n */\n requestAnimationFrame: function(func: Function) {\n const id = _allocateCallback(func, 'requestAnimationFrame');\n createTimer(id, 1, Date.now(), /* recurring */ false);\n return id;\n },\n\n /**\n * @param {function} func Callback to be invoked every frame and provided\n * with time remaining in frame.\n * @param {?object} options\n */\n requestIdleCallback: function(func: Function, options: ?Object) {\n if (requestIdleCallbacks.length === 0) {\n setSendIdleEvents(true);\n }\n\n const timeout = options && options.timeout;\n const id = _allocateCallback(\n timeout != null\n ? deadline => {\n const timeoutId = requestIdleCallbackTimeouts[id];\n if (timeoutId) {\n JSTimers.clearTimeout(timeoutId);\n delete requestIdleCallbackTimeouts[id];\n }\n return func(deadline);\n }\n : func,\n 'requestIdleCallback',\n );\n requestIdleCallbacks.push(id);\n\n if (timeout != null) {\n const timeoutId = JSTimers.setTimeout(() => {\n const index = requestIdleCallbacks.indexOf(id);\n if (index > -1) {\n requestIdleCallbacks.splice(index, 1);\n _callTimer(id, global.performance.now(), true);\n }\n delete requestIdleCallbackTimeouts[id];\n if (requestIdleCallbacks.length === 0) {\n setSendIdleEvents(false);\n }\n }, timeout);\n requestIdleCallbackTimeouts[id] = timeoutId;\n }\n return id;\n },\n\n cancelIdleCallback: function(timerID: number) {\n _freeCallback(timerID);\n const index = requestIdleCallbacks.indexOf(timerID);\n if (index !== -1) {\n requestIdleCallbacks.splice(index, 1);\n }\n\n const timeoutId = requestIdleCallbackTimeouts[timerID];\n if (timeoutId) {\n JSTimers.clearTimeout(timeoutId);\n delete requestIdleCallbackTimeouts[timerID];\n }\n\n if (requestIdleCallbacks.length === 0) {\n setSendIdleEvents(false);\n }\n },\n\n clearTimeout: function(timerID: number) {\n _freeCallback(timerID);\n },\n\n clearInterval: function(timerID: number) {\n _freeCallback(timerID);\n },\n\n clearReactNativeMicrotask: function(timerID: number) {\n _freeCallback(timerID);\n const index = reactNativeMicrotasks.indexOf(timerID);\n if (index !== -1) {\n reactNativeMicrotasks.splice(index, 1);\n }\n },\n\n cancelAnimationFrame: function(timerID: number) {\n _freeCallback(timerID);\n },\n\n /**\n * This is called from the native side. We are passed an array of timerIDs,\n * and\n */\n callTimers: function(timersToCall: Array) {\n invariant(\n timersToCall.length !== 0,\n 'Cannot call `callTimers` with an empty list of IDs.',\n );\n\n errors = (null: ?Array);\n for (let i = 0; i < timersToCall.length; i++) {\n _callTimer(timersToCall[i], 0);\n }\n\n if (errors) {\n // $FlowFixMe[incompatible-use]\n const errorCount = errors.length;\n if (errorCount > 1) {\n // Throw all the other errors in a setTimeout, which will throw each\n // error one at a time\n for (let ii = 1; ii < errorCount; ii++) {\n JSTimers.setTimeout(\n (error => {\n throw error;\n // $FlowFixMe[incompatible-use]\n }).bind(null, errors[ii]),\n 0,\n );\n }\n }\n // $FlowFixMe[incompatible-use]\n throw errors[0];\n }\n },\n\n callIdleCallbacks: function(frameTime: number) {\n if (\n FRAME_DURATION - (global.performance.now() - frameTime) <\n IDLE_CALLBACK_FRAME_DEADLINE\n ) {\n return;\n }\n\n errors = (null: ?Array);\n if (requestIdleCallbacks.length > 0) {\n const passIdleCallbacks = requestIdleCallbacks;\n requestIdleCallbacks = [];\n\n for (let i = 0; i < passIdleCallbacks.length; ++i) {\n _callTimer(passIdleCallbacks[i], frameTime);\n }\n }\n\n if (requestIdleCallbacks.length === 0) {\n setSendIdleEvents(false);\n }\n\n if (errors) {\n errors.forEach(error =>\n JSTimers.setTimeout(() => {\n throw error;\n }, 0),\n );\n }\n },\n\n /**\n * This is called after we execute any command we receive from native but\n * before we hand control back to native.\n */\n callReactNativeMicrotasks() {\n errors = (null: ?Array);\n while (_callReactNativeMicrotasksPass()) {}\n if (errors) {\n errors.forEach(error =>\n JSTimers.setTimeout(() => {\n throw error;\n }, 0),\n );\n }\n },\n\n /**\n * Called from native (in development) when environment times are out-of-sync.\n */\n emitTimeDriftWarning(warningMessage: string) {\n if (hasEmittedTimeDriftWarning) {\n return;\n }\n hasEmittedTimeDriftWarning = true;\n console.warn(warningMessage);\n },\n};\n\nfunction createTimer(\n callbackID: number,\n duration: number,\n jsSchedulingTime: number,\n repeats: boolean,\n): void {\n invariant(NativeTiming, 'NativeTiming is available');\n NativeTiming.createTimer(callbackID, duration, jsSchedulingTime, repeats);\n}\n\nfunction deleteTimer(timerID: number): void {\n invariant(NativeTiming, 'NativeTiming is available');\n NativeTiming.deleteTimer(timerID);\n}\n\nfunction setSendIdleEvents(sendIdleEvents: boolean): void {\n invariant(NativeTiming, 'NativeTiming is available');\n NativeTiming.setSendIdleEvents(sendIdleEvents);\n}\n\nlet ExportedJSTimers: {|\n callIdleCallbacks: (frameTime: number) => any | void,\n callReactNativeMicrotasks: () => void,\n callTimers: (timersToCall: Array) => any | void,\n cancelAnimationFrame: (timerID: number) => void,\n cancelIdleCallback: (timerID: number) => void,\n clearReactNativeMicrotask: (timerID: number) => void,\n clearInterval: (timerID: number) => void,\n clearTimeout: (timerID: number) => void,\n emitTimeDriftWarning: (warningMessage: string) => any | void,\n requestAnimationFrame: (func: any) => any | number,\n requestIdleCallback: (func: any, options: ?any) => any | number,\n queueReactNativeMicrotask: (func: any, ...args: any) => number,\n setInterval: (func: any, duration: number, ...args: any) => number,\n setTimeout: (func: any, duration: number, ...args: any) => number,\n|};\n\nif (!NativeTiming) {\n console.warn(\"Timing native module is not available, can't set timers.\");\n // $FlowFixMe[prop-missing] : we can assume timers are generally available\n ExportedJSTimers = ({\n callReactNativeMicrotasks: JSTimers.callReactNativeMicrotasks,\n queueReactNativeMicrotask: JSTimers.queueReactNativeMicrotask,\n }: typeof JSTimers);\n} else {\n ExportedJSTimers = JSTimers;\n}\n\nBatchedBridge.setReactNativeMicrotasksCallback(\n JSTimers.callReactNativeMicrotasks,\n);\n\nmodule.exports = ExportedJSTimers;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +createTimer: (\n callbackID: number,\n duration: number,\n jsSchedulingTime: number,\n repeats: boolean,\n ) => void;\n +deleteTimer: (timerID: number) => void;\n +setSendIdleEvents: (sendIdleEvents: boolean) => void;\n}\n\nexport default (TurboModuleRegistry.get('Timing'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\n// Globally Unique Immediate ID.\nlet GUIID = 1;\n\n// A global set of the currently cleared immediates.\nconst clearedImmediates: Set = new Set();\n\n/**\n * Shim the setImmediate API on top of queueMicrotask.\n * @param {function} func Callback to be invoked before the end of the\n * current JavaScript execution loop.\n */\nfunction setImmediate(callback: Function, ...args: any): number {\n if (arguments.length < 1) {\n throw new TypeError(\n 'setImmediate must be called with at least one argument (a function to call)',\n );\n }\n if (typeof callback !== 'function') {\n throw new TypeError(\n 'The first argument to setImmediate must be a function.',\n );\n }\n\n const id = GUIID++;\n // This is an edgey case in which the sequentially assigned ID has been\n // \"guessed\" and \"cleared\" ahead of time, so we need to clear it up first.\n if (clearedImmediates.has(id)) {\n clearedImmediates.delete(id);\n }\n\n global.queueMicrotask(() => {\n if (!clearedImmediates.has(id)) {\n callback.apply(undefined, args);\n } else {\n // Free up the Set entry.\n clearedImmediates.delete(id);\n }\n });\n\n return id;\n}\n\n/**\n * @param {number} immediateID The ID of the immediate to be clearred.\n */\nfunction clearImmediate(immediateID: number) {\n clearedImmediates.add(immediateID);\n}\n\nconst immediateShim = {\n setImmediate: setImmediate,\n clearImmediate: clearImmediate,\n};\n\nmodule.exports = immediateShim;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nlet resolvedPromise;\n\n/**\n * Polyfill for the microtask queuening API defined by WHATWG HTMP spec.\n * https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-queuemicrotask\n *\n * The method must queue a microtask to invoke @param {function} callback, and\n * if the callback throws an exception, report the exception.\n */\nexport default function queueMicrotask(callback: Function) {\n if (arguments.length < 1) {\n throw new TypeError(\n 'queueMicrotask must be called with at least one argument (a function to call)',\n );\n }\n if (typeof callback !== 'function') {\n throw new TypeError('The argument to queueMicrotask must be a function.');\n }\n\n // Try to reuse a lazily allocated resolved promise from closure.\n (resolvedPromise || (resolvedPromise = Promise.resolve()))\n .then(callback)\n .catch(error =>\n // Report the exception until the next tick.\n setTimeout(() => {\n throw error;\n }, 0),\n );\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nconst {polyfillGlobal} = require('../Utilities/PolyfillFunctions');\n\n/**\n * Set up XMLHttpRequest. The native XMLHttpRequest in Chrome dev tools is CORS\n * aware and won't let you fetch anything from the internet.\n *\n * You can use this module directly, or just require InitializeCore.\n */\npolyfillGlobal('XMLHttpRequest', () => require('../Network/XMLHttpRequest'));\npolyfillGlobal('FormData', () => require('../Network/FormData'));\n\npolyfillGlobal('fetch', () => require('../Network/fetch').fetch);\npolyfillGlobal('Headers', () => require('../Network/fetch').Headers);\npolyfillGlobal('Request', () => require('../Network/fetch').Request);\npolyfillGlobal('Response', () => require('../Network/fetch').Response);\npolyfillGlobal('WebSocket', () => require('../WebSocket/WebSocket'));\npolyfillGlobal('Blob', () => require('../Blob/Blob'));\npolyfillGlobal('File', () => require('../Blob/File'));\npolyfillGlobal('FileReader', () => require('../Blob/FileReader'));\npolyfillGlobal('URL', () => require('../Blob/URL').URL); // flowlint-line untyped-import:off\npolyfillGlobal('URLSearchParams', () => require('../Blob/URL').URLSearchParams); // flowlint-line untyped-import:off\npolyfillGlobal(\n 'AbortController',\n () => require('abort-controller/dist/abort-controller').AbortController, // flowlint-line untyped-import:off\n);\npolyfillGlobal(\n 'AbortSignal',\n () => require('abort-controller/dist/abort-controller').AbortSignal, // flowlint-line untyped-import:off\n);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nimport {type EventSubscription} from '../vendor/emitter/EventEmitter';\n\nimport type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';\n\nconst BlobManager = require('../Blob/BlobManager');\nconst EventTarget = require('event-target-shim');\nconst GlobalPerformanceLogger = require('../Utilities/GlobalPerformanceLogger');\nconst RCTNetworking = require('./RCTNetworking');\n\nconst base64 = require('base64-js');\nconst invariant = require('invariant');\n\nconst DEBUG_NETWORK_SEND_DELAY: false = false; // Set to a number of milliseconds when debugging\n\nexport type NativeResponseType = 'base64' | 'blob' | 'text';\nexport type ResponseType =\n | ''\n | 'arraybuffer'\n | 'blob'\n | 'document'\n | 'json'\n | 'text';\nexport type Response = ?Object | string;\n\ntype XHRInterceptor = interface {\n requestSent(id: number, url: string, method: string, headers: Object): void,\n responseReceived(\n id: number,\n url: string,\n status: number,\n headers: Object,\n ): void,\n dataReceived(id: number, data: string): void,\n loadingFinished(id: number, encodedDataLength: number): void,\n loadingFailed(id: number, error: string): void,\n};\n\n// The native blob module is optional so inject it here if available.\nif (BlobManager.isAvailable) {\n BlobManager.addNetworkingHandler();\n}\n\nconst UNSENT = 0;\nconst OPENED = 1;\nconst HEADERS_RECEIVED = 2;\nconst LOADING = 3;\nconst DONE = 4;\n\nconst SUPPORTED_RESPONSE_TYPES = {\n arraybuffer: typeof global.ArrayBuffer === 'function',\n blob: typeof global.Blob === 'function',\n document: false,\n json: true,\n text: true,\n '': true,\n};\n\nconst REQUEST_EVENTS = [\n 'abort',\n 'error',\n 'load',\n 'loadstart',\n 'progress',\n 'timeout',\n 'loadend',\n];\n\nconst XHR_EVENTS = REQUEST_EVENTS.concat('readystatechange');\n\nclass XMLHttpRequestEventTarget extends (EventTarget(...REQUEST_EVENTS): any) {\n onload: ?Function;\n onloadstart: ?Function;\n onprogress: ?Function;\n ontimeout: ?Function;\n onerror: ?Function;\n onabort: ?Function;\n onloadend: ?Function;\n}\n\n/**\n * Shared base for platform-specific XMLHttpRequest implementations.\n */\nclass XMLHttpRequest extends (EventTarget(...XHR_EVENTS): any) {\n static UNSENT: number = UNSENT;\n static OPENED: number = OPENED;\n static HEADERS_RECEIVED: number = HEADERS_RECEIVED;\n static LOADING: number = LOADING;\n static DONE: number = DONE;\n\n static _interceptor: ?XHRInterceptor = null;\n\n UNSENT: number = UNSENT;\n OPENED: number = OPENED;\n HEADERS_RECEIVED: number = HEADERS_RECEIVED;\n LOADING: number = LOADING;\n DONE: number = DONE;\n\n // EventTarget automatically initializes these to `null`.\n onload: ?Function;\n onloadstart: ?Function;\n onprogress: ?Function;\n ontimeout: ?Function;\n onerror: ?Function;\n onabort: ?Function;\n onloadend: ?Function;\n onreadystatechange: ?Function;\n\n readyState: number = UNSENT;\n responseHeaders: ?Object;\n status: number = 0;\n timeout: number = 0;\n responseURL: ?string;\n withCredentials: boolean = true;\n\n upload: XMLHttpRequestEventTarget = new XMLHttpRequestEventTarget();\n\n _requestId: ?number;\n _subscriptions: Array;\n\n _aborted: boolean = false;\n _cachedResponse: Response;\n _hasError: boolean = false;\n _headers: Object;\n _lowerCaseResponseHeaders: Object;\n _method: ?string = null;\n _perfKey: ?string = null;\n _response: string | ?Object;\n _responseType: ResponseType;\n _response: string = '';\n _sent: boolean;\n _url: ?string = null;\n _timedOut: boolean = false;\n _trackingName: string = 'unknown';\n _incrementalEvents: boolean = false;\n _performanceLogger: IPerformanceLogger = GlobalPerformanceLogger;\n\n static setInterceptor(interceptor: ?XHRInterceptor) {\n XMLHttpRequest._interceptor = interceptor;\n }\n\n constructor() {\n super();\n this._reset();\n }\n\n _reset(): void {\n this.readyState = this.UNSENT;\n this.responseHeaders = undefined;\n this.status = 0;\n delete this.responseURL;\n\n this._requestId = null;\n\n this._cachedResponse = undefined;\n this._hasError = false;\n this._headers = {};\n this._response = '';\n this._responseType = '';\n this._sent = false;\n this._lowerCaseResponseHeaders = {};\n\n this._clearSubscriptions();\n this._timedOut = false;\n }\n\n get responseType(): ResponseType {\n return this._responseType;\n }\n\n set responseType(responseType: ResponseType): void {\n if (this._sent) {\n throw new Error(\n \"Failed to set the 'responseType' property on 'XMLHttpRequest': The \" +\n 'response type cannot be set after the request has been sent.',\n );\n }\n if (!SUPPORTED_RESPONSE_TYPES.hasOwnProperty(responseType)) {\n console.warn(\n `The provided value '${responseType}' is not a valid 'responseType'.`,\n );\n return;\n }\n\n // redboxes early, e.g. for 'arraybuffer' on ios 7\n invariant(\n SUPPORTED_RESPONSE_TYPES[responseType] || responseType === 'document',\n `The provided value '${responseType}' is unsupported in this environment.`,\n );\n\n if (responseType === 'blob') {\n invariant(\n BlobManager.isAvailable,\n 'Native module BlobModule is required for blob support',\n );\n }\n this._responseType = responseType;\n }\n\n get responseText(): string {\n if (this._responseType !== '' && this._responseType !== 'text') {\n throw new Error(\n \"The 'responseText' property is only available if 'responseType' \" +\n `is set to '' or 'text', but it is '${this._responseType}'.`,\n );\n }\n if (this.readyState < LOADING) {\n return '';\n }\n return this._response;\n }\n\n get response(): Response {\n const {responseType} = this;\n if (responseType === '' || responseType === 'text') {\n return this.readyState < LOADING || this._hasError ? '' : this._response;\n }\n\n if (this.readyState !== DONE) {\n return null;\n }\n\n if (this._cachedResponse !== undefined) {\n return this._cachedResponse;\n }\n\n switch (responseType) {\n case 'document':\n this._cachedResponse = null;\n break;\n\n case 'arraybuffer':\n this._cachedResponse = base64.toByteArray(this._response).buffer;\n break;\n\n case 'blob':\n if (typeof this._response === 'object' && this._response) {\n this._cachedResponse = BlobManager.createFromOptions(this._response);\n } else if (this._response === '') {\n this._cachedResponse = BlobManager.createFromParts([]);\n } else {\n throw new Error(`Invalid response for blob: ${this._response}`);\n }\n break;\n\n case 'json':\n try {\n this._cachedResponse = JSON.parse(this._response);\n } catch (_) {\n this._cachedResponse = null;\n }\n break;\n\n default:\n this._cachedResponse = null;\n }\n\n return this._cachedResponse;\n }\n\n // exposed for testing\n __didCreateRequest(requestId: number): void {\n this._requestId = requestId;\n\n XMLHttpRequest._interceptor &&\n XMLHttpRequest._interceptor.requestSent(\n requestId,\n this._url || '',\n this._method || 'GET',\n this._headers,\n );\n }\n\n // exposed for testing\n __didUploadProgress(\n requestId: number,\n progress: number,\n total: number,\n ): void {\n if (requestId === this._requestId) {\n this.upload.dispatchEvent({\n type: 'progress',\n lengthComputable: true,\n loaded: progress,\n total,\n });\n }\n }\n\n __didReceiveResponse(\n requestId: number,\n status: number,\n responseHeaders: ?Object,\n responseURL: ?string,\n ): void {\n if (requestId === this._requestId) {\n this._perfKey != null &&\n this._performanceLogger.stopTimespan(this._perfKey);\n this.status = status;\n this.setResponseHeaders(responseHeaders);\n this.setReadyState(this.HEADERS_RECEIVED);\n if (responseURL || responseURL === '') {\n this.responseURL = responseURL;\n } else {\n delete this.responseURL;\n }\n\n XMLHttpRequest._interceptor &&\n XMLHttpRequest._interceptor.responseReceived(\n requestId,\n responseURL || this._url || '',\n status,\n responseHeaders || {},\n );\n }\n }\n\n __didReceiveData(requestId: number, response: string): void {\n if (requestId !== this._requestId) {\n return;\n }\n this._response = response;\n this._cachedResponse = undefined; // force lazy recomputation\n this.setReadyState(this.LOADING);\n\n XMLHttpRequest._interceptor &&\n XMLHttpRequest._interceptor.dataReceived(requestId, response);\n }\n\n __didReceiveIncrementalData(\n requestId: number,\n responseText: string,\n progress: number,\n total: number,\n ) {\n if (requestId !== this._requestId) {\n return;\n }\n if (!this._response) {\n this._response = responseText;\n } else {\n this._response += responseText;\n }\n\n XMLHttpRequest._interceptor &&\n XMLHttpRequest._interceptor.dataReceived(requestId, responseText);\n\n this.setReadyState(this.LOADING);\n this.__didReceiveDataProgress(requestId, progress, total);\n }\n\n __didReceiveDataProgress(\n requestId: number,\n loaded: number,\n total: number,\n ): void {\n if (requestId !== this._requestId) {\n return;\n }\n this.dispatchEvent({\n type: 'progress',\n lengthComputable: total >= 0,\n loaded,\n total,\n });\n }\n\n // exposed for testing\n __didCompleteResponse(\n requestId: number,\n error: string,\n timeOutError: boolean,\n ): void {\n if (requestId === this._requestId) {\n if (error) {\n if (this._responseType === '' || this._responseType === 'text') {\n this._response = error;\n }\n this._hasError = true;\n if (timeOutError) {\n this._timedOut = true;\n }\n }\n this._clearSubscriptions();\n this._requestId = null;\n this.setReadyState(this.DONE);\n\n if (error) {\n XMLHttpRequest._interceptor &&\n XMLHttpRequest._interceptor.loadingFailed(requestId, error);\n } else {\n XMLHttpRequest._interceptor &&\n XMLHttpRequest._interceptor.loadingFinished(\n requestId,\n this._response.length,\n );\n }\n }\n }\n\n _clearSubscriptions(): void {\n (this._subscriptions || []).forEach(sub => {\n if (sub) {\n sub.remove();\n }\n });\n this._subscriptions = [];\n }\n\n getAllResponseHeaders(): ?string {\n if (!this.responseHeaders) {\n // according to the spec, return null if no response has been received\n return null;\n }\n const headers = this.responseHeaders || {};\n return Object.keys(headers)\n .map(headerName => {\n return headerName + ': ' + headers[headerName];\n })\n .join('\\r\\n');\n }\n\n getResponseHeader(header: string): ?string {\n const value = this._lowerCaseResponseHeaders[header.toLowerCase()];\n return value !== undefined ? value : null;\n }\n\n setRequestHeader(header: string, value: any): void {\n if (this.readyState !== this.OPENED) {\n throw new Error('Request has not been opened');\n }\n this._headers[header.toLowerCase()] = String(value);\n }\n\n /**\n * Custom extension for tracking origins of request.\n */\n setTrackingName(trackingName: string): XMLHttpRequest {\n this._trackingName = trackingName;\n return this;\n }\n\n /**\n * Custom extension for setting a custom performance logger\n */\n setPerformanceLogger(performanceLogger: IPerformanceLogger): XMLHttpRequest {\n this._performanceLogger = performanceLogger;\n return this;\n }\n\n open(method: string, url: string, async: ?boolean): void {\n /* Other optional arguments are not supported yet */\n if (this.readyState !== this.UNSENT) {\n throw new Error('Cannot open, already sending');\n }\n if (async !== undefined && !async) {\n // async is default\n throw new Error('Synchronous http requests are not supported');\n }\n if (!url) {\n throw new Error('Cannot load an empty url');\n }\n this._method = method.toUpperCase();\n this._url = url;\n this._aborted = false;\n this.setReadyState(this.OPENED);\n }\n\n send(data: any): void {\n if (this.readyState !== this.OPENED) {\n throw new Error('Request has not been opened');\n }\n if (this._sent) {\n throw new Error('Request has already been sent');\n }\n this._sent = true;\n const incrementalEvents =\n this._incrementalEvents || !!this.onreadystatechange || !!this.onprogress;\n\n this._subscriptions.push(\n RCTNetworking.addListener('didSendNetworkData', args =>\n this.__didUploadProgress(...args),\n ),\n );\n this._subscriptions.push(\n RCTNetworking.addListener('didReceiveNetworkResponse', args =>\n this.__didReceiveResponse(...args),\n ),\n );\n this._subscriptions.push(\n RCTNetworking.addListener('didReceiveNetworkData', args =>\n this.__didReceiveData(...args),\n ),\n );\n this._subscriptions.push(\n RCTNetworking.addListener('didReceiveNetworkIncrementalData', args =>\n this.__didReceiveIncrementalData(...args),\n ),\n );\n this._subscriptions.push(\n RCTNetworking.addListener('didReceiveNetworkDataProgress', args =>\n this.__didReceiveDataProgress(...args),\n ),\n );\n this._subscriptions.push(\n RCTNetworking.addListener('didCompleteNetworkResponse', args =>\n this.__didCompleteResponse(...args),\n ),\n );\n\n let nativeResponseType: NativeResponseType = 'text';\n if (this._responseType === 'arraybuffer') {\n nativeResponseType = 'base64';\n }\n if (this._responseType === 'blob') {\n nativeResponseType = 'blob';\n }\n\n const doSend = () => {\n const friendlyName =\n this._trackingName !== 'unknown' ? this._trackingName : this._url;\n this._perfKey = 'network_XMLHttpRequest_' + String(friendlyName);\n this._performanceLogger.startTimespan(this._perfKey);\n invariant(\n this._method,\n 'XMLHttpRequest method needs to be defined (%s).',\n friendlyName,\n );\n invariant(\n this._url,\n 'XMLHttpRequest URL needs to be defined (%s).',\n friendlyName,\n );\n RCTNetworking.sendRequest(\n this._method,\n this._trackingName,\n this._url,\n this._headers,\n data,\n /* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found\n * when making Flow check .android.js files. */\n nativeResponseType,\n incrementalEvents,\n this.timeout,\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.__didCreateRequest.bind(this),\n this.withCredentials,\n );\n };\n if (DEBUG_NETWORK_SEND_DELAY) {\n setTimeout(doSend, DEBUG_NETWORK_SEND_DELAY);\n } else {\n doSend();\n }\n }\n\n abort(): void {\n this._aborted = true;\n if (this._requestId) {\n RCTNetworking.abortRequest(this._requestId);\n }\n // only call onreadystatechange if there is something to abort,\n // below logic is per spec\n if (\n !(\n this.readyState === this.UNSENT ||\n (this.readyState === this.OPENED && !this._sent) ||\n this.readyState === this.DONE\n )\n ) {\n this._reset();\n this.setReadyState(this.DONE);\n }\n // Reset again after, in case modified in handler\n this._reset();\n }\n\n setResponseHeaders(responseHeaders: ?Object): void {\n this.responseHeaders = responseHeaders || null;\n const headers = responseHeaders || {};\n this._lowerCaseResponseHeaders = Object.keys(headers).reduce(\n (lcaseHeaders, headerName) => {\n lcaseHeaders[headerName.toLowerCase()] = headers[headerName];\n return lcaseHeaders;\n },\n {},\n );\n }\n\n setReadyState(newState: number): void {\n this.readyState = newState;\n this.dispatchEvent({type: 'readystatechange'});\n if (newState === this.DONE) {\n if (this._aborted) {\n this.dispatchEvent({type: 'abort'});\n } else if (this._hasError) {\n if (this._timedOut) {\n this.dispatchEvent({type: 'timeout'});\n } else {\n this.dispatchEvent({type: 'error'});\n }\n } else {\n this.dispatchEvent({type: 'load'});\n }\n this.dispatchEvent({type: 'loadend'});\n }\n }\n\n /* global EventListener */\n addEventListener(type: string, listener: EventListener): void {\n // If we dont' have a 'readystatechange' event handler, we don't\n // have to send repeated LOADING events with incremental updates\n // to responseText, which will avoid a bunch of native -> JS\n // bridge traffic.\n if (type === 'readystatechange' || type === 'progress') {\n this._incrementalEvents = true;\n }\n super.addEventListener(type, listener);\n }\n}\n\nmodule.exports = XMLHttpRequest;\n","var superPropBase = require(\"./superPropBase.js\");\n\nfunction _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n module.exports = _get = Reflect.get;\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _get(target, property, receiver || target);\n}\n\nmodule.exports = _get;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nmodule.exports = _superPropBase;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nconst Blob = require('./Blob');\nconst BlobRegistry = require('./BlobRegistry');\n\nimport type {BlobData, BlobOptions, BlobCollector} from './BlobTypes';\nimport NativeBlobModule from './NativeBlobModule';\nimport invariant from 'invariant';\n\n/*eslint-disable no-bitwise */\n/*eslint-disable eqeqeq */\n\n/**\n * Based on the rfc4122-compliant solution posted at\n * http://stackoverflow.com/questions/105034\n */\nfunction uuidv4(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = (Math.random() * 16) | 0,\n v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// **Temporary workaround**\n// TODO(#24654): Use turbomodules for the Blob module.\n// Blob collector is a jsi::HostObject that is used by native to know\n// when the a Blob instance is deallocated. This allows to free the\n// underlying native resources. This is a hack to workaround the fact\n// that the current bridge infra doesn't allow to track js objects\n// deallocation. Ideally the whole Blob object should be a jsi::HostObject.\nfunction createBlobCollector(blobId: string): BlobCollector | null {\n if (global.__blobCollectorProvider == null) {\n return null;\n } else {\n return global.__blobCollectorProvider(blobId);\n }\n}\n\n/**\n * Module to manage blobs. Wrapper around the native blob module.\n */\nclass BlobManager {\n /**\n * If the native blob module is available.\n */\n static isAvailable: boolean = !!NativeBlobModule;\n\n /**\n * Create blob from existing array of blobs.\n */\n static createFromParts(\n parts: Array,\n options?: BlobOptions,\n ): Blob {\n invariant(NativeBlobModule, 'NativeBlobModule is available.');\n\n const blobId = uuidv4();\n const items = parts.map(part => {\n if (\n part instanceof ArrayBuffer ||\n (global.ArrayBufferView && part instanceof global.ArrayBufferView)\n ) {\n throw new Error(\n \"Creating blobs from 'ArrayBuffer' and 'ArrayBufferView' are not supported\",\n );\n }\n if (part instanceof Blob) {\n return {\n data: part.data,\n type: 'blob',\n };\n } else {\n return {\n data: String(part),\n type: 'string',\n };\n }\n });\n const size = items.reduce((acc, curr) => {\n if (curr.type === 'string') {\n return acc + global.unescape(encodeURI(curr.data)).length;\n } else {\n return acc + curr.data.size;\n }\n }, 0);\n\n NativeBlobModule.createFromParts(items, blobId);\n\n return BlobManager.createFromOptions({\n blobId,\n offset: 0,\n size,\n type: options ? options.type : '',\n lastModified: options ? options.lastModified : Date.now(),\n });\n }\n\n /**\n * Create blob instance from blob data from native.\n * Used internally by modules like XHR, WebSocket, etc.\n */\n static createFromOptions(options: BlobData): Blob {\n BlobRegistry.register(options.blobId);\n return Object.assign(Object.create(Blob.prototype), {\n data:\n // Reuse the collector instance when creating from an existing blob.\n // This will make sure that the underlying resource is only deallocated\n // when all blobs that refer to it are deallocated.\n options.__collector == null\n ? {\n ...options,\n __collector: createBlobCollector(options.blobId),\n }\n : options,\n });\n }\n\n /**\n * Deallocate resources for a blob.\n */\n static release(blobId: string): void {\n invariant(NativeBlobModule, 'NativeBlobModule is available.');\n\n BlobRegistry.unregister(blobId);\n if (BlobRegistry.has(blobId)) {\n return;\n }\n NativeBlobModule.release(blobId);\n }\n\n /**\n * Inject the blob content handler in the networking module to support blob\n * requests and responses.\n */\n static addNetworkingHandler(): void {\n invariant(NativeBlobModule, 'NativeBlobModule is available.');\n\n NativeBlobModule.addNetworkingHandler();\n }\n\n /**\n * Indicate the websocket should return a blob for incoming binary\n * messages.\n */\n static addWebSocketHandler(socketId: number): void {\n invariant(NativeBlobModule, 'NativeBlobModule is available.');\n\n NativeBlobModule.addWebSocketHandler(socketId);\n }\n\n /**\n * Indicate the websocket should no longer return a blob for incoming\n * binary messages.\n */\n static removeWebSocketHandler(socketId: number): void {\n invariant(NativeBlobModule, 'NativeBlobModule is available.');\n\n NativeBlobModule.removeWebSocketHandler(socketId);\n }\n\n /**\n * Send a blob message to a websocket.\n */\n static sendOverSocket(blob: Blob, socketId: number): void {\n invariant(NativeBlobModule, 'NativeBlobModule is available.');\n\n NativeBlobModule.sendOverSocket(blob.data, socketId);\n }\n}\n\nmodule.exports = BlobManager;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|BLOB_URI_SCHEME: ?string, BLOB_URI_HOST: ?string|};\n +addNetworkingHandler: () => void;\n +addWebSocketHandler: (id: number) => void;\n +removeWebSocketHandler: (id: number) => void;\n +sendOverSocket: (blob: Object, socketID: number) => void;\n +createFromParts: (parts: Array, withId: string) => void;\n +release: (blobId: string) => void;\n}\n\nconst NativeModule = TurboModuleRegistry.get('BlobModule');\n\nlet constants = null;\nlet NativeBlobModule = null;\n\nif (NativeModule != null) {\n NativeBlobModule = {\n getConstants(): {|BLOB_URI_SCHEME: ?string, BLOB_URI_HOST: ?string|} {\n if (constants == null) {\n constants = NativeModule.getConstants();\n }\n return constants;\n },\n addNetworkingHandler(): void {\n NativeModule.addNetworkingHandler();\n },\n addWebSocketHandler(id: number): void {\n NativeModule.addWebSocketHandler(id);\n },\n removeWebSocketHandler(id: number): void {\n NativeModule.removeWebSocketHandler(id);\n },\n sendOverSocket(blob: Object, socketID: number): void {\n NativeModule.sendOverSocket(blob, socketID);\n },\n createFromParts(parts: Array, withId: string): void {\n NativeModule.createFromParts(parts, withId);\n },\n release(blobId: string): void {\n NativeModule.release(blobId);\n },\n };\n}\n\nexport default (NativeBlobModule: ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nimport type {BlobData, BlobOptions} from './BlobTypes';\n\n/**\n * Opaque JS representation of some binary data in native.\n *\n * The API is modeled after the W3C Blob API, with one caveat\n * regarding explicit deallocation. Refer to the `close()`\n * method for further details.\n *\n * Example usage in a React component:\n *\n * class WebSocketImage extends React.Component {\n * state = {blob: null};\n * componentDidMount() {\n * let ws = this.ws = new WebSocket(...);\n * ws.binaryType = 'blob';\n * ws.onmessage = (event) => {\n * if (this.state.blob) {\n * this.state.blob.close();\n * }\n * this.setState({blob: event.data});\n * };\n * }\n * componentUnmount() {\n * if (this.state.blob) {\n * this.state.blob.close();\n * }\n * this.ws.close();\n * }\n * render() {\n * if (!this.state.blob) {\n * return ;\n * }\n * return ;\n * }\n * }\n *\n * Reference: https://developer.mozilla.org/en-US/docs/Web/API/Blob\n */\nclass Blob {\n _data: ?BlobData;\n\n /**\n * Constructor for JS consumers.\n * Currently we only support creating Blobs from other Blobs.\n * Reference: https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob\n */\n constructor(parts: Array = [], options?: BlobOptions) {\n const BlobManager = require('./BlobManager');\n this.data = BlobManager.createFromParts(parts, options).data;\n }\n\n /*\n * This method is used to create a new Blob object containing\n * the data in the specified range of bytes of the source Blob.\n * Reference: https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice\n */\n // $FlowFixMe[unsafe-getters-setters]\n set data(data: ?BlobData) {\n this._data = data;\n }\n\n // $FlowFixMe[unsafe-getters-setters]\n get data(): BlobData {\n if (!this._data) {\n throw new Error('Blob has been closed and is no longer available');\n }\n\n return this._data;\n }\n\n slice(start?: number, end?: number): Blob {\n const BlobManager = require('./BlobManager');\n let {offset, size} = this.data;\n\n if (typeof start === 'number') {\n if (start > size) {\n // $FlowFixMe[reassign-const]\n start = size;\n }\n offset += start;\n size -= start;\n\n if (typeof end === 'number') {\n if (end < 0) {\n // $FlowFixMe[reassign-const]\n end = this.size + end;\n }\n size = end - start;\n }\n }\n return BlobManager.createFromOptions({\n blobId: this.data.blobId,\n offset,\n size,\n });\n }\n\n /**\n * This method is in the standard, but not actually implemented by\n * any browsers at this point. It's important for how Blobs work in\n * React Native, however, since we cannot de-allocate resources automatically,\n * so consumers need to explicitly de-allocate them.\n *\n * Note that the semantics around Blobs created via `blob.slice()`\n * and `new Blob([blob])` are different. `blob.slice()` creates a\n * new *view* onto the same binary data, so calling `close()` on any\n * of those views is enough to deallocate the data, whereas\n * `new Blob([blob, ...])` actually copies the data in memory.\n */\n close() {\n const BlobManager = require('./BlobManager');\n BlobManager.release(this.data.blobId);\n this.data = null;\n }\n\n /**\n * Size of the data contained in the Blob object, in bytes.\n */\n // $FlowFixMe[unsafe-getters-setters]\n get size(): number {\n return this.data.size;\n }\n\n /*\n * String indicating the MIME type of the data contained in the Blob.\n * If the type is unknown, this string is empty.\n */\n // $FlowFixMe[unsafe-getters-setters]\n get type(): string {\n return this.data.type || '';\n }\n}\n\nmodule.exports = Blob;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nconst registry: {[key: string]: number, ...} = {};\n\nconst register = (id: string) => {\n if (registry[id]) {\n registry[id]++;\n } else {\n registry[id] = 1;\n }\n};\n\nconst unregister = (id: string) => {\n if (registry[id]) {\n registry[id]--;\n if (registry[id] <= 0) {\n delete registry[id];\n }\n }\n};\n\nconst has = (id: string): number | boolean => {\n return registry[id] && registry[id] > 0;\n};\n\nmodule.exports = {\n register,\n unregister,\n has,\n};\n","/**\n * @author Toru Nagashima \n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap}\n * @private\n */\nconst privateData = new WeakMap();\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap}\n * @private\n */\nconst wrappers = new WeakMap();\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n const retv = privateData.get(event);\n console.assert(\n retv != null,\n \"'this' is expected an Event object, but got\",\n event\n );\n return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n if (data.passiveListener != null) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(\n \"Unable to preventDefault inside passive event listener invocation.\",\n data.passiveListener\n );\n }\n return\n }\n if (!data.event.cancelable) {\n return\n }\n\n data.canceled = true;\n if (typeof data.event.preventDefault === \"function\") {\n data.event.preventDefault();\n }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n privateData.set(this, {\n eventTarget,\n event,\n eventPhase: 2,\n currentTarget: eventTarget,\n canceled: false,\n stopped: false,\n immediateStopped: false,\n passiveListener: null,\n timeStamp: event.timeStamp || Date.now(),\n });\n\n // https://heycam.github.io/webidl/#Unforgeable\n Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true });\n\n // Define accessors\n const keys = Object.keys(event);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!(key in this)) {\n Object.defineProperty(this, key, defineRedirectDescriptor(key));\n }\n }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n /**\n * The type of this event.\n * @type {string}\n */\n get type() {\n return pd(this).event.type\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get target() {\n return pd(this).eventTarget\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get currentTarget() {\n return pd(this).currentTarget\n },\n\n /**\n * @returns {EventTarget[]} The composed path of this event.\n */\n composedPath() {\n const currentTarget = pd(this).currentTarget;\n if (currentTarget == null) {\n return []\n }\n return [currentTarget]\n },\n\n /**\n * Constant of NONE.\n * @type {number}\n */\n get NONE() {\n return 0\n },\n\n /**\n * Constant of CAPTURING_PHASE.\n * @type {number}\n */\n get CAPTURING_PHASE() {\n return 1\n },\n\n /**\n * Constant of AT_TARGET.\n * @type {number}\n */\n get AT_TARGET() {\n return 2\n },\n\n /**\n * Constant of BUBBLING_PHASE.\n * @type {number}\n */\n get BUBBLING_PHASE() {\n return 3\n },\n\n /**\n * The target of this event.\n * @type {number}\n */\n get eventPhase() {\n return pd(this).eventPhase\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopPropagation() {\n const data = pd(this);\n\n data.stopped = true;\n if (typeof data.event.stopPropagation === \"function\") {\n data.event.stopPropagation();\n }\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopImmediatePropagation() {\n const data = pd(this);\n\n data.stopped = true;\n data.immediateStopped = true;\n if (typeof data.event.stopImmediatePropagation === \"function\") {\n data.event.stopImmediatePropagation();\n }\n },\n\n /**\n * The flag to be bubbling.\n * @type {boolean}\n */\n get bubbles() {\n return Boolean(pd(this).event.bubbles)\n },\n\n /**\n * The flag to be cancelable.\n * @type {boolean}\n */\n get cancelable() {\n return Boolean(pd(this).event.cancelable)\n },\n\n /**\n * Cancel this event.\n * @returns {void}\n */\n preventDefault() {\n setCancelFlag(pd(this));\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n */\n get defaultPrevented() {\n return pd(this).canceled\n },\n\n /**\n * The flag to be composed.\n * @type {boolean}\n */\n get composed() {\n return Boolean(pd(this).event.composed)\n },\n\n /**\n * The unix time of this event.\n * @type {number}\n */\n get timeStamp() {\n return pd(this).timeStamp\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n * @deprecated\n */\n get srcElement() {\n return pd(this).eventTarget\n },\n\n /**\n * The flag to stop event bubbling.\n * @type {boolean}\n * @deprecated\n */\n get cancelBubble() {\n return pd(this).stopped\n },\n set cancelBubble(value) {\n if (!value) {\n return\n }\n const data = pd(this);\n\n data.stopped = true;\n if (typeof data.event.cancelBubble === \"boolean\") {\n data.event.cancelBubble = true;\n }\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n * @deprecated\n */\n get returnValue() {\n return !pd(this).canceled\n },\n set returnValue(value) {\n if (!value) {\n setCancelFlag(pd(this));\n }\n },\n\n /**\n * Initialize this event object. But do nothing under event dispatching.\n * @param {string} type The event type.\n * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n * @deprecated\n */\n initEvent() {\n // Do nothing.\n },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n value: Event,\n configurable: true,\n writable: true,\n});\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n Object.setPrototypeOf(Event.prototype, window.Event.prototype);\n\n // Make association for wrappers.\n wrappers.set(window.Event.prototype, Event);\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n return {\n get() {\n return pd(this).event[key]\n },\n set(value) {\n pd(this).event[key] = value;\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n return {\n value() {\n const event = pd(this).event;\n return event[key].apply(event, arguments)\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n const keys = Object.keys(proto);\n if (keys.length === 0) {\n return BaseEvent\n }\n\n /** CustomEvent */\n function CustomEvent(eventTarget, event) {\n BaseEvent.call(this, eventTarget, event);\n }\n\n CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n constructor: { value: CustomEvent, configurable: true, writable: true },\n });\n\n // Define accessors.\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!(key in BaseEvent.prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n const isFunc = typeof descriptor.value === \"function\";\n Object.defineProperty(\n CustomEvent.prototype,\n key,\n isFunc\n ? defineCallDescriptor(key)\n : defineRedirectDescriptor(key)\n );\n }\n }\n\n return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n if (proto == null || proto === Object.prototype) {\n return Event\n }\n\n let wrapper = wrappers.get(proto);\n if (wrapper == null) {\n wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\n wrappers.set(proto, wrapper);\n }\n return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nfunction wrapEvent(eventTarget, event) {\n const Wrapper = getWrapper(Object.getPrototypeOf(event));\n return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nfunction isStopped(event) {\n return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nfunction setEventPhase(event, eventPhase) {\n pd(event).eventPhase = eventPhase;\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nfunction setCurrentTarget(event, currentTarget) {\n pd(event).currentTarget = currentTarget;\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nfunction setPassiveListener(event, passiveListener) {\n pd(event).passiveListener = passiveListener;\n}\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap>}\n * @private\n */\nconst listenersMap = new WeakMap();\n\n// Listener types\nconst CAPTURE = 1;\nconst BUBBLE = 2;\nconst ATTRIBUTE = 3;\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n const listeners = listenersMap.get(eventTarget);\n if (listeners == null) {\n throw new TypeError(\n \"'this' is expected an EventTarget object, but got another value.\"\n )\n }\n return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n return {\n get() {\n const listeners = getListeners(this);\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n return node.listener\n }\n node = node.next;\n }\n return null\n },\n\n set(listener) {\n if (typeof listener !== \"function\" && !isObject(listener)) {\n listener = null; // eslint-disable-line no-param-reassign\n }\n const listeners = getListeners(this);\n\n // Traverse to the tail while removing old value.\n let prev = null;\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n // Remove old value.\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n } else {\n prev = node;\n }\n\n node = node.next;\n }\n\n // Add new value.\n if (listener !== null) {\n const newNode = {\n listener,\n listenerType: ATTRIBUTE,\n passive: false,\n once: false,\n next: null,\n };\n if (prev === null) {\n listeners.set(eventName, newNode);\n } else {\n prev.next = newNode;\n }\n }\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n Object.defineProperty(\n eventTargetPrototype,\n `on${eventName}`,\n defineEventAttributeDescriptor(eventName)\n );\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n /** CustomEventTarget */\n function CustomEventTarget() {\n EventTarget.call(this);\n }\n\n CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n constructor: {\n value: CustomEventTarget,\n configurable: true,\n writable: true,\n },\n });\n\n for (let i = 0; i < eventNames.length; ++i) {\n defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\n }\n\n return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n * class A extends EventTarget {}\n * class B extends EventTarget(\"message\") {}\n * class C extends EventTarget(\"message\", \"error\") {}\n * class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n /*eslint-disable consistent-return */\n if (this instanceof EventTarget) {\n listenersMap.set(this, new Map());\n return\n }\n if (arguments.length === 1 && Array.isArray(arguments[0])) {\n return defineCustomEventTarget(arguments[0])\n }\n if (arguments.length > 0) {\n const types = new Array(arguments.length);\n for (let i = 0; i < arguments.length; ++i) {\n types[i] = arguments[i];\n }\n return defineCustomEventTarget(types)\n }\n throw new TypeError(\"Cannot call a class as a function\")\n /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n /**\n * Add a given listener to this event target.\n * @param {string} eventName The event name to add.\n * @param {Function} listener The listener to add.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n addEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n if (typeof listener !== \"function\" && !isObject(listener)) {\n throw new TypeError(\"'listener' should be a function or an object.\")\n }\n\n const listeners = getListeners(this);\n const optionsIsObj = isObject(options);\n const capture = optionsIsObj\n ? Boolean(options.capture)\n : Boolean(options);\n const listenerType = capture ? CAPTURE : BUBBLE;\n const newNode = {\n listener,\n listenerType,\n passive: optionsIsObj && Boolean(options.passive),\n once: optionsIsObj && Boolean(options.once),\n next: null,\n };\n\n // Set it as the first node if the first node is null.\n let node = listeners.get(eventName);\n if (node === undefined) {\n listeners.set(eventName, newNode);\n return\n }\n\n // Traverse to the tail while checking duplication..\n let prev = null;\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n // Should ignore duplication.\n return\n }\n prev = node;\n node = node.next;\n }\n\n // Add it.\n prev.next = newNode;\n },\n\n /**\n * Remove a given listener from this event target.\n * @param {string} eventName The event name to remove.\n * @param {Function} listener The listener to remove.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n removeEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n\n const listeners = getListeners(this);\n const capture = isObject(options)\n ? Boolean(options.capture)\n : Boolean(options);\n const listenerType = capture ? CAPTURE : BUBBLE;\n\n let prev = null;\n let node = listeners.get(eventName);\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n return\n }\n\n prev = node;\n node = node.next;\n }\n },\n\n /**\n * Dispatch a given event.\n * @param {Event|{type:string}} event The event to dispatch.\n * @returns {boolean} `false` if canceled.\n */\n dispatchEvent(event) {\n if (event == null || typeof event.type !== \"string\") {\n throw new TypeError('\"event.type\" should be a string.')\n }\n\n // If listeners aren't registered, terminate.\n const listeners = getListeners(this);\n const eventName = event.type;\n let node = listeners.get(eventName);\n if (node == null) {\n return true\n }\n\n // Since we cannot rewrite several properties, so wrap object.\n const wrappedEvent = wrapEvent(this, event);\n\n // This doesn't process capturing phase and bubbling phase.\n // This isn't participating in a tree.\n let prev = null;\n while (node != null) {\n // Remove this listener if it's once\n if (node.once) {\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n } else {\n prev = node;\n }\n\n // Call this listener\n setPassiveListener(\n wrappedEvent,\n node.passive ? node.listener : null\n );\n if (typeof node.listener === \"function\") {\n try {\n node.listener.call(this, wrappedEvent);\n } catch (err) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(err);\n }\n }\n } else if (\n node.listenerType !== ATTRIBUTE &&\n typeof node.listener.handleEvent === \"function\"\n ) {\n node.listener.handleEvent(wrappedEvent);\n }\n\n // Break if `event.stopImmediatePropagation` was called.\n if (isStopped(wrappedEvent)) {\n break\n }\n\n node = node.next;\n }\n setPassiveListener(wrappedEvent, null);\n setEventPhase(wrappedEvent, 0);\n setCurrentTarget(wrappedEvent, null);\n\n return !wrappedEvent.defaultPrevented\n },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n value: EventTarget,\n configurable: true,\n writable: true,\n});\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n typeof window !== \"undefined\" &&\n typeof window.EventTarget !== \"undefined\"\n) {\n Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\n}\n\nexports.defineEventAttribute = defineEventAttribute;\nexports.EventTarget = EventTarget;\nexports.default = EventTarget;\n\nmodule.exports = EventTarget\nmodule.exports.EventTarget = module.exports[\"default\"] = EventTarget\nmodule.exports.defineEventAttribute = defineEventAttribute\n//# sourceMappingURL=event-target-shim.js.map\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport createPerformanceLogger from './createPerformanceLogger';\nimport type {IPerformanceLogger} from './createPerformanceLogger';\n\n/**\n * This is a global shared instance of IPerformanceLogger that is created with\n * createPerformanceLogger().\n * This logger should be used only for global performance metrics like the ones\n * that are logged during loading bundle. If you want to log something from your\n * React component you should use PerformanceLoggerContext instead.\n */\nconst GlobalPerformanceLogger: IPerformanceLogger = createPerformanceLogger();\n\nmodule.exports = GlobalPerformanceLogger;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nconst Systrace = require('../Performance/Systrace');\n\nconst infoLog = require('./infoLog');\n\nexport type Timespan = {\n startTime: number,\n endTime?: number,\n totalTime?: number,\n startExtras?: Extras,\n endExtras?: Extras,\n};\n\n// Extra values should be serializable primitives\nexport type ExtraValue = number | string | boolean;\n\nexport type Extras = {[key: string]: ExtraValue};\n\nexport interface IPerformanceLogger {\n addTimespan(\n key: string,\n startTime: number,\n endTime: number,\n startExtras?: Extras,\n endExtras?: Extras,\n ): void;\n append(logger: IPerformanceLogger): void;\n clear(): void;\n clearCompleted(): void;\n close(): void;\n currentTimestamp(): number;\n getExtras(): $ReadOnly<{[key: string]: ?ExtraValue, ...}>;\n getPoints(): $ReadOnly<{[key: string]: ?number, ...}>;\n getPointExtras(): $ReadOnly<{[key: string]: ?Extras, ...}>;\n getTimespans(): $ReadOnly<{[key: string]: ?Timespan, ...}>;\n hasTimespan(key: string): boolean;\n isClosed(): boolean;\n logEverything(): void;\n markPoint(key: string, timestamp?: number, extras?: Extras): void;\n removeExtra(key: string): ?ExtraValue;\n setExtra(key: string, value: ExtraValue): void;\n startTimespan(key: string, timestamp?: number, extras?: Extras): void;\n stopTimespan(key: string, timestamp?: number, extras?: Extras): void;\n}\n\nconst _cookies: {[key: string]: number, ...} = {};\n\nconst PRINT_TO_CONSOLE: false = false; // Type as false to prevent accidentally committing `true`;\n\nexport const getCurrentTimestamp: () => number =\n global.nativeQPLTimestamp ?? global.performance.now.bind(global.performance);\n\nclass PerformanceLogger implements IPerformanceLogger {\n _timespans: {[key: string]: ?Timespan} = {};\n _extras: {[key: string]: ?ExtraValue} = {};\n _points: {[key: string]: ?number} = {};\n _pointExtras: {[key: string]: ?Extras, ...} = {};\n _closed: boolean = false;\n\n addTimespan(\n key: string,\n startTime: number,\n endTime: number,\n startExtras?: Extras,\n endExtras?: Extras,\n ) {\n if (this._closed) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog('PerformanceLogger: addTimespan - has closed ignoring: ', key);\n }\n return;\n }\n if (this._timespans[key]) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog(\n 'PerformanceLogger: Attempting to add a timespan that already exists ',\n key,\n );\n }\n return;\n }\n\n this._timespans[key] = {\n startTime,\n endTime,\n totalTime: endTime - (startTime || 0),\n startExtras,\n endExtras,\n };\n }\n\n append(performanceLogger: IPerformanceLogger) {\n this._timespans = {\n ...performanceLogger.getTimespans(),\n ...this._timespans,\n };\n this._extras = {...performanceLogger.getExtras(), ...this._extras};\n this._points = {...performanceLogger.getPoints(), ...this._points};\n this._pointExtras = {\n ...performanceLogger.getPointExtras(),\n ...this._pointExtras,\n };\n }\n\n clear() {\n this._timespans = {};\n this._extras = {};\n this._points = {};\n if (PRINT_TO_CONSOLE) {\n infoLog('PerformanceLogger.js', 'clear');\n }\n }\n\n clearCompleted() {\n for (const key in this._timespans) {\n if (this._timespans[key]?.totalTime != null) {\n delete this._timespans[key];\n }\n }\n this._extras = {};\n this._points = {};\n if (PRINT_TO_CONSOLE) {\n infoLog('PerformanceLogger.js', 'clearCompleted');\n }\n }\n\n close() {\n this._closed = true;\n }\n\n currentTimestamp() {\n return getCurrentTimestamp();\n }\n\n getExtras() {\n return this._extras;\n }\n\n getPoints() {\n return this._points;\n }\n\n getPointExtras() {\n return this._pointExtras;\n }\n\n getTimespans() {\n return this._timespans;\n }\n\n hasTimespan(key: string) {\n return !!this._timespans[key];\n }\n\n isClosed() {\n return this._closed;\n }\n\n logEverything() {\n if (PRINT_TO_CONSOLE) {\n // log timespans\n for (const key in this._timespans) {\n if (this._timespans[key]?.totalTime != null) {\n infoLog(key + ': ' + this._timespans[key].totalTime + 'ms');\n }\n }\n\n // log extras\n infoLog(this._extras);\n\n // log points\n for (const key in this._points) {\n if (this._points[key] != null) {\n infoLog(key + ': ' + this._points[key] + 'ms');\n }\n }\n }\n }\n\n markPoint(\n key: string,\n timestamp?: number = getCurrentTimestamp(),\n extras?: Extras,\n ) {\n if (this._closed) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog('PerformanceLogger: markPoint - has closed ignoring: ', key);\n }\n return;\n }\n if (this._points[key] != null) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog(\n 'PerformanceLogger: Attempting to mark a point that has been already logged ',\n key,\n );\n }\n return;\n }\n this._points[key] = timestamp;\n if (extras) {\n this._pointExtras[key] = extras;\n }\n }\n\n removeExtra(key: string): ?ExtraValue {\n const value = this._extras[key];\n delete this._extras[key];\n return value;\n }\n\n setExtra(key: string, value: ExtraValue) {\n if (this._closed) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog('PerformanceLogger: setExtra - has closed ignoring: ', key);\n }\n return;\n }\n\n if (this._extras.hasOwnProperty(key)) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog(\n 'PerformanceLogger: Attempting to set an extra that already exists ',\n {key, currentValue: this._extras[key], attemptedValue: value},\n );\n }\n return;\n }\n this._extras[key] = value;\n }\n\n startTimespan(\n key: string,\n timestamp?: number = getCurrentTimestamp(),\n extras?: Extras,\n ) {\n if (this._closed) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog(\n 'PerformanceLogger: startTimespan - has closed ignoring: ',\n key,\n );\n }\n return;\n }\n\n if (this._timespans[key]) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog(\n 'PerformanceLogger: Attempting to start a timespan that already exists ',\n key,\n );\n }\n return;\n }\n\n this._timespans[key] = {\n startTime: timestamp,\n startExtras: extras,\n };\n _cookies[key] = Systrace.beginAsyncEvent(key);\n if (PRINT_TO_CONSOLE) {\n infoLog('PerformanceLogger.js', 'start: ' + key);\n }\n }\n\n stopTimespan(\n key: string,\n timestamp?: number = getCurrentTimestamp(),\n extras?: Extras,\n ) {\n if (this._closed) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog('PerformanceLogger: stopTimespan - has closed ignoring: ', key);\n }\n return;\n }\n\n const timespan = this._timespans[key];\n if (!timespan || timespan.startTime == null) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog(\n 'PerformanceLogger: Attempting to end a timespan that has not started ',\n key,\n );\n }\n return;\n }\n if (timespan.endTime != null) {\n if (PRINT_TO_CONSOLE && __DEV__) {\n infoLog(\n 'PerformanceLogger: Attempting to end a timespan that has already ended ',\n key,\n );\n }\n return;\n }\n\n timespan.endExtras = extras;\n timespan.endTime = timestamp;\n timespan.totalTime = timespan.endTime - (timespan.startTime || 0);\n if (PRINT_TO_CONSOLE) {\n infoLog('PerformanceLogger.js', 'end: ' + key);\n }\n\n if (_cookies[key] != null) {\n Systrace.endAsyncEvent(key, _cookies[key]);\n delete _cookies[key];\n }\n }\n}\n\n/**\n * This function creates performance loggers that can be used to collect and log\n * various performance data such as timespans, points and extras.\n * The loggers need to have minimal overhead since they're used in production.\n */\nexport default function createPerformanceLogger(): IPerformanceLogger {\n return new PerformanceLogger();\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\n/**\n * Intentional info-level logging for clear separation from ad-hoc console debug logging.\n */\nfunction infoLog(...args: Array): void {\n return console.log(...args);\n}\n\nmodule.exports = infoLog;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\nimport NativeNetworkingIOS from './NativeNetworkingIOS';\nimport {type NativeResponseType} from './XMLHttpRequest';\nimport convertRequestBody, {type RequestBody} from './convertRequestBody';\nimport {type EventSubscription} from '../vendor/emitter/EventEmitter';\n\ntype RCTNetworkingEventDefinitions = $ReadOnly<{\n didSendNetworkData: [\n [\n number, // requestId\n number, // progress\n number, // total\n ],\n ],\n didReceiveNetworkResponse: [\n [\n number, // requestId\n number, // status\n ?{[string]: string}, // responseHeaders\n ?string, // responseURL\n ],\n ],\n didReceiveNetworkData: [\n [\n number, // requestId\n string, // response\n ],\n ],\n didReceiveNetworkIncrementalData: [\n [\n number, // requestId\n string, // responseText\n number, // progress\n number, // total\n ],\n ],\n didReceiveNetworkDataProgress: [\n [\n number, // requestId\n number, // loaded\n number, // total\n ],\n ],\n didCompleteNetworkResponse: [\n [\n number, // requestId\n string, // error\n boolean, // timeOutError\n ],\n ],\n}>;\n\nconst RCTNetworking = {\n addListener>(\n eventType: K,\n listener: (...$ElementType) => mixed,\n context?: mixed,\n ): EventSubscription {\n return RCTDeviceEventEmitter.addListener(eventType, listener, context);\n },\n\n sendRequest(\n method: string,\n trackingName: string,\n url: string,\n headers: {...},\n data: RequestBody,\n responseType: NativeResponseType,\n incrementalUpdates: boolean,\n timeout: number,\n callback: (requestId: number) => void,\n withCredentials: boolean,\n ) {\n const body = convertRequestBody(data);\n NativeNetworkingIOS.sendRequest(\n {\n method,\n url,\n data: {...body, trackingName},\n headers,\n responseType,\n incrementalUpdates,\n timeout,\n withCredentials,\n },\n callback,\n );\n },\n\n abortRequest(requestId: number) {\n NativeNetworkingIOS.abortRequest(requestId);\n },\n\n clearCookies(callback: (result: boolean) => void) {\n NativeNetworkingIOS.clearCookies(callback);\n },\n};\n\nmodule.exports = RCTNetworking;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +sendRequest: (\n query: {|\n method: string,\n url: string,\n data: Object,\n headers: Object,\n responseType: string,\n incrementalUpdates: boolean,\n timeout: number,\n withCredentials: boolean,\n |},\n callback: (requestId: number) => void,\n ) => void;\n +abortRequest: (requestId: number) => void;\n +clearCookies: (callback: (result: boolean) => void) => void;\n\n // RCTEventEmitter\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing('Networking'): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst binaryToBase64 = require('../Utilities/binaryToBase64');\n\nconst Blob = require('../Blob/Blob');\nconst FormData = require('./FormData');\n\nexport type RequestBody =\n | string\n | Blob\n | FormData\n | {uri: string, ...}\n | ArrayBuffer\n | $ArrayBufferView;\n\nfunction convertRequestBody(body: RequestBody): Object {\n if (typeof body === 'string') {\n return {string: body};\n }\n if (body instanceof Blob) {\n return {blob: body.data};\n }\n if (body instanceof FormData) {\n return {formData: body.getParts()};\n }\n if (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {\n /* $FlowFixMe[incompatible-call] : no way to assert that 'body' is indeed\n * an ArrayBufferView */\n return {base64: binaryToBase64(body)};\n }\n return body;\n}\n\nmodule.exports = convertRequestBody;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst base64 = require('base64-js');\n\nfunction binaryToBase64(data: ArrayBuffer | $ArrayBufferView): string {\n if (data instanceof ArrayBuffer) {\n // $FlowFixMe[reassign-const]\n data = new Uint8Array(data);\n }\n if (data instanceof Uint8Array) {\n return base64.fromByteArray(data);\n }\n if (!ArrayBuffer.isView(data)) {\n throw new Error('data must be ArrayBuffer or typed array');\n }\n // Already checked that `data` is `DataView` in `ArrayBuffer.isView(data)`\n const {buffer, byteOffset, byteLength} = ((data: $FlowFixMe): DataView);\n return base64.fromByteArray(new Uint8Array(buffer, byteOffset, byteLength));\n}\n\nmodule.exports = binaryToBase64;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\ntype FormDataValue = string | {name?: string, type?: string, uri: string};\ntype FormDataNameValuePair = [string, FormDataValue];\n\ntype Headers = {[name: string]: string, ...};\ntype FormDataPart =\n | {\n string: string,\n headers: Headers,\n ...\n }\n | {\n uri: string,\n headers: Headers,\n name?: string,\n type?: string,\n ...\n };\n\n/**\n * Polyfill for XMLHttpRequest2 FormData API, allowing multipart POST requests\n * with mixed data (string, native files) to be submitted via XMLHttpRequest.\n *\n * Example:\n *\n * var photo = {\n * uri: uriFromCameraRoll,\n * type: 'image/jpeg',\n * name: 'photo.jpg',\n * };\n *\n * var body = new FormData();\n * body.append('authToken', 'secret');\n * body.append('photo', photo);\n * body.append('title', 'A beautiful photo!');\n *\n * xhr.open('POST', serverURL);\n * xhr.send(body);\n */\nclass FormData {\n _parts: Array;\n\n constructor() {\n this._parts = [];\n }\n\n append(key: string, value: FormDataValue) {\n // The XMLHttpRequest spec doesn't specify if duplicate keys are allowed.\n // MDN says that any new values should be appended to existing values.\n // In any case, major browsers allow duplicate keys, so that's what we'll do\n // too. They'll simply get appended as additional form data parts in the\n // request body, leaving the server to deal with them.\n this._parts.push([key, value]);\n }\n\n getParts(): Array {\n return this._parts.map(([name, value]) => {\n const contentDisposition = 'form-data; name=\"' + name + '\"';\n\n const headers: Headers = {'content-disposition': contentDisposition};\n\n // The body part is a \"blob\", which in React Native just means\n // an object with a `uri` attribute. Optionally, it can also\n // have a `name` and `type` attribute to specify filename and\n // content type (cf. web Blob interface.)\n if (typeof value === 'object' && value) {\n if (typeof value.name === 'string') {\n headers['content-disposition'] += '; filename=\"' + value.name + '\"';\n }\n if (typeof value.type === 'string') {\n headers['content-type'] = value.type;\n }\n return {...value, headers, fieldName: name};\n }\n // Convert non-object values to strings as per FormData.append() spec\n return {string: String(value), headers, fieldName: name};\n });\n }\n}\n\nmodule.exports = FormData;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n/* globals Headers, Request, Response */\n\n'use strict';\n\n// side-effectful require() to put fetch,\n// Headers, Request, Response in global scope\nrequire('whatwg-fetch');\n\nmodule.exports = {fetch, Headers, Request, Response};\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.WHATWGFetch = {})));\n}(this, (function (exports) { 'use strict';\n\n var global =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n (typeof global !== 'undefined' && global);\n\n var support = {\n searchParams: 'URLSearchParams' in global,\n iterable: 'Symbol' in global && 'iterator' in Symbol,\n blob:\n 'FileReader' in global &&\n 'Blob' in global &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in global,\n arrayBuffer: 'ArrayBuffer' in global\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed;\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this);\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/;\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/;\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n }\n }\n }\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = global.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n setTimeout(function() {\n resolve(new Response(body, options));\n }, 0);\n };\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n }, 0);\n };\n\n function fixUrl(url) {\n try {\n return url === '' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob';\n } else if (\n support.arrayBuffer &&\n request.headers.get('Content-Type') &&\n request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n ) {\n xhr.responseType = 'arraybuffer';\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n });\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!global.fetch) {\n global.fetch = fetch;\n global.Headers = Headers;\n global.Request = Request;\n global.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport Blob from '../Blob/Blob';\nimport type {BlobData} from '../Blob/BlobTypes';\nimport BlobManager from '../Blob/BlobManager';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport binaryToBase64 from '../Utilities/binaryToBase64';\nimport Platform from '../Utilities/Platform';\nimport type {EventSubscription} from '../vendor/emitter/EventEmitter';\nimport NativeWebSocketModule from './NativeWebSocketModule';\nimport WebSocketEvent from './WebSocketEvent';\nimport base64 from 'base64-js';\nimport EventTarget from 'event-target-shim';\nimport invariant from 'invariant';\n\ntype ArrayBufferView =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | DataView;\n\ntype BinaryType = 'blob' | 'arraybuffer';\n\nconst CONNECTING = 0;\nconst OPEN = 1;\nconst CLOSING = 2;\nconst CLOSED = 3;\n\nconst CLOSE_NORMAL = 1000;\n\nconst WEBSOCKET_EVENTS = ['close', 'error', 'message', 'open'];\n\nlet nextWebSocketId = 0;\n\ntype WebSocketEventDefinitions = {\n websocketOpen: [{id: number, protocol: string}],\n websocketClosed: [{id: number, code: number, reason: string}],\n websocketMessage: [\n | {type: 'binary', id: number, data: string}\n | {type: 'text', id: number, data: string}\n | {type: 'blob', id: number, data: BlobData},\n ],\n websocketFailed: [{id: number, message: string}],\n};\n\n/**\n * Browser-compatible WebSockets implementation.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * See https://github.com/websockets/ws\n */\nclass WebSocket extends (EventTarget(...WEBSOCKET_EVENTS): any) {\n static CONNECTING: number = CONNECTING;\n static OPEN: number = OPEN;\n static CLOSING: number = CLOSING;\n static CLOSED: number = CLOSED;\n\n CONNECTING: number = CONNECTING;\n OPEN: number = OPEN;\n CLOSING: number = CLOSING;\n CLOSED: number = CLOSED;\n\n _socketId: number;\n _eventEmitter: NativeEventEmitter;\n _subscriptions: Array;\n _binaryType: ?BinaryType;\n\n onclose: ?Function;\n onerror: ?Function;\n onmessage: ?Function;\n onopen: ?Function;\n\n bufferedAmount: number;\n extension: ?string;\n protocol: ?string;\n readyState: number = CONNECTING;\n url: ?string;\n\n constructor(\n url: string,\n protocols: ?string | ?Array,\n options: ?{headers?: {origin?: string, ...}, ...},\n ) {\n super();\n this.url = url;\n if (typeof protocols === 'string') {\n protocols = [protocols];\n }\n\n const {headers = {}, ...unrecognized} = options || {};\n\n // Preserve deprecated backwards compatibility for the 'origin' option\n if (unrecognized && typeof unrecognized.origin === 'string') {\n console.warn(\n 'Specifying `origin` as a WebSocket connection option is deprecated. Include it under `headers` instead.',\n );\n /* $FlowFixMe[prop-missing] (>=0.54.0 site=react_native_fb,react_native_\n * oss) This comment suppresses an error found when Flow v0.54 was\n * deployed. To see the error delete this comment and run Flow. */\n headers.origin = unrecognized.origin;\n /* $FlowFixMe[prop-missing] (>=0.54.0 site=react_native_fb,react_native_\n * oss) This comment suppresses an error found when Flow v0.54 was\n * deployed. To see the error delete this comment and run Flow. */\n delete unrecognized.origin;\n }\n\n // Warn about and discard anything else\n if (Object.keys(unrecognized).length > 0) {\n console.warn(\n 'Unrecognized WebSocket connection option(s) `' +\n Object.keys(unrecognized).join('`, `') +\n '`. ' +\n 'Did you mean to put these under `headers`?',\n );\n }\n\n if (!Array.isArray(protocols)) {\n protocols = null;\n }\n\n this._eventEmitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeWebSocketModule,\n );\n this._socketId = nextWebSocketId++;\n this._registerEvents();\n NativeWebSocketModule.connect(url, protocols, {headers}, this._socketId);\n }\n\n get binaryType(): ?BinaryType {\n return this._binaryType;\n }\n\n set binaryType(binaryType: BinaryType): void {\n if (binaryType !== 'blob' && binaryType !== 'arraybuffer') {\n throw new Error(\"binaryType must be either 'blob' or 'arraybuffer'\");\n }\n if (this._binaryType === 'blob' || binaryType === 'blob') {\n invariant(\n BlobManager.isAvailable,\n 'Native module BlobModule is required for blob support',\n );\n if (binaryType === 'blob') {\n BlobManager.addWebSocketHandler(this._socketId);\n } else {\n BlobManager.removeWebSocketHandler(this._socketId);\n }\n }\n this._binaryType = binaryType;\n }\n\n close(code?: number, reason?: string): void {\n if (this.readyState === this.CLOSING || this.readyState === this.CLOSED) {\n return;\n }\n\n this.readyState = this.CLOSING;\n this._close(code, reason);\n }\n\n send(data: string | ArrayBuffer | ArrayBufferView | Blob): void {\n if (this.readyState === this.CONNECTING) {\n throw new Error('INVALID_STATE_ERR');\n }\n\n if (data instanceof Blob) {\n invariant(\n BlobManager.isAvailable,\n 'Native module BlobModule is required for blob support',\n );\n BlobManager.sendOverSocket(data, this._socketId);\n return;\n }\n\n if (typeof data === 'string') {\n NativeWebSocketModule.send(data, this._socketId);\n return;\n }\n\n if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {\n NativeWebSocketModule.sendBinary(binaryToBase64(data), this._socketId);\n return;\n }\n\n throw new Error('Unsupported data type');\n }\n\n ping(): void {\n if (this.readyState === this.CONNECTING) {\n throw new Error('INVALID_STATE_ERR');\n }\n\n NativeWebSocketModule.ping(this._socketId);\n }\n\n _close(code?: number, reason?: string): void {\n // See https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent\n const statusCode = typeof code === 'number' ? code : CLOSE_NORMAL;\n const closeReason = typeof reason === 'string' ? reason : '';\n NativeWebSocketModule.close(statusCode, closeReason, this._socketId);\n\n if (BlobManager.isAvailable && this._binaryType === 'blob') {\n BlobManager.removeWebSocketHandler(this._socketId);\n }\n }\n\n _unregisterEvents(): void {\n this._subscriptions.forEach(e => e.remove());\n this._subscriptions = [];\n }\n\n _registerEvents(): void {\n this._subscriptions = [\n this._eventEmitter.addListener('websocketMessage', ev => {\n if (ev.id !== this._socketId) {\n return;\n }\n let data = ev.data;\n switch (ev.type) {\n case 'binary':\n data = base64.toByteArray(ev.data).buffer;\n break;\n case 'blob':\n data = BlobManager.createFromOptions(ev.data);\n break;\n }\n this.dispatchEvent(new WebSocketEvent('message', {data}));\n }),\n this._eventEmitter.addListener('websocketOpen', ev => {\n if (ev.id !== this._socketId) {\n return;\n }\n this.readyState = this.OPEN;\n this.protocol = ev.protocol;\n this.dispatchEvent(new WebSocketEvent('open'));\n }),\n this._eventEmitter.addListener('websocketClosed', ev => {\n if (ev.id !== this._socketId) {\n return;\n }\n this.readyState = this.CLOSED;\n this.dispatchEvent(\n new WebSocketEvent('close', {\n code: ev.code,\n reason: ev.reason,\n }),\n );\n this._unregisterEvents();\n this.close();\n }),\n this._eventEmitter.addListener('websocketFailed', ev => {\n if (ev.id !== this._socketId) {\n return;\n }\n this.readyState = this.CLOSED;\n this.dispatchEvent(\n new WebSocketEvent('error', {\n message: ev.message,\n }),\n );\n this.dispatchEvent(\n new WebSocketEvent('close', {\n message: ev.message,\n }),\n );\n this._unregisterEvents();\n this.close();\n }),\n ];\n }\n}\n\nmodule.exports = WebSocket;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nimport {\n type EventSubscription,\n type IEventEmitter,\n} from '../vendor/emitter/EventEmitter';\nimport Platform from '../Utilities/Platform';\nimport RCTDeviceEventEmitter from './RCTDeviceEventEmitter';\nimport invariant from 'invariant';\n\ninterface NativeModule {\n addListener(eventType: string): void;\n removeListeners(count: number): void;\n}\n\nexport type {EventSubscription};\n\n/**\n * `NativeEventEmitter` is intended for use by Native Modules to emit events to\n * JavaScript listeners. If a `NativeModule` is supplied to the constructor, it\n * will be notified (via `addListener` and `removeListeners`) when the listener\n * count changes to manage \"native memory\".\n *\n * Currently, all native events are fired via a global `RCTDeviceEventEmitter`.\n * This means event names must be globally unique, and it means that call sites\n * can theoretically listen to `RCTDeviceEventEmitter` (although discouraged).\n */\nexport default class NativeEventEmitter\n implements IEventEmitter {\n _nativeModule: ?NativeModule;\n\n constructor(nativeModule: ?NativeModule) {\n if (Platform.OS === 'ios') {\n invariant(\n nativeModule != null,\n '`new NativeEventEmitter()` requires a non-null argument.',\n );\n }\n\n const hasAddListener =\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n !!nativeModule && typeof nativeModule.addListener === 'function';\n const hasRemoveListeners =\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n !!nativeModule && typeof nativeModule.removeListeners === 'function';\n\n if (nativeModule && hasAddListener && hasRemoveListeners) {\n this._nativeModule = nativeModule;\n } else if (nativeModule != null) {\n if (!hasAddListener) {\n console.warn(\n '`new NativeEventEmitter()` was called with a non-null argument without the required `addListener` method.',\n );\n }\n if (!hasRemoveListeners) {\n console.warn(\n '`new NativeEventEmitter()` was called with a non-null argument without the required `removeListeners` method.',\n );\n }\n }\n }\n\n addListener>(\n eventType: TEvent,\n listener: (...args: $ElementType) => mixed,\n context?: mixed,\n ): EventSubscription {\n this._nativeModule?.addListener(eventType);\n let subscription: ?EventSubscription = RCTDeviceEventEmitter.addListener(\n eventType,\n listener,\n context,\n );\n\n return {\n remove: () => {\n if (subscription != null) {\n this._nativeModule?.removeListeners(1);\n // $FlowFixMe[incompatible-use]\n subscription.remove();\n subscription = null;\n }\n },\n };\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addListener`.\n */\n removeListener>(\n eventType: TEvent,\n listener: (...args: $ElementType) => mixed,\n ): void {\n this._nativeModule?.removeListeners(1);\n // NOTE: This will report a deprecation notice via `console.error`.\n // $FlowFixMe[prop-missing] - `removeListener` exists but is deprecated.\n RCTDeviceEventEmitter.removeListener(eventType, listener);\n }\n\n emit>(\n eventType: TEvent,\n ...args: $ElementType\n ): void {\n // Generally, `RCTDeviceEventEmitter` is directly invoked. But this is\n // included for completeness.\n RCTDeviceEventEmitter.emit(eventType, ...args);\n }\n\n removeAllListeners>(\n eventType?: ?TEvent,\n ): void {\n invariant(\n eventType != null,\n '`NativeEventEmitter.removeAllListener()` requires a non-null argument.',\n );\n this._nativeModule?.removeListeners(this.listenerCount(eventType));\n RCTDeviceEventEmitter.removeAllListeners(eventType);\n }\n\n listenerCount>(eventType: TEvent): number {\n return RCTDeviceEventEmitter.listenerCount(eventType);\n }\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +connect: (\n url: string,\n protocols: ?Array,\n options: {|headers?: Object|},\n socketID: number,\n ) => void;\n +send: (message: string, forSocketID: number) => void;\n +sendBinary: (base64String: string, forSocketID: number) => void;\n +ping: (socketID: number) => void;\n +close: (code: number, reason: string, socketID: number) => void;\n\n // RCTEventEmitter\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing(\n 'WebSocketModule',\n): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n'use strict';\n\n/**\n * Event object passed to the `onopen`, `onclose`, `onmessage`, `onerror`\n * callbacks of `WebSocket`.\n *\n * The `type` property is \"open\", \"close\", \"message\", \"error\" respectively.\n *\n * In case of \"message\", the `data` property contains the incoming data.\n */\nclass WebSocketEvent {\n constructor(type, eventInitDict) {\n this.type = type.toString();\n Object.assign(this, eventInitDict);\n }\n}\n\nmodule.exports = WebSocketEvent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst Blob = require('./Blob');\n\nconst invariant = require('invariant');\n\nimport type {BlobOptions} from './BlobTypes';\n\n/**\n * The File interface provides information about files.\n */\nclass File extends Blob {\n /**\n * Constructor for JS consumers.\n */\n constructor(\n parts: Array,\n name: string,\n options?: BlobOptions,\n ) {\n invariant(\n parts != null && name != null,\n 'Failed to construct `File`: Must pass both `parts` and `name` arguments.',\n );\n\n super(parts, options);\n this.data.name = name;\n }\n\n /**\n * Name of the file.\n */\n get name(): string {\n invariant(this.data.name != null, 'Files must have a name set.');\n return this.data.name;\n }\n\n /*\n * Last modified time of the file.\n */\n get lastModified(): number {\n return this.data.lastModified || 0;\n }\n}\n\nmodule.exports = File;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nconst Blob = require('./Blob');\nconst EventTarget = require('event-target-shim');\n\nimport NativeFileReaderModule from './NativeFileReaderModule';\n\ntype ReadyState =\n | 0 // EMPTY\n | 1 // LOADING\n | 2; // DONE\n\ntype ReaderResult = string | ArrayBuffer;\n\nconst READER_EVENTS = [\n 'abort',\n 'error',\n 'load',\n 'loadstart',\n 'loadend',\n 'progress',\n];\n\nconst EMPTY = 0;\nconst LOADING = 1;\nconst DONE = 2;\n\nclass FileReader extends (EventTarget(...READER_EVENTS): any) {\n static EMPTY: number = EMPTY;\n static LOADING: number = LOADING;\n static DONE: number = DONE;\n\n EMPTY: number = EMPTY;\n LOADING: number = LOADING;\n DONE: number = DONE;\n\n _readyState: ReadyState;\n _error: ?Error;\n _result: ?ReaderResult;\n _aborted: boolean = false;\n _subscriptions: Array = [];\n\n constructor() {\n super();\n this._reset();\n }\n\n _reset(): void {\n this._readyState = EMPTY;\n this._error = null;\n this._result = null;\n }\n\n _clearSubscriptions(): void {\n this._subscriptions.forEach(sub => sub.remove());\n this._subscriptions = [];\n }\n\n _setReadyState(newState: ReadyState) {\n this._readyState = newState;\n this.dispatchEvent({type: 'readystatechange'});\n if (newState === DONE) {\n if (this._aborted) {\n this.dispatchEvent({type: 'abort'});\n } else if (this._error) {\n this.dispatchEvent({type: 'error'});\n } else {\n this.dispatchEvent({type: 'load'});\n }\n this.dispatchEvent({type: 'loadend'});\n }\n }\n\n readAsArrayBuffer() {\n throw new Error('FileReader.readAsArrayBuffer is not implemented');\n }\n\n readAsDataURL(blob: ?Blob) {\n this._aborted = false;\n\n if (blob == null) {\n throw new TypeError(\n \"Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'\",\n );\n }\n\n NativeFileReaderModule.readAsDataURL(blob.data).then(\n (text: string) => {\n if (this._aborted) {\n return;\n }\n this._result = text;\n this._setReadyState(DONE);\n },\n error => {\n if (this._aborted) {\n return;\n }\n this._error = error;\n this._setReadyState(DONE);\n },\n );\n }\n\n readAsText(blob: ?Blob, encoding: string = 'UTF-8') {\n this._aborted = false;\n\n if (blob == null) {\n throw new TypeError(\n \"Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'\",\n );\n }\n\n NativeFileReaderModule.readAsText(blob.data, encoding).then(\n (text: string) => {\n if (this._aborted) {\n return;\n }\n this._result = text;\n this._setReadyState(DONE);\n },\n error => {\n if (this._aborted) {\n return;\n }\n this._error = error;\n this._setReadyState(DONE);\n },\n );\n }\n\n abort() {\n this._aborted = true;\n // only call onreadystatechange if there is something to abort, as per spec\n if (this._readyState !== EMPTY && this._readyState !== DONE) {\n this._reset();\n this._setReadyState(DONE);\n }\n // Reset again after, in case modified in handler\n this._reset();\n }\n\n get readyState(): ReadyState {\n return this._readyState;\n }\n\n get error(): ?Error {\n return this._error;\n }\n\n get result(): ?ReaderResult {\n return this._result;\n }\n}\n\nmodule.exports = FileReader;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +readAsDataURL: (data: Object) => Promise;\n +readAsText: (data: Object, encoding: string) => Promise;\n}\n\nexport default (TurboModuleRegistry.getEnforcing(\n 'FileReaderModule',\n): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nconst Blob = require('./Blob');\n\nimport NativeBlobModule from './NativeBlobModule';\n\nlet BLOB_URL_PREFIX = null;\n\nif (\n NativeBlobModule &&\n typeof NativeBlobModule.getConstants().BLOB_URI_SCHEME === 'string'\n) {\n const constants = NativeBlobModule.getConstants();\n BLOB_URL_PREFIX = constants.BLOB_URI_SCHEME + ':';\n if (typeof constants.BLOB_URI_HOST === 'string') {\n BLOB_URL_PREFIX += `//${constants.BLOB_URI_HOST}/`;\n }\n}\n\n/**\n * To allow Blobs be accessed via `content://` URIs,\n * you need to register `BlobProvider` as a ContentProvider in your app's `AndroidManifest.xml`:\n *\n * ```xml\n * \n * \n * \n * \n * \n * ```\n * And then define the `blob_provider_authority` string in `res/values/strings.xml`.\n * Use a dotted name that's entirely unique to your app:\n *\n * ```xml\n * \n * your.app.package.blobs\n * \n * ```\n */\n\n// Small subset from whatwg-url: https://github.com/jsdom/whatwg-url/tree/master/src\n// The reference code bloat comes from Unicode issues with URLs, so those won't work here.\nexport class URLSearchParams {\n _searchParams = [];\n\n constructor(params: any) {\n if (typeof params === 'object') {\n Object.keys(params).forEach(key => this.append(key, params[key]));\n }\n }\n\n append(key: string, value: string) {\n this._searchParams.push([key, value]);\n }\n\n delete(name) {\n throw new Error('URLSearchParams.delete is not implemented');\n }\n\n get(name) {\n throw new Error('URLSearchParams.get is not implemented');\n }\n\n getAll(name) {\n throw new Error('URLSearchParams.getAll is not implemented');\n }\n\n has(name) {\n throw new Error('URLSearchParams.has is not implemented');\n }\n\n set(name, value) {\n throw new Error('URLSearchParams.set is not implemented');\n }\n\n sort() {\n throw new Error('URLSearchParams.sort is not implemented');\n }\n\n [Symbol.iterator]() {\n return this._searchParams[Symbol.iterator]();\n }\n\n toString() {\n if (this._searchParams.length === 0) {\n return '';\n }\n const last = this._searchParams.length - 1;\n return this._searchParams.reduce((acc, curr, index) => {\n return acc + curr.join('=') + (index === last ? '' : '&');\n }, '');\n }\n}\n\nfunction validateBaseUrl(url: string) {\n // from this MIT-licensed gist: https://gist.github.com/dperini/729294\n return /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)*(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/.test(\n url,\n );\n}\n\nexport class URL {\n _searchParamsInstance = null;\n\n static createObjectURL(blob: Blob) {\n if (BLOB_URL_PREFIX === null) {\n throw new Error('Cannot create URL for blob!');\n }\n return `${BLOB_URL_PREFIX}${blob.data.blobId}?offset=${blob.data.offset}&size=${blob.size}`;\n }\n\n static revokeObjectURL(url: string) {\n // Do nothing.\n }\n\n constructor(url: string, base: string) {\n let baseUrl = null;\n if (!base || validateBaseUrl(url)) {\n this._url = url;\n if (!this._url.endsWith('/')) {\n this._url += '/';\n }\n } else {\n if (typeof base === 'string') {\n baseUrl = base;\n if (!validateBaseUrl(baseUrl)) {\n throw new TypeError(`Invalid base URL: ${baseUrl}`);\n }\n } else if (typeof base === 'object') {\n baseUrl = base.toString();\n }\n if (baseUrl.endsWith('/')) {\n baseUrl = baseUrl.slice(0, baseUrl.length - 1);\n }\n if (!url.startsWith('/')) {\n url = `/${url}`;\n }\n if (baseUrl.endsWith(url)) {\n url = '';\n }\n this._url = `${baseUrl}${url}`;\n }\n }\n\n get hash() {\n throw new Error('URL.hash is not implemented');\n }\n\n get host() {\n throw new Error('URL.host is not implemented');\n }\n\n get hostname() {\n throw new Error('URL.hostname is not implemented');\n }\n\n get href(): string {\n return this.toString();\n }\n\n get origin() {\n throw new Error('URL.origin is not implemented');\n }\n\n get password() {\n throw new Error('URL.password is not implemented');\n }\n\n get pathname() {\n throw new Error('URL.pathname not implemented');\n }\n\n get port() {\n throw new Error('URL.port is not implemented');\n }\n\n get protocol() {\n throw new Error('URL.protocol is not implemented');\n }\n\n get search() {\n throw new Error('URL.search is not implemented');\n }\n\n get searchParams(): URLSearchParams {\n if (this._searchParamsInstance == null) {\n this._searchParamsInstance = new URLSearchParams();\n }\n return this._searchParamsInstance;\n }\n\n toJSON(): string {\n return this.toString();\n }\n\n toString(): string {\n if (this._searchParamsInstance === null) {\n return this._url;\n }\n const separator = this._url.indexOf('?') > -1 ? '&' : '?';\n return this._url + separator + this._searchParamsInstance.toString();\n }\n\n get username() {\n throw new Error('URL.username is not implemented');\n }\n}\n","/**\n * @author Toru Nagashima \n * See LICENSE file in root directory for full license.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar eventTargetShim = require('event-target-shim');\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nclass AbortSignal extends eventTargetShim.EventTarget {\n /**\n * AbortSignal cannot be constructed directly.\n */\n constructor() {\n super();\n throw new TypeError(\"AbortSignal cannot be constructed directly\");\n }\n /**\n * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n */\n get aborted() {\n const aborted = abortedFlags.get(this);\n if (typeof aborted !== \"boolean\") {\n throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? \"null\" : typeof this}`);\n }\n return aborted;\n }\n}\neventTargetShim.defineEventAttribute(AbortSignal.prototype, \"abort\");\n/**\n * Create an AbortSignal object.\n */\nfunction createAbortSignal() {\n const signal = Object.create(AbortSignal.prototype);\n eventTargetShim.EventTarget.call(signal);\n abortedFlags.set(signal, false);\n return signal;\n}\n/**\n * Abort a given signal.\n */\nfunction abortSignal(signal) {\n if (abortedFlags.get(signal) !== false) {\n return;\n }\n abortedFlags.set(signal, true);\n signal.dispatchEvent({ type: \"abort\" });\n}\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap();\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n aborted: { enumerable: true },\n});\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortSignal\",\n });\n}\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nclass AbortController {\n /**\n * Initialize this controller.\n */\n constructor() {\n signals.set(this, createAbortSignal());\n }\n /**\n * Returns the `AbortSignal` object associated with this object.\n */\n get signal() {\n return getSignal(this);\n }\n /**\n * Abort and signal to any observers that the associated activity is to be aborted.\n */\n abort() {\n abortSignal(getSignal(this));\n }\n}\n/**\n * Associated signals.\n */\nconst signals = new WeakMap();\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller) {\n const signal = signals.get(controller);\n if (signal == null) {\n throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? \"null\" : typeof controller}`);\n }\n return signal;\n}\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n signal: { enumerable: true },\n abort: { enumerable: true },\n});\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortController\",\n });\n}\n\nexports.AbortController = AbortController;\nexports.AbortSignal = AbortSignal;\nexports.default = AbortController;\n\nmodule.exports = AbortController\nmodule.exports.AbortController = module.exports[\"default\"] = AbortController\nmodule.exports.AbortSignal = AbortSignal\n//# sourceMappingURL=abort-controller.js.map\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\n/**\n * Set up alert().\n * You can use this module directly, or just require InitializeCore.\n */\nif (!global.alert) {\n global.alert = function(text) {\n // Require Alert on demand. Requiring it too early can lead to issues\n // with things like Platform not being fully initialized.\n require('../Alert/Alert').alert('Alert', '' + text);\n };\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport Platform from '../Utilities/Platform';\nimport type {DialogOptions} from '../NativeModules/specs/NativeDialogManagerAndroid';\nimport RCTAlertManager from './RCTAlertManager';\n\nexport type AlertType =\n | 'default'\n | 'plain-text'\n | 'secure-text'\n | 'login-password';\nexport type AlertButtonStyle = 'default' | 'cancel' | 'destructive';\nexport type Buttons = Array<{\n text?: string,\n onPress?: ?Function,\n style?: AlertButtonStyle,\n ...\n}>;\n\ntype Options = {\n cancelable?: ?boolean,\n onDismiss?: ?() => void,\n ...\n};\n\n/**\n * Launches an alert dialog with the specified title and message.\n *\n * See https://reactnative.dev/docs/alert.html\n */\nclass Alert {\n static alert(\n title: ?string,\n message?: ?string,\n buttons?: Buttons,\n options?: Options,\n ): void {\n if (Platform.OS === 'ios') {\n Alert.prompt(title, message, buttons, 'default');\n } else if (Platform.OS === 'android') {\n const NativeDialogManagerAndroid = require('../NativeModules/specs/NativeDialogManagerAndroid')\n .default;\n if (!NativeDialogManagerAndroid) {\n return;\n }\n const constants = NativeDialogManagerAndroid.getConstants();\n\n const config: DialogOptions = {\n title: title || '',\n message: message || '',\n cancelable: false,\n };\n\n if (options && options.cancelable) {\n config.cancelable = options.cancelable;\n }\n // At most three buttons (neutral, negative, positive). Ignore rest.\n // The text 'OK' should be probably localized. iOS Alert does that in native.\n const defaultPositiveText = 'OK';\n const validButtons: Buttons = buttons\n ? buttons.slice(0, 3)\n : [{text: defaultPositiveText}];\n const buttonPositive = validButtons.pop();\n const buttonNegative = validButtons.pop();\n const buttonNeutral = validButtons.pop();\n\n if (buttonNeutral) {\n config.buttonNeutral = buttonNeutral.text || '';\n }\n if (buttonNegative) {\n config.buttonNegative = buttonNegative.text || '';\n }\n if (buttonPositive) {\n config.buttonPositive = buttonPositive.text || defaultPositiveText;\n }\n\n const onAction = (action, buttonKey) => {\n if (action === constants.buttonClicked) {\n if (buttonKey === constants.buttonNeutral) {\n buttonNeutral.onPress && buttonNeutral.onPress();\n } else if (buttonKey === constants.buttonNegative) {\n buttonNegative.onPress && buttonNegative.onPress();\n } else if (buttonKey === constants.buttonPositive) {\n buttonPositive.onPress && buttonPositive.onPress();\n }\n } else if (action === constants.dismissed) {\n options && options.onDismiss && options.onDismiss();\n }\n };\n const onError = errorMessage => console.warn(errorMessage);\n NativeDialogManagerAndroid.showAlert(config, onError, onAction);\n }\n }\n\n static prompt(\n title: ?string,\n message?: ?string,\n callbackOrButtons?: ?(((text: string) => void) | Buttons),\n type?: ?AlertType = 'plain-text',\n defaultValue?: string,\n keyboardType?: string,\n ): void {\n if (Platform.OS === 'ios') {\n let callbacks = [];\n const buttons = [];\n let cancelButtonKey;\n let destructiveButtonKey;\n if (typeof callbackOrButtons === 'function') {\n callbacks = [callbackOrButtons];\n } else if (Array.isArray(callbackOrButtons)) {\n callbackOrButtons.forEach((btn, index) => {\n callbacks[index] = btn.onPress;\n if (btn.style === 'cancel') {\n cancelButtonKey = String(index);\n } else if (btn.style === 'destructive') {\n destructiveButtonKey = String(index);\n }\n if (btn.text || index < (callbackOrButtons || []).length - 1) {\n const btnDef = {};\n btnDef[index] = btn.text || '';\n buttons.push(btnDef);\n }\n });\n }\n\n RCTAlertManager.alertWithArgs(\n {\n title: title || '',\n message: message || undefined,\n buttons,\n type: type || undefined,\n defaultValue,\n cancelButtonKey,\n destructiveButtonKey,\n keyboardType,\n },\n (id, value) => {\n const cb = callbacks[id];\n cb && cb(value);\n },\n );\n }\n }\n}\n\nmodule.exports = Alert;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport NativeAlertManager from './NativeAlertManager';\nimport type {Args} from './NativeAlertManager';\n\nmodule.exports = {\n alertWithArgs(\n args: Args,\n callback: (id: number, value: string) => void,\n ): void {\n if (NativeAlertManager == null) {\n return;\n }\n NativeAlertManager.alertWithArgs(args, callback);\n },\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport type Args = {|\n title?: string,\n message?: string,\n buttons?: Array, // TODO(T67565166): have a better type\n type?: string,\n defaultValue?: string,\n cancelButtonKey?: string,\n destructiveButtonKey?: string,\n keyboardType?: string,\n|};\n\nexport interface Spec extends TurboModule {\n +alertWithArgs: (\n args: Args,\n callback: (id: number, value: string) => void,\n ) => void;\n}\n\nexport default (TurboModuleRegistry.get('AlertManager'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\n/* 'buttonClicked' | 'dismissed' */\ntype DialogAction = string;\n/*\n buttonPositive = -1,\n buttonNegative = -2,\n buttonNeutral = -3\n*/\ntype DialogButtonKey = number;\nexport type DialogOptions = {|\n title?: string,\n message?: string,\n buttonPositive?: string,\n buttonNegative?: string,\n buttonNeutral?: string,\n items?: Array,\n cancelable?: boolean,\n|};\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n +buttonClicked: DialogAction,\n +dismissed: DialogAction,\n +buttonPositive: DialogButtonKey,\n +buttonNegative: DialogButtonKey,\n +buttonNeutral: DialogButtonKey,\n |};\n +showAlert: (\n config: DialogOptions,\n onError: (error: string) => void,\n onAction: (action: DialogAction, buttonKey?: DialogButtonKey) => void,\n ) => void;\n}\n\nexport default (TurboModuleRegistry.get('DialogManagerAndroid'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nconst {polyfillObjectProperty} = require('../Utilities/PolyfillFunctions');\n\nlet navigator = global.navigator;\nif (navigator === undefined) {\n global.navigator = navigator = {};\n}\n\n// see https://github.com/facebook/react-native/issues/10881\npolyfillObjectProperty(navigator, 'product', () => 'ReactNative');\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nlet registerModule;\nif (global.RN$Bridgeless && global.RN$registerCallableModule) {\n registerModule = global.RN$registerCallableModule;\n} else {\n const BatchedBridge = require('../BatchedBridge/BatchedBridge');\n registerModule = (moduleName, factory) =>\n BatchedBridge.registerLazyCallableModule(moduleName, factory);\n}\n\nregisterModule('Systrace', () => require('../Performance/Systrace'));\nregisterModule('JSTimers', () => require('./Timers/JSTimers'));\nregisterModule('HeapCapture', () => require('../HeapCapture/HeapCapture'));\nregisterModule('SamplingProfiler', () =>\n require('../Performance/SamplingProfiler'),\n);\nregisterModule('RCTLog', () => require('../Utilities/RCTLog'));\nregisterModule(\n 'RCTDeviceEventEmitter',\n () => require('../EventEmitter/RCTDeviceEventEmitter').default,\n);\nregisterModule('RCTNativeAppEventEmitter', () =>\n require('../EventEmitter/RCTNativeAppEventEmitter'),\n);\nregisterModule('GlobalPerformanceLogger', () =>\n require('../Utilities/GlobalPerformanceLogger'),\n);\nregisterModule('JSDevSupportModule', () =>\n require('../Utilities/JSDevSupportModule'),\n);\n\nif (__DEV__ && !global.__RCTProfileIsProfiling) {\n registerModule('HMRClient', () => require('../Utilities/HMRClient'));\n} else {\n registerModule('HMRClient', () => require('../Utilities/HMRClientProdShim'));\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nimport NativeJSCHeapCapture from './NativeJSCHeapCapture';\n\nconst HeapCapture = {\n captureHeap: function(path: string) {\n let error = null;\n try {\n global.nativeCaptureHeap(path);\n console.log('HeapCapture.captureHeap succeeded: ' + path);\n } catch (e) {\n console.log('HeapCapture.captureHeap error: ' + e.toString());\n error = e.toString();\n }\n if (NativeJSCHeapCapture) {\n NativeJSCHeapCapture.captureComplete(path, error);\n }\n },\n};\n\nmodule.exports = HeapCapture;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +captureComplete: (path: string, error: ?string) => void;\n}\n\nexport default (TurboModuleRegistry.get('JSCHeapCapture'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst SamplingProfiler = {\n poke: function(token: number): void {\n let error = null;\n let result = null;\n try {\n result = global.pokeSamplingProfiler();\n if (result === null) {\n console.log('The JSC Sampling Profiler has started');\n } else {\n console.log('The JSC Sampling Profiler has stopped');\n }\n } catch (e) {\n console.log(\n 'Error occurred when restarting Sampling Profiler: ' + e.toString(),\n );\n error = e.toString();\n }\n\n const NativeJSCSamplingProfiler = require('./NativeJSCSamplingProfiler')\n .default;\n if (NativeJSCSamplingProfiler) {\n NativeJSCSamplingProfiler.operationComplete(token, result, error);\n }\n },\n};\n\nmodule.exports = SamplingProfiler;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +operationComplete: (token: number, result: ?string, error: ?string) => void;\n}\n\nexport default (TurboModuleRegistry.get('JSCSamplingProfiler'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst invariant = require('invariant');\n\nconst levelsMap = {\n log: 'log',\n info: 'info',\n warn: 'warn',\n error: 'error',\n fatal: 'error',\n};\n\nlet warningHandler: ?(...Array) => void = null;\n\nconst RCTLog = {\n // level one of log, info, warn, error, mustfix\n logIfNoNativeHook(level: string, ...args: Array): void {\n // We already printed in the native console, so only log here if using a js debugger\n if (typeof global.nativeLoggingHook === 'undefined') {\n RCTLog.logToConsole(level, ...args);\n } else {\n // Report native warnings to LogBox\n if (warningHandler && level === 'warn') {\n warningHandler(...args);\n }\n }\n },\n\n // Log to console regardless of nativeLoggingHook\n logToConsole(level: string, ...args: Array): void {\n const logFn = levelsMap[level];\n invariant(\n logFn,\n 'Level \"' + level + '\" not one of ' + Object.keys(levelsMap).toString(),\n );\n\n console[logFn](...args);\n },\n\n setWarningHandler(handler: typeof warningHandler): void {\n warningHandler = handler;\n },\n};\n\nmodule.exports = RCTLog;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport RCTDeviceEventEmitter from './RCTDeviceEventEmitter';\n\n/**\n * Deprecated - subclass NativeEventEmitter to create granular event modules instead of\n * adding all event listeners directly to RCTNativeAppEventEmitter.\n */\nconst RCTNativeAppEventEmitter = RCTDeviceEventEmitter;\nmodule.exports = RCTNativeAppEventEmitter;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport NativeJSDevSupport from './NativeJSDevSupport';\nconst ReactNative = require('../Renderer/shims/ReactNative');\n\nconst JSDevSupportModule = {\n getJSHierarchy: function(tag: number) {\n if (NativeJSDevSupport) {\n const constants = NativeJSDevSupport.getConstants();\n try {\n const {\n computeComponentStackForErrorReporting,\n } = ReactNative.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n const componentStack = computeComponentStackForErrorReporting(tag);\n if (!componentStack) {\n NativeJSDevSupport.onFailure(\n constants.ERROR_CODE_VIEW_NOT_FOUND,\n \"Component stack doesn't exist for tag \" + tag,\n );\n } else {\n NativeJSDevSupport.onSuccess(componentStack);\n }\n } catch (e) {\n NativeJSDevSupport.onFailure(constants.ERROR_CODE_EXCEPTION, e.message);\n }\n }\n },\n};\n\nmodule.exports = JSDevSupportModule;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n ERROR_CODE_EXCEPTION: number,\n ERROR_CODE_VIEW_NOT_FOUND: number,\n |};\n +onSuccess: (data: string) => void;\n +onFailure: (errorCode: number, error: string) => void;\n}\n\nexport default (TurboModuleRegistry.get('JSDevSupport'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nimport type {HMRClientNativeInterface} from './HMRClient';\n\n// This shim ensures DEV binary builds don't crash in JS\n// when they're combined with a PROD JavaScript build.\nconst HMRClientProdShim: HMRClientNativeInterface = {\n setup() {},\n enable() {\n console.error(\n 'Fast Refresh is disabled in JavaScript bundles built in production mode. ' +\n 'Did you forget to run Metro?',\n );\n },\n disable() {},\n registerBundle() {},\n log() {},\n};\n\nmodule.exports = HMRClientProdShim;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nexport type FetchSegmentFunction = typeof __fetchSegment;\nexport type GetSegmentFunction = typeof __getSegment;\n\n/**\n * Set up SegmentFetcher.\n * You can use this module directly, or just require InitializeCore.\n */\n\nfunction __fetchSegment(\n segmentId: number,\n options: $ReadOnly<{\n otaBuildNumber: ?string,\n requestedModuleName: string,\n segmentHash: string,\n }>,\n callback: (?Error) => void,\n) {\n const SegmentFetcher = require('./SegmentFetcher/NativeSegmentFetcher')\n .default;\n SegmentFetcher.fetchSegment(\n segmentId,\n options,\n (\n errorObject: ?{\n message: string,\n code: string,\n ...\n },\n ) => {\n if (errorObject) {\n const error = new Error(errorObject.message);\n (error: any).code = errorObject.code; // flowlint-line unclear-type: off\n callback(error);\n }\n\n callback(null);\n },\n );\n}\n\nglobal.__fetchSegment = __fetchSegment;\n\nfunction __getSegment(\n segmentId: number,\n options: $ReadOnly<{\n otaBuildNumber: ?string,\n requestedModuleName: string,\n segmentHash: string,\n }>,\n callback: (?Error, ?string) => void,\n) {\n const SegmentFetcher = require('./SegmentFetcher/NativeSegmentFetcher')\n .default;\n\n if (!SegmentFetcher.getSegment) {\n throw new Error('SegmentFetcher.getSegment must be defined');\n }\n\n SegmentFetcher.getSegment(\n segmentId,\n options,\n (\n errorObject: ?{\n message: string,\n code: string,\n ...\n },\n path: ?string,\n ) => {\n if (errorObject) {\n const error = new Error(errorObject.message);\n (error: any).code = errorObject.code; // flowlint-line unclear-type: off\n callback(error);\n }\n\n callback(null, path);\n },\n );\n}\n\nglobal.__getSegment = __getSegment;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +fetchSegment: (\n segmentId: number,\n options: Object, // flowlint-line unclear-type: off\n callback: (error: ?Object) => void, // flowlint-line unclear-type: off\n ) => void;\n +getSegment?: (\n segmentId: number,\n options: Object, // flowlint-line unclear-type: off\n callback: (error: ?Object, path: ?string) => void, // flowlint-line unclear-type: off\n ) => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing('SegmentFetcher'): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport typeof BatchedBridge from '../BatchedBridge/BatchedBridge';\nimport typeof ExceptionsManager from '../Core/ExceptionsManager';\nimport typeof Platform from '../Utilities/Platform';\nimport typeof RCTEventEmitter from '../EventEmitter/RCTEventEmitter';\nimport typeof ReactNativeViewConfigRegistry from '../Renderer/shims/ReactNativeViewConfigRegistry';\nimport typeof TextInputState from '../Components/TextInput/TextInputState';\nimport typeof UIManager from '../ReactNative/UIManager';\nimport typeof deepDiffer from '../Utilities/differ/deepDiffer';\nimport typeof deepFreezeAndThrowOnMutationInDev from '../Utilities/deepFreezeAndThrowOnMutationInDev';\nimport typeof flattenStyle from '../StyleSheet/flattenStyle';\nimport {type DangerouslyImpreciseStyleProp} from '../StyleSheet/StyleSheet';\nimport typeof ReactFiberErrorDialog from '../Core/ReactFiberErrorDialog';\nimport typeof legacySendAccessibilityEvent from '../Components/AccessibilityInfo/legacySendAccessibilityEvent';\n\n// flowlint unsafe-getters-setters:off\nmodule.exports = {\n get BatchedBridge(): BatchedBridge {\n return require('../BatchedBridge/BatchedBridge');\n },\n get ExceptionsManager(): ExceptionsManager {\n return require('../Core/ExceptionsManager');\n },\n get Platform(): Platform {\n return require('../Utilities/Platform');\n },\n get RCTEventEmitter(): RCTEventEmitter {\n return require('../EventEmitter/RCTEventEmitter');\n },\n get ReactNativeViewConfigRegistry(): ReactNativeViewConfigRegistry {\n return require('../Renderer/shims/ReactNativeViewConfigRegistry');\n },\n get TextInputState(): TextInputState {\n return require('../Components/TextInput/TextInputState');\n },\n get UIManager(): UIManager {\n return require('../ReactNative/UIManager');\n },\n get deepDiffer(): deepDiffer {\n return require('../Utilities/differ/deepDiffer');\n },\n get deepFreezeAndThrowOnMutationInDev(): deepFreezeAndThrowOnMutationInDev<\n {...} | Array,\n > {\n return require('../Utilities/deepFreezeAndThrowOnMutationInDev');\n },\n get flattenStyle(): flattenStyle {\n return require('../StyleSheet/flattenStyle');\n },\n get ReactFiberErrorDialog(): ReactFiberErrorDialog {\n return require('../Core/ReactFiberErrorDialog').default;\n },\n get legacySendAccessibilityEvent(): legacySendAccessibilityEvent {\n return require('../Components/AccessibilityInfo/legacySendAccessibilityEvent');\n },\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nconst BatchedBridge = require('../BatchedBridge/BatchedBridge');\n\nconst RCTEventEmitter = {\n register(eventEmitter: any) {\n if (global.RN$Bridgeless) {\n global.RN$registerCallableModule('RCTEventEmitter', () => eventEmitter);\n } else {\n BatchedBridge.registerCallableModule('RCTEventEmitter', eventEmitter);\n }\n },\n};\n\nmodule.exports = RCTEventEmitter;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n * @generated SignedSource<<5b2da3e92f44ee2684113b45af052f5d>>\n *\n * This file was sync'd from the facebook/react repository.\n */\n\n/* eslint-disable react-internal/invariant-args */\n\n'use strict';\n\nimport {type ViewConfig} from './ReactNativeTypes';\nimport invariant from 'invariant';\n\n// Event configs\nconst customBubblingEventTypes: {\n [eventName: string]: $ReadOnly<{|\n phasedRegistrationNames: $ReadOnly<{|\n captured: string,\n bubbled: string,\n |}>,\n |}>,\n ...,\n} = {};\nconst customDirectEventTypes: {\n [eventName: string]: $ReadOnly<{|\n registrationName: string,\n |}>,\n ...,\n} = {};\n\nexports.customBubblingEventTypes = customBubblingEventTypes;\nexports.customDirectEventTypes = customDirectEventTypes;\n\nconst viewConfigCallbacks = new Map();\nconst viewConfigs = new Map();\n\nfunction processEventTypes(viewConfig: ViewConfig): void {\n const {bubblingEventTypes, directEventTypes} = viewConfig;\n\n if (__DEV__) {\n if (bubblingEventTypes != null && directEventTypes != null) {\n for (const topLevelType in directEventTypes) {\n invariant(\n bubblingEventTypes[topLevelType] == null,\n 'Event cannot be both direct and bubbling: %s',\n topLevelType,\n );\n }\n }\n }\n\n if (bubblingEventTypes != null) {\n for (const topLevelType in bubblingEventTypes) {\n if (customBubblingEventTypes[topLevelType] == null) {\n customBubblingEventTypes[topLevelType] =\n bubblingEventTypes[topLevelType];\n }\n }\n }\n\n if (directEventTypes != null) {\n for (const topLevelType in directEventTypes) {\n if (customDirectEventTypes[topLevelType] == null) {\n customDirectEventTypes[topLevelType] = directEventTypes[topLevelType];\n }\n }\n }\n}\n\n/**\n * Registers a native view/component by name.\n * A callback is provided to load the view config from UIManager.\n * The callback is deferred until the view is actually rendered.\n */\nexports.register = function(name: string, callback: () => ViewConfig): string {\n invariant(\n !viewConfigCallbacks.has(name),\n 'Tried to register two views with the same name %s',\n name,\n );\n invariant(\n typeof callback === 'function',\n 'View config getter callback for component `%s` must be a function (received `%s`)',\n name,\n callback === null ? 'null' : typeof callback,\n );\n viewConfigCallbacks.set(name, callback);\n return name;\n};\n\n/**\n * Retrieves a config for the specified view.\n * If this is the first time the view has been used,\n * This configuration will be lazy-loaded from UIManager.\n */\nexports.get = function(name: string): ViewConfig {\n let viewConfig;\n if (!viewConfigs.has(name)) {\n const callback = viewConfigCallbacks.get(name);\n if (typeof callback !== 'function') {\n invariant(\n false,\n 'View config getter callback for component `%s` must be a function (received `%s`).%s',\n name,\n callback === null ? 'null' : typeof callback,\n typeof name[0] === 'string' && /[a-z]/.test(name[0])\n ? ' Make sure to start component names with a capital letter.'\n : '',\n );\n }\n viewConfig = callback();\n processEventTypes(viewConfig);\n viewConfigs.set(name, viewConfig);\n\n // Clear the callback after the config is set so that\n // we don't mask any errors during registration.\n viewConfigCallbacks.set(name, null);\n } else {\n viewConfig = viewConfigs.get(name);\n }\n invariant(viewConfig, 'View config not found for name %s', name);\n return viewConfig;\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n// This class is responsible for coordinating the \"focused\" state for\n// TextInputs. All calls relating to the keyboard should be funneled\n// through here.\n\nconst React = require('react');\nconst Platform = require('../../Utilities/Platform');\nconst {findNodeHandle} = require('../../Renderer/shims/ReactNative');\nimport {Commands as AndroidTextInputCommands} from '../../Components/TextInput/AndroidTextInputNativeComponent';\nimport {Commands as iOSTextInputCommands} from '../../Components/TextInput/RCTSingelineTextInputNativeComponent';\n\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\ntype ComponentRef = React.ElementRef>;\n\nlet currentlyFocusedInputRef: ?ComponentRef = null;\nconst inputs = new Set();\n\nfunction currentlyFocusedInput(): ?ComponentRef {\n return currentlyFocusedInputRef;\n}\n\n/**\n * Returns the ID of the currently focused text field, if one exists\n * If no text field is focused it returns null\n */\nfunction currentlyFocusedField(): ?number {\n if (__DEV__) {\n console.error(\n 'currentlyFocusedField is deprecated and will be removed in a future release. Use currentlyFocusedInput',\n );\n }\n\n return findNodeHandle(currentlyFocusedInputRef);\n}\n\nfunction focusInput(textField: ?ComponentRef): void {\n if (currentlyFocusedInputRef !== textField && textField != null) {\n currentlyFocusedInputRef = textField;\n }\n}\n\nfunction blurInput(textField: ?ComponentRef): void {\n if (currentlyFocusedInputRef === textField && textField != null) {\n currentlyFocusedInputRef = null;\n }\n}\n\nfunction focusField(textFieldID: ?number): void {\n if (__DEV__) {\n console.error('focusField no longer works. Use focusInput');\n }\n\n return;\n}\n\nfunction blurField(textFieldID: ?number) {\n if (__DEV__) {\n console.error('blurField no longer works. Use blurInput');\n }\n\n return;\n}\n\n/**\n * @param {number} TextInputID id of the text field to focus\n * Focuses the specified text field\n * noop if the text field was already focused\n */\nfunction focusTextInput(textField: ?ComponentRef) {\n if (typeof textField === 'number') {\n if (__DEV__) {\n console.error(\n 'focusTextInput must be called with a host component. Passing a react tag is deprecated.',\n );\n }\n\n return;\n }\n\n if (currentlyFocusedInputRef !== textField && textField != null) {\n focusInput(textField);\n if (Platform.OS === 'ios') {\n // This isn't necessarily a single line text input\n // But commands don't actually care as long as the thing being passed in\n // actually has a command with that name. So this should work with single\n // and multiline text inputs. Ideally we'll merge them into one component\n // in the future.\n iOSTextInputCommands.focus(textField);\n } else if (Platform.OS === 'android') {\n AndroidTextInputCommands.focus(textField);\n }\n }\n}\n\n/**\n * @param {number} textFieldID id of the text field to unfocus\n * Unfocuses the specified text field\n * noop if it wasn't focused\n */\nfunction blurTextInput(textField: ?ComponentRef) {\n if (typeof textField === 'number') {\n if (__DEV__) {\n console.error(\n 'blurTextInput must be called with a host component. Passing a react tag is deprecated.',\n );\n }\n\n return;\n }\n\n if (currentlyFocusedInputRef === textField && textField != null) {\n blurInput(textField);\n if (Platform.OS === 'ios') {\n // This isn't necessarily a single line text input\n // But commands don't actually care as long as the thing being passed in\n // actually has a command with that name. So this should work with single\n // and multiline text inputs. Ideally we'll merge them into one component\n // in the future.\n iOSTextInputCommands.blur(textField);\n } else if (Platform.OS === 'android') {\n AndroidTextInputCommands.blur(textField);\n }\n }\n}\n\nfunction registerInput(textField: ComponentRef) {\n if (typeof textField === 'number') {\n if (__DEV__) {\n console.error(\n 'registerInput must be called with a host component. Passing a react tag is deprecated.',\n );\n }\n\n return;\n }\n\n inputs.add(textField);\n}\n\nfunction unregisterInput(textField: ComponentRef) {\n if (typeof textField === 'number') {\n if (__DEV__) {\n console.error(\n 'unregisterInput must be called with a host component. Passing a react tag is deprecated.',\n );\n }\n\n return;\n }\n inputs.delete(textField);\n}\n\nfunction isTextInput(textField: ComponentRef): boolean {\n if (typeof textField === 'number') {\n if (__DEV__) {\n console.error(\n 'isTextInput must be called with a host component. Passing a react tag is deprecated.',\n );\n }\n\n return false;\n }\n\n return inputs.has(textField);\n}\n\nmodule.exports = {\n currentlyFocusedInput,\n focusInput,\n blurInput,\n\n currentlyFocusedField,\n focusField,\n blurField,\n focusTextInput,\n blurTextInput,\n registerInput,\n unregisterInput,\n isTextInput,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport type {\n BubblingEventHandler,\n DirectEventHandler,\n Double,\n Float,\n Int32,\n WithDefault,\n} from '../../Types/CodegenTypes';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport type {\n TextStyleProp,\n ViewStyleProp,\n ColorValue,\n} from '../../StyleSheet/StyleSheet';\nimport codegenNativeCommands from '../../Utilities/codegenNativeCommands';\nimport type {TextInputNativeCommands} from './TextInputNativeCommands';\nimport AndroidTextInputViewConfig from './AndroidTextInputViewConfig';\nimport * as NativeComponentRegistry from '../../NativeComponent/NativeComponentRegistry';\n\nexport type KeyboardType =\n // Cross Platform\n | 'default'\n | 'email-address'\n | 'numeric'\n | 'phone-pad'\n | 'number-pad'\n | 'decimal-pad'\n | 'url'\n // iOS-only\n | 'ascii-capable'\n | 'numbers-and-punctuation'\n | 'name-phone-pad'\n | 'twitter'\n | 'web-search'\n // Android-only\n | 'visible-password';\n\nexport type ReturnKeyType =\n // Cross Platform\n | 'done'\n | 'go'\n | 'next'\n | 'search'\n | 'send'\n // Android-only\n | 'none'\n | 'previous'\n // iOS-only\n | 'default'\n | 'emergency-call'\n | 'google'\n | 'join'\n | 'route'\n | 'yahoo';\n\nexport type NativeProps = $ReadOnly<{|\n // This allows us to inherit everything from ViewProps except for style (see below)\n // This must be commented for Fabric codegen to work.\n ...$Diff>,\n\n /**\n * Android props after this\n */\n /**\n * Determines which content to suggest on auto complete, e.g.`username`.\n * To disable auto complete, use `off`.\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `username`\n * - `password`\n * - `email`\n * - `name`\n * - `tel`\n * - `street-address`\n * - `postal-code`\n * - `cc-number`\n * - `cc-csc`\n * - `cc-exp`\n * - `cc-exp-month`\n * - `cc-exp-year`\n * - `off`\n *\n * @platform android\n */\n autoComplete?: WithDefault<\n | 'cc-csc'\n | 'cc-exp'\n | 'cc-exp-month'\n | 'cc-exp-year'\n | 'cc-number'\n | 'email'\n | 'name'\n | 'password'\n | 'postal-code'\n | 'street-address'\n | 'tel'\n | 'username'\n | 'off',\n 'off',\n >,\n\n /**\n * Sets the return key to the label. Use it instead of `returnKeyType`.\n * @platform android\n */\n returnKeyLabel?: ?string,\n\n /**\n * Sets the number of lines for a `TextInput`. Use it with multiline set to\n * `true` to be able to fill the lines.\n * @platform android\n */\n numberOfLines?: ?Int32,\n\n /**\n * When `false`, if there is a small amount of space available around a text input\n * (e.g. landscape orientation on a phone), the OS may choose to have the user edit\n * the text inside of a full screen text input mode. When `true`, this feature is\n * disabled and users will always edit the text directly inside of the text input.\n * Defaults to `false`.\n * @platform android\n */\n disableFullscreenUI?: ?boolean,\n\n /**\n * Set text break strategy on Android API Level 23+, possible values are `simple`, `highQuality`, `balanced`\n * The default value is `simple`.\n * @platform android\n */\n textBreakStrategy?: WithDefault<\n 'simple' | 'highQuality' | 'balanced',\n 'simple',\n >,\n\n /**\n * The color of the `TextInput` underline.\n * @platform android\n */\n underlineColorAndroid?: ?ColorValue,\n\n /**\n * If defined, the provided image resource will be rendered on the left.\n * The image resource must be inside `/android/app/src/main/res/drawable` and referenced\n * like\n * ```\n * \n * ```\n * @platform android\n */\n inlineImageLeft?: ?string,\n\n /**\n * Padding between the inline image, if any, and the text input itself.\n * @platform android\n */\n inlineImagePadding?: ?Int32,\n\n importantForAutofill?: string /*?(\n | 'auto'\n | 'no'\n | 'noExcludeDescendants'\n | 'yes'\n | 'yesExcludeDescendants'\n ),*/,\n\n /**\n * When `false`, it will prevent the soft keyboard from showing when the field is focused.\n * Defaults to `true`.\n */\n showSoftInputOnFocus?: ?boolean,\n\n /**\n * TextInput props after this\n */\n /**\n * Can tell `TextInput` to automatically capitalize certain characters.\n *\n * - `characters`: all characters.\n * - `words`: first letter of each word.\n * - `sentences`: first letter of each sentence (*default*).\n * - `none`: don't auto capitalize anything.\n */\n autoCapitalize?: WithDefault<\n 'none' | 'sentences' | 'words' | 'characters',\n 'none',\n >,\n\n /**\n * If `false`, disables auto-correct. The default value is `true`.\n */\n autoCorrect?: ?boolean,\n\n /**\n * If `true`, focuses the input on `componentDidMount`.\n * The default value is `false`.\n */\n autoFocus?: ?boolean,\n\n /**\n * Specifies whether fonts should scale to respect Text Size accessibility settings. The\n * default is `true`.\n */\n allowFontScaling?: ?boolean,\n\n /**\n * Specifies largest possible scale a font can reach when `allowFontScaling` is enabled.\n * Possible values:\n * `null/undefined` (default): inherit from the parent node or the global default (0)\n * `0`: no max, ignore parent/global default\n * `>= 1`: sets the maxFontSizeMultiplier of this node to this value\n */\n maxFontSizeMultiplier?: ?Float,\n\n /**\n * If `false`, text is not editable. The default value is `true`.\n */\n editable?: ?boolean,\n\n /**\n * Determines which keyboard to open, e.g.`numeric`.\n *\n * The following values work across platforms:\n *\n * - `default`\n * - `numeric`\n * - `number-pad`\n * - `decimal-pad`\n * - `email-address`\n * - `phone-pad`\n * - `url`\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `visible-password`\n */\n keyboardType?: WithDefault,\n\n /**\n * Determines how the return key should look. On Android you can also use\n * `returnKeyLabel`.\n *\n * *Cross platform*\n *\n * The following values work across platforms:\n *\n * - `done`\n * - `go`\n * - `next`\n * - `search`\n * - `send`\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `none`\n * - `previous`\n */\n returnKeyType?: WithDefault,\n\n /**\n * Limits the maximum number of characters that can be entered. Use this\n * instead of implementing the logic in JS to avoid flicker.\n */\n maxLength?: ?Int32,\n\n /**\n * If `true`, the text input can be multiple lines.\n * The default value is `false`.\n */\n multiline?: ?boolean,\n\n /**\n * Callback that is called when the text input is blurred.\n * `target` is the reactTag of the element\n */\n onBlur?: ?BubblingEventHandler<$ReadOnly<{|target: Int32|}>>,\n\n /**\n * Callback that is called when the text input is focused.\n * `target` is the reactTag of the element\n */\n onFocus?: ?BubblingEventHandler<$ReadOnly<{|target: Int32|}>>,\n\n /**\n * Callback that is called when the text input's text changes.\n * `target` is the reactTag of the element\n * TODO: differentiate between onChange and onChangeText\n */\n onChange?: ?BubblingEventHandler<\n $ReadOnly<{|target: Int32, eventCount: Int32, text: string|}>,\n >,\n\n /**\n * Callback that is called when the text input's text changes.\n * Changed text is passed as an argument to the callback handler.\n * TODO: differentiate between onChange and onChangeText\n */\n onChangeText?: ?BubblingEventHandler<\n $ReadOnly<{|target: Int32, eventCount: Int32, text: string|}>,\n >,\n\n /**\n * Callback that is called when the text input's content size changes.\n * This will be called with\n * `{ nativeEvent: { contentSize: { width, height } } }`.\n *\n * Only called for multiline text inputs.\n */\n onContentSizeChange?: ?DirectEventHandler<\n $ReadOnly<{|\n target: Int32,\n contentSize: $ReadOnly<{|width: Double, height: Double|}>,\n |}>,\n >,\n\n onTextInput?: ?BubblingEventHandler<\n $ReadOnly<{|\n target: Int32,\n text: string,\n previousText: string,\n range: $ReadOnly<{|start: Double, end: Double|}>,\n |}>,\n >,\n\n /**\n * Callback that is called when text input ends.\n */\n onEndEditing?: ?BubblingEventHandler<\n $ReadOnly<{|target: Int32, text: string|}>,\n >,\n\n /**\n * Callback that is called when the text input selection is changed.\n * This will be called with\n * `{ nativeEvent: { selection: { start, end } } }`.\n */\n onSelectionChange?: ?DirectEventHandler<\n $ReadOnly<{|\n target: Int32,\n selection: $ReadOnly<{|start: Double, end: Double|}>,\n |}>,\n >,\n\n /**\n * Callback that is called when the text input's submit button is pressed.\n * Invalid if `multiline={true}` is specified.\n */\n onSubmitEditing?: ?BubblingEventHandler<\n $ReadOnly<{|target: Int32, text: string|}>,\n >,\n\n /**\n * Callback that is called when a key is pressed.\n * This will be called with `{ nativeEvent: { key: keyValue } }`\n * where `keyValue` is `'Enter'` or `'Backspace'` for respective keys and\n * the typed-in character otherwise including `' '` for space.\n * Fires before `onChange` callbacks.\n */\n onKeyPress?: ?BubblingEventHandler<$ReadOnly<{|target: Int32, key: string|}>>,\n\n /**\n * Invoked on content scroll with `{ nativeEvent: { contentOffset: { x, y } } }`.\n * May also contain other properties from ScrollEvent but on Android contentSize\n * is not provided for performance reasons.\n */\n onScroll?: ?DirectEventHandler<\n $ReadOnly<{|\n target: Int32,\n responderIgnoreScroll: boolean,\n contentInset: $ReadOnly<{|\n top: Double, // always 0 on Android\n bottom: Double, // always 0 on Android\n left: Double, // always 0 on Android\n right: Double, // always 0 on Android\n |}>,\n contentOffset: $ReadOnly<{|\n x: Double,\n y: Double,\n |}>,\n contentSize: $ReadOnly<{|\n width: Double, // always 0 on Android\n height: Double, // always 0 on Android\n |}>,\n layoutMeasurement: $ReadOnly<{|\n width: Double,\n height: Double,\n |}>,\n velocity: $ReadOnly<{|\n x: Double, // always 0 on Android\n y: Double, // always 0 on Android\n |}>,\n |}>,\n >,\n\n /**\n * The string that will be rendered before text input has been entered.\n */\n placeholder?: ?Stringish,\n\n /**\n * The text color of the placeholder string.\n */\n placeholderTextColor?: ?ColorValue,\n\n /**\n * If `true`, the text input obscures the text entered so that sensitive text\n * like passwords stay secure. The default value is `false`. Does not work with 'multiline={true}'.\n */\n secureTextEntry?: ?boolean,\n\n /**\n * The highlight and cursor color of the text input.\n */\n selectionColor?: ?ColorValue,\n\n /**\n * The start and end of the text input's selection. Set start and end to\n * the same value to position the cursor.\n */\n selection?: ?$ReadOnly<{|\n start: Int32,\n end?: ?Int32,\n |}>,\n\n /**\n * The value to show for the text input. `TextInput` is a controlled\n * component, which means the native value will be forced to match this\n * value prop if provided. For most uses, this works great, but in some\n * cases this may cause flickering - one common cause is preventing edits\n * by keeping value the same. In addition to simply setting the same value,\n * either set `editable={false}`, or set/update `maxLength` to prevent\n * unwanted edits without flicker.\n */\n value?: ?string,\n\n /**\n * Provides an initial value that will change when the user starts typing.\n * Useful for simple use-cases where you do not want to deal with listening\n * to events and updating the value prop to keep the controlled state in sync.\n */\n defaultValue?: ?string,\n\n /**\n * If `true`, all text will automatically be selected on focus.\n */\n selectTextOnFocus?: ?boolean,\n\n /**\n * If `true`, the text field will blur when submitted.\n * The default value is true for single-line fields and false for\n * multiline fields. Note that for multiline fields, setting `blurOnSubmit`\n * to `true` means that pressing return will blur the field and trigger the\n * `onSubmitEditing` event instead of inserting a newline into the field.\n */\n blurOnSubmit?: ?boolean,\n\n /**\n * Note that not all Text styles are supported, an incomplete list of what is not supported includes:\n *\n * - `borderLeftWidth`\n * - `borderTopWidth`\n * - `borderRightWidth`\n * - `borderBottomWidth`\n * - `borderTopLeftRadius`\n * - `borderTopRightRadius`\n * - `borderBottomRightRadius`\n * - `borderBottomLeftRadius`\n *\n * see [Issue#7070](https://github.com/facebook/react-native/issues/7070)\n * for more detail.\n *\n * [Styles](docs/style.html)\n */\n // TODO: figure out what to do with this style prop for codegen/Fabric purposes\n // This must be commented for Fabric codegen to work; it's currently not possible\n // to override the default View style prop in codegen.\n style?: ?TextStyleProp,\n\n /**\n * If `true`, caret is hidden. The default value is `false`.\n * This property is supported only for single-line TextInput component on iOS.\n */\n caretHidden?: ?boolean,\n\n /*\n * If `true`, contextMenuHidden is hidden. The default value is `false`.\n */\n contextMenuHidden?: ?boolean,\n\n /**\n * The following are props that `BaseTextShadowNode` takes. It is unclear if they\n * are used by TextInput.\n */\n textShadowColor?: ?ColorValue,\n textShadowRadius?: ?Float,\n textDecorationLine?: ?string,\n fontStyle?: ?string,\n textShadowOffset?: ?$ReadOnly<{|width?: ?Double, height?: ?Double|}>,\n lineHeight?: ?Float,\n textTransform?: ?string,\n color?: ?Int32,\n letterSpacing?: ?Float,\n fontSize?: ?Float,\n textAlign?: ?string,\n includeFontPadding?: ?boolean,\n fontWeight?: ?string,\n fontFamily?: ?string,\n\n /**\n * I cannot find where these are defined but JS complains without them.\n */\n textAlignVertical?: ?string,\n cursorColor?: ?ColorValue,\n\n /**\n * \"Private\" fields used by TextInput.js and not users of this component directly\n */\n mostRecentEventCount: Int32,\n text?: ?string,\n|}>;\n\ntype NativeType = HostComponent;\n\ntype NativeCommands = TextInputNativeCommands;\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['focus', 'blur', 'setTextAndSelection'],\n});\n\nlet AndroidTextInputNativeComponent = NativeComponentRegistry.get(\n 'AndroidTextInput',\n () => AndroidTextInputViewConfig,\n);\n\n// flowlint-next-line unclear-type:off\nexport default ((AndroidTextInputNativeComponent: any): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport {dispatchCommand} from '../../Libraries/Renderer/shims/ReactNative';\n\ntype Options = $ReadOnly<{|\n supportedCommands: $ReadOnlyArray,\n|}>;\n\nfunction codegenNativeCommands(options: Options<$Keys>): T {\n const commandObj = {};\n\n options.supportedCommands.forEach(command => {\n commandObj[command] = (ref, ...args) => {\n dispatchCommand(ref, command, args);\n };\n });\n\n return ((commandObj: any): T);\n}\n\nexport default codegenNativeCommands;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport ReactNativeViewViewConfig from '../../Components/View/ReactNativeViewViewConfig';\nimport type {PartialViewConfig} from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\n\nconst AndroidTextInputViewConfig = {\n uiViewClassName: 'AndroidTextInput',\n bubblingEventTypes: {\n topBlur: {\n phasedRegistrationNames: {\n bubbled: 'onBlur',\n captured: 'onBlurCapture',\n },\n },\n topEndEditing: {\n phasedRegistrationNames: {\n bubbled: 'onEndEditing',\n captured: 'onEndEditingCapture',\n },\n },\n topFocus: {\n phasedRegistrationNames: {\n bubbled: 'onFocus',\n captured: 'onFocusCapture',\n },\n },\n topKeyPress: {\n phasedRegistrationNames: {\n bubbled: 'onKeyPress',\n captured: 'onKeyPressCapture',\n },\n },\n topSubmitEditing: {\n phasedRegistrationNames: {\n bubbled: 'onSubmitEditing',\n captured: 'onSubmitEditingCapture',\n },\n },\n topTextInput: {\n phasedRegistrationNames: {\n bubbled: 'onTextInput',\n captured: 'onTextInputCapture',\n },\n },\n },\n directEventTypes: {},\n validAttributes: {\n ...ReactNativeViewViewConfig.validAttributes,\n\n maxFontSizeMultiplier: true,\n adjustsFontSizeToFit: true,\n minimumFontScale: true,\n autoFocus: true,\n placeholder: true,\n inlineImagePadding: true,\n contextMenuHidden: true,\n textShadowColor: {process: require('../../StyleSheet/processColor')},\n maxLength: true,\n selectTextOnFocus: true,\n textShadowRadius: true,\n underlineColorAndroid: {process: require('../../StyleSheet/processColor')},\n textDecorationLine: true,\n blurOnSubmit: true,\n textAlignVertical: true,\n fontStyle: true,\n textShadowOffset: true,\n selectionColor: {process: require('../../StyleSheet/processColor')},\n selection: true,\n placeholderTextColor: {process: require('../../StyleSheet/processColor')},\n importantForAutofill: true,\n lineHeight: true,\n textTransform: true,\n returnKeyType: true,\n keyboardType: true,\n multiline: true,\n color: {process: require('../../StyleSheet/processColor')},\n autoCompleteType: true,\n autoComplete: true,\n numberOfLines: true,\n letterSpacing: true,\n returnKeyLabel: true,\n fontSize: true,\n onKeyPress: true,\n cursorColor: {process: require('../../StyleSheet/processColor')},\n text: true,\n showSoftInputOnFocus: true,\n textAlign: true,\n autoCapitalize: true,\n autoCorrect: true,\n caretHidden: true,\n secureTextEntry: true,\n textBreakStrategy: true,\n onScroll: true,\n onContentSizeChange: true,\n disableFullscreenUI: true,\n includeFontPadding: true,\n fontWeight: true,\n fontFamily: true,\n allowFontScaling: true,\n onSelectionChange: true,\n mostRecentEventCount: true,\n inlineImageLeft: true,\n editable: true,\n fontVariant: true,\n },\n};\n\nmodule.exports = (AndroidTextInputViewConfig: PartialViewConfig);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {ViewConfig} from '../../Renderer/shims/ReactNativeTypes';\nimport ReactNativeViewViewConfigAndroid from './ReactNativeViewViewConfigAndroid';\nimport {Platform} from 'react-native';\n\nconst ReactNativeViewConfig: ViewConfig = {\n uiViewClassName: 'RCTView',\n baseModuleName: null,\n Manager: 'ViewManager',\n Commands: {},\n Constants: {},\n bubblingEventTypes: {\n ...ReactNativeViewViewConfigAndroid.bubblingEventTypes,\n topBlur: {\n phasedRegistrationNames: {\n bubbled: 'onBlur',\n captured: 'onBlurCapture',\n },\n },\n topChange: {\n phasedRegistrationNames: {\n bubbled: 'onChange',\n captured: 'onChangeCapture',\n },\n },\n topEndEditing: {\n phasedRegistrationNames: {\n bubbled: 'onEndEditing',\n captured: 'onEndEditingCapture',\n },\n },\n topFocus: {\n phasedRegistrationNames: {\n bubbled: 'onFocus',\n captured: 'onFocusCapture',\n },\n },\n topKeyPress: {\n phasedRegistrationNames: {\n bubbled: 'onKeyPress',\n captured: 'onKeyPressCapture',\n },\n },\n topPress: {\n phasedRegistrationNames: {\n bubbled: 'onPress',\n captured: 'onPressCapture',\n },\n },\n topSubmitEditing: {\n phasedRegistrationNames: {\n bubbled: 'onSubmitEditing',\n captured: 'onSubmitEditingCapture',\n },\n },\n topTouchCancel: {\n phasedRegistrationNames: {\n bubbled: 'onTouchCancel',\n captured: 'onTouchCancelCapture',\n },\n },\n topTouchEnd: {\n phasedRegistrationNames: {\n bubbled: 'onTouchEnd',\n captured: 'onTouchEndCapture',\n },\n },\n topTouchMove: {\n phasedRegistrationNames: {\n bubbled: 'onTouchMove',\n captured: 'onTouchMoveCapture',\n },\n },\n topTouchStart: {\n phasedRegistrationNames: {\n bubbled: 'onTouchStart',\n captured: 'onTouchStartCapture',\n },\n },\n },\n directEventTypes: {\n ...ReactNativeViewViewConfigAndroid.directEventTypes,\n topAccessibilityAction: {\n registrationName: 'onAccessibilityAction',\n },\n topAccessibilityEscape: {\n registrationName: 'onAccessibilityEscape',\n },\n topAccessibilityTap: {\n registrationName: 'onAccessibilityTap',\n },\n topLayout: {\n registrationName: 'onLayout',\n },\n topMagicTap: {\n registrationName: 'onMagicTap',\n },\n // Events for react-native-gesture-handler (T45765076)\n // Remove once this library can handle JS View Configs\n onGestureHandlerEvent: {\n registrationName: 'onGestureHandlerEvent',\n },\n onGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n },\n validAttributes: {\n ...ReactNativeViewViewConfigAndroid.validAttributes,\n accessibilityActions: true,\n accessibilityElementsHidden: true,\n accessibilityHint: true,\n accessibilityIgnoresInvertColors: true,\n accessibilityLabel: true,\n accessibilityLiveRegion: true,\n accessibilityRole: true,\n accessibilityStates: true, // TODO: Can be removed after next release\n accessibilityState: true,\n accessibilityValue: true,\n accessibilityViewIsModal: true,\n accessible: true,\n alignContent: true,\n alignItems: true,\n alignSelf: true,\n aspectRatio: true,\n backfaceVisibility: true,\n backgroundColor: {process: require('../../StyleSheet/processColor')},\n borderBottomColor: {process: require('../../StyleSheet/processColor')},\n borderBottomEndRadius: true,\n borderBottomLeftRadius: true,\n borderBottomRightRadius: true,\n borderBottomStartRadius: true,\n borderBottomWidth: true,\n borderColor: {process: require('../../StyleSheet/processColor')},\n borderEndColor: {process: require('../../StyleSheet/processColor')},\n borderEndWidth: true,\n borderLeftColor: {process: require('../../StyleSheet/processColor')},\n borderLeftWidth: true,\n borderRadius: true,\n borderRightColor: {process: require('../../StyleSheet/processColor')},\n borderRightWidth: true,\n borderStartColor: {process: require('../../StyleSheet/processColor')},\n borderStartWidth: true,\n borderStyle: true,\n borderTopColor: {process: require('../../StyleSheet/processColor')},\n borderTopEndRadius: true,\n borderTopLeftRadius: true,\n borderTopRightRadius: true,\n borderTopStartRadius: true,\n borderTopWidth: true,\n borderWidth: true,\n bottom: true,\n clickable: true,\n collapsable: true,\n direction: true,\n display: true,\n elevation: true,\n end: true,\n flex: true,\n flexBasis: true,\n flexDirection: true,\n flexGrow: true,\n flexShrink: true,\n flexWrap: true,\n height: true,\n hitSlop: {diff: require('../../Utilities/differ/insetsDiffer')},\n importantForAccessibility: true,\n justifyContent: true,\n left: true,\n margin: true,\n marginBottom: true,\n marginEnd: true,\n marginHorizontal: true,\n marginLeft: true,\n marginRight: true,\n marginStart: true,\n marginTop: true,\n marginVertical: true,\n maxHeight: true,\n maxWidth: true,\n minHeight: true,\n minWidth: true,\n nativeID: true,\n needsOffscreenAlphaCompositing: true,\n onAccessibilityAction: true,\n onAccessibilityEscape: true,\n onAccessibilityTap: true,\n onLayout: true,\n onMagicTap: true,\n opacity: true,\n overflow: true,\n padding: true,\n paddingBottom: true,\n paddingEnd: true,\n paddingHorizontal: true,\n paddingLeft: true,\n paddingRight: true,\n paddingStart: true,\n paddingTop: true,\n paddingVertical: true,\n pointerEvents: true,\n position: true,\n removeClippedSubviews: true,\n renderToHardwareTextureAndroid: true,\n right: true,\n rotation: true,\n scaleX: true,\n scaleY: true,\n shadowColor: {process: require('../../StyleSheet/processColor')},\n shadowOffset: {diff: require('../../Utilities/differ/sizesDiffer')},\n shadowOpacity: true,\n shadowRadius: true,\n shouldRasterizeIOS: true,\n start: true,\n style: {\n alignContent: true,\n alignItems: true,\n alignSelf: true,\n aspectRatio: true,\n backfaceVisibility: true,\n backgroundColor: {process: require('../../StyleSheet/processColor')},\n borderBottomColor: {process: require('../../StyleSheet/processColor')},\n borderBottomEndRadius: true,\n borderBottomLeftRadius: true,\n borderBottomRightRadius: true,\n borderBottomStartRadius: true,\n borderBottomWidth: true,\n borderColor: {process: require('../../StyleSheet/processColor')},\n borderEndColor: {process: require('../../StyleSheet/processColor')},\n borderEndWidth: true,\n borderLeftColor: {process: require('../../StyleSheet/processColor')},\n borderLeftWidth: true,\n borderRadius: true,\n borderRightColor: {process: require('../../StyleSheet/processColor')},\n borderRightWidth: true,\n borderStartColor: {process: require('../../StyleSheet/processColor')},\n borderStartWidth: true,\n borderStyle: true,\n borderTopColor: {process: require('../../StyleSheet/processColor')},\n borderTopEndRadius: true,\n borderTopLeftRadius: true,\n borderTopRightRadius: true,\n borderTopStartRadius: true,\n borderTopWidth: true,\n borderWidth: true,\n bottom: true,\n color: {process: require('../../StyleSheet/processColor')},\n decomposedMatrix: true,\n direction: true,\n display: true,\n elevation: true,\n end: true,\n flex: true,\n flexBasis: true,\n flexDirection: true,\n flexGrow: true,\n flexShrink: true,\n flexWrap: true,\n fontFamily: true,\n fontSize: true,\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n height: true,\n includeFontPadding: true,\n justifyContent: true,\n left: true,\n letterSpacing: true,\n lineHeight: true,\n margin: true,\n marginBottom: true,\n marginEnd: true,\n marginHorizontal: true,\n marginLeft: true,\n marginRight: true,\n marginStart: true,\n marginTop: true,\n marginVertical: true,\n maxHeight: true,\n maxWidth: true,\n minHeight: true,\n minWidth: true,\n opacity: true,\n overflow: true,\n overlayColor: {process: require('../../StyleSheet/processColor')},\n padding: true,\n paddingBottom: true,\n paddingEnd: true,\n paddingHorizontal: true,\n paddingLeft: true,\n paddingRight: true,\n paddingStart: true,\n paddingTop: true,\n paddingVertical: true,\n position: true,\n resizeMode: true,\n right: true,\n rotation: true,\n scaleX: true,\n scaleY: true,\n shadowColor: {process: require('../../StyleSheet/processColor')},\n shadowOffset: {diff: require('../../Utilities/differ/sizesDiffer')},\n shadowOpacity: true,\n shadowRadius: true,\n start: true,\n textAlign: true,\n textAlignVertical: true,\n textDecorationColor: {process: require('../../StyleSheet/processColor')},\n textDecorationLine: true,\n textDecorationStyle: true,\n textShadowColor: {process: require('../../StyleSheet/processColor')},\n textShadowOffset: true,\n textShadowRadius: true,\n textTransform: true,\n tintColor: {process: require('../../StyleSheet/processColor')},\n top: true,\n transform:\n Platform.OS === 'ios'\n ? {diff: require('../../Utilities/differ/matricesDiffer')}\n : {process: require('../../StyleSheet/processTransform')},\n transformMatrix: true,\n translateX: true,\n translateY: true,\n width: true,\n writingDirection: true,\n zIndex: true,\n },\n testID: true,\n top: true,\n transform:\n Platform.OS === 'ios'\n ? {diff: require('../../Utilities/differ/matricesDiffer')}\n : {process: require('../../StyleSheet/processTransform')},\n translateX: true,\n translateY: true,\n width: true,\n zIndex: true,\n },\n};\n\nmodule.exports = ReactNativeViewConfig;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nconst ReactNativeViewViewConfigAndroid = {\n uiViewClassName: 'RCTView',\n bubblingEventTypes: {\n topSelect: {\n phasedRegistrationNames: {\n bubbled: 'onSelect',\n captured: 'onSelectCapture',\n },\n },\n topAssetDidLoad: {\n phasedRegistrationNames: {\n bubbled: 'onAssetDidLoad',\n captured: 'onAssetDidLoadCapture',\n },\n },\n },\n directEventTypes: {\n topClick: {\n registrationName: 'onClick',\n },\n topContentSizeChange: {\n registrationName: 'onContentSizeChange',\n },\n topLoadingError: {\n registrationName: 'onLoadingError',\n },\n topLoadingFinish: {\n registrationName: 'onLoadingFinish',\n },\n topLoadingStart: {\n registrationName: 'onLoadingStart',\n },\n topMessage: {\n registrationName: 'onMessage',\n },\n topMomentumScrollBegin: {\n registrationName: 'onMomentumScrollBegin',\n },\n topMomentumScrollEnd: {\n registrationName: 'onMomentumScrollEnd',\n },\n topScroll: {\n registrationName: 'onScroll',\n },\n topScrollBeginDrag: {\n registrationName: 'onScrollBeginDrag',\n },\n topScrollEndDrag: {\n registrationName: 'onScrollEndDrag',\n },\n topSelectionChange: {\n registrationName: 'onSelectionChange',\n },\n onAssetDidLoad: {\n registrationName: 'onAssetDidLoad',\n },\n },\n validAttributes: {\n hasTVPreferredFocus: true,\n focusable: true,\n nativeBackgroundAndroid: true,\n nativeForegroundAndroid: true,\n nextFocusDown: true,\n nextFocusForward: true,\n nextFocusLeft: true,\n nextFocusRight: true,\n nextFocusUp: true,\n },\n};\n\nmodule.exports = ReactNativeViewViewConfigAndroid;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nconst Platform = require('../Utilities/Platform');\n\nconst normalizeColor = require('./normalizeColor');\n\nimport type {ColorValue} from './StyleSheet';\nimport type {NativeColorValue} from './PlatformColorValueTypes';\n\nexport type ProcessedColorValue = number | NativeColorValue;\n\n/* eslint no-bitwise: 0 */\nfunction processColor(color?: ?(number | ColorValue)): ?ProcessedColorValue {\n if (color === undefined || color === null) {\n return color;\n }\n\n let normalizedColor = normalizeColor(color);\n if (normalizedColor === null || normalizedColor === undefined) {\n return undefined;\n }\n\n if (typeof normalizedColor === 'object') {\n const processColorObject = require('./PlatformColorValueTypes')\n .processColorObject;\n\n const processedColorObj = processColorObject(normalizedColor);\n\n if (processedColorObj != null) {\n return processedColorObj;\n }\n }\n\n if (typeof normalizedColor !== 'number') {\n return null;\n }\n\n // Converts 0xrrggbbaa into 0xaarrggbb\n normalizedColor = ((normalizedColor << 24) | (normalizedColor >>> 8)) >>> 0;\n\n if (Platform.OS === 'android') {\n // Android use 32 bit *signed* integer to represent the color\n // We utilize the fact that bitwise operations in JS also operates on\n // signed 32 bit integers, so that we can use those to convert from\n // *unsigned* to *signed* 32bit int that way.\n normalizedColor = normalizedColor | 0x0;\n }\n return normalizedColor;\n}\n\nmodule.exports = processColor;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n/* eslint no-bitwise: 0 */\n\nimport normalizeColorBase from '@react-native/normalize-color/base';\n\nimport type {ColorValue} from './StyleSheet';\nimport type {ProcessedColorValue} from './processColor';\n\nfunction normalizeColor(\n color: ?(ColorValue | ProcessedColorValue),\n): ?ProcessedColorValue {\n if (typeof color === 'object' && color != null) {\n const {normalizeColorObject} = require('./PlatformColorValueTypes');\n const normalizedColor = normalizeColorObject(color);\n if (normalizedColor != null) {\n return color;\n }\n }\n\n if (typeof color === 'string' || typeof color === 'number') {\n return normalizeColorBase(color);\n }\n}\n\nmodule.exports = normalizeColor;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nfunction normalizeColorBase(color: ?string | number): null | number {\n const matchers = getMatchers();\n let match;\n\n if (typeof color === 'number') {\n if (color >>> 0 === color && color >= 0 && color <= 0xffffffff) {\n return color;\n }\n return null;\n }\n\n if (typeof color !== 'string') {\n return null;\n }\n\n // Ordered based on occurrences on Facebook codebase\n if ((match = matchers.hex6.exec(color))) {\n return parseInt(match[1] + 'ff', 16) >>> 0;\n }\n\n if (names.hasOwnProperty(color)) {\n return names[color];\n }\n\n if ((match = matchers.rgb.exec(color))) {\n return (\n // b\n ((parse255(match[1]) << 24) | // r\n (parse255(match[2]) << 16) | // g\n (parse255(match[3]) << 8) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = matchers.rgba.exec(color))) {\n return (\n // b\n ((parse255(match[1]) << 24) | // r\n (parse255(match[2]) << 16) | // g\n (parse255(match[3]) << 8) |\n parse1(match[4])) >>> // a\n 0\n );\n }\n\n if ((match = matchers.hex3.exec(color))) {\n return (\n parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n 'ff', // a\n 16,\n ) >>> 0\n );\n }\n\n // https://drafts.csswg.org/css-color-4/#hex-notation\n if ((match = matchers.hex8.exec(color))) {\n return parseInt(match[1], 16) >>> 0;\n }\n\n if ((match = matchers.hex4.exec(color))) {\n return (\n parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n match[4] +\n match[4], // a\n 16,\n ) >>> 0\n );\n }\n\n if ((match = matchers.hsl.exec(color))) {\n return (\n (hslToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // s\n parsePercentage(match[3]), // l\n ) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = matchers.hsla.exec(color))) {\n return (\n (hslToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // s\n parsePercentage(match[3]), // l\n ) |\n parse1(match[4])) >>> // a\n 0\n );\n }\n\n return null;\n}\n\nfunction hue2rgb(p: number, q: number, t: number): number {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n\nfunction hslToRgb(h: number, s: number, l: number): number {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n\n return (\n (Math.round(r * 255) << 24) |\n (Math.round(g * 255) << 16) |\n (Math.round(b * 255) << 8)\n );\n}\n\n// var INTEGER = '[-+]?\\\\d+';\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...args) {\n return '\\\\(\\\\s*(' + args.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nlet cachedMatchers;\n\nfunction getMatchers() {\n if (cachedMatchers === undefined) {\n cachedMatchers = {\n rgb: new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)),\n rgba: new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER)),\n hsl: new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n hsla: new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER)),\n hex3: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex4: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#([0-9a-fA-F]{6})$/,\n hex8: /^#([0-9a-fA-F]{8})$/,\n };\n }\n return cachedMatchers;\n}\n\nfunction parse255(str: string): number {\n const int = parseInt(str, 10);\n if (int < 0) {\n return 0;\n }\n if (int > 255) {\n return 255;\n }\n return int;\n}\n\nfunction parse360(str: string): number {\n const int = parseFloat(str);\n return (((int % 360) + 360) % 360) / 360;\n}\n\nfunction parse1(str: string): number {\n const num = parseFloat(str);\n if (num < 0) {\n return 0;\n }\n if (num > 1) {\n return 255;\n }\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str: string): number {\n // parseFloat conveniently ignores the final %\n const int = parseFloat(str);\n if (int < 0) {\n return 0;\n }\n if (int > 100) {\n return 1;\n }\n return int / 100;\n}\n\nconst names = {\n transparent: 0x00000000,\n\n // http://www.w3.org/TR/css3-color/#svg-color\n aliceblue: 0xf0f8ffff,\n antiquewhite: 0xfaebd7ff,\n aqua: 0x00ffffff,\n aquamarine: 0x7fffd4ff,\n azure: 0xf0ffffff,\n beige: 0xf5f5dcff,\n bisque: 0xffe4c4ff,\n black: 0x000000ff,\n blanchedalmond: 0xffebcdff,\n blue: 0x0000ffff,\n blueviolet: 0x8a2be2ff,\n brown: 0xa52a2aff,\n burlywood: 0xdeb887ff,\n burntsienna: 0xea7e5dff,\n cadetblue: 0x5f9ea0ff,\n chartreuse: 0x7fff00ff,\n chocolate: 0xd2691eff,\n coral: 0xff7f50ff,\n cornflowerblue: 0x6495edff,\n cornsilk: 0xfff8dcff,\n crimson: 0xdc143cff,\n cyan: 0x00ffffff,\n darkblue: 0x00008bff,\n darkcyan: 0x008b8bff,\n darkgoldenrod: 0xb8860bff,\n darkgray: 0xa9a9a9ff,\n darkgreen: 0x006400ff,\n darkgrey: 0xa9a9a9ff,\n darkkhaki: 0xbdb76bff,\n darkmagenta: 0x8b008bff,\n darkolivegreen: 0x556b2fff,\n darkorange: 0xff8c00ff,\n darkorchid: 0x9932ccff,\n darkred: 0x8b0000ff,\n darksalmon: 0xe9967aff,\n darkseagreen: 0x8fbc8fff,\n darkslateblue: 0x483d8bff,\n darkslategray: 0x2f4f4fff,\n darkslategrey: 0x2f4f4fff,\n darkturquoise: 0x00ced1ff,\n darkviolet: 0x9400d3ff,\n deeppink: 0xff1493ff,\n deepskyblue: 0x00bfffff,\n dimgray: 0x696969ff,\n dimgrey: 0x696969ff,\n dodgerblue: 0x1e90ffff,\n firebrick: 0xb22222ff,\n floralwhite: 0xfffaf0ff,\n forestgreen: 0x228b22ff,\n fuchsia: 0xff00ffff,\n gainsboro: 0xdcdcdcff,\n ghostwhite: 0xf8f8ffff,\n gold: 0xffd700ff,\n goldenrod: 0xdaa520ff,\n gray: 0x808080ff,\n green: 0x008000ff,\n greenyellow: 0xadff2fff,\n grey: 0x808080ff,\n honeydew: 0xf0fff0ff,\n hotpink: 0xff69b4ff,\n indianred: 0xcd5c5cff,\n indigo: 0x4b0082ff,\n ivory: 0xfffff0ff,\n khaki: 0xf0e68cff,\n lavender: 0xe6e6faff,\n lavenderblush: 0xfff0f5ff,\n lawngreen: 0x7cfc00ff,\n lemonchiffon: 0xfffacdff,\n lightblue: 0xadd8e6ff,\n lightcoral: 0xf08080ff,\n lightcyan: 0xe0ffffff,\n lightgoldenrodyellow: 0xfafad2ff,\n lightgray: 0xd3d3d3ff,\n lightgreen: 0x90ee90ff,\n lightgrey: 0xd3d3d3ff,\n lightpink: 0xffb6c1ff,\n lightsalmon: 0xffa07aff,\n lightseagreen: 0x20b2aaff,\n lightskyblue: 0x87cefaff,\n lightslategray: 0x778899ff,\n lightslategrey: 0x778899ff,\n lightsteelblue: 0xb0c4deff,\n lightyellow: 0xffffe0ff,\n lime: 0x00ff00ff,\n limegreen: 0x32cd32ff,\n linen: 0xfaf0e6ff,\n magenta: 0xff00ffff,\n maroon: 0x800000ff,\n mediumaquamarine: 0x66cdaaff,\n mediumblue: 0x0000cdff,\n mediumorchid: 0xba55d3ff,\n mediumpurple: 0x9370dbff,\n mediumseagreen: 0x3cb371ff,\n mediumslateblue: 0x7b68eeff,\n mediumspringgreen: 0x00fa9aff,\n mediumturquoise: 0x48d1ccff,\n mediumvioletred: 0xc71585ff,\n midnightblue: 0x191970ff,\n mintcream: 0xf5fffaff,\n mistyrose: 0xffe4e1ff,\n moccasin: 0xffe4b5ff,\n navajowhite: 0xffdeadff,\n navy: 0x000080ff,\n oldlace: 0xfdf5e6ff,\n olive: 0x808000ff,\n olivedrab: 0x6b8e23ff,\n orange: 0xffa500ff,\n orangered: 0xff4500ff,\n orchid: 0xda70d6ff,\n palegoldenrod: 0xeee8aaff,\n palegreen: 0x98fb98ff,\n paleturquoise: 0xafeeeeff,\n palevioletred: 0xdb7093ff,\n papayawhip: 0xffefd5ff,\n peachpuff: 0xffdab9ff,\n peru: 0xcd853fff,\n pink: 0xffc0cbff,\n plum: 0xdda0ddff,\n powderblue: 0xb0e0e6ff,\n purple: 0x800080ff,\n rebeccapurple: 0x663399ff,\n red: 0xff0000ff,\n rosybrown: 0xbc8f8fff,\n royalblue: 0x4169e1ff,\n saddlebrown: 0x8b4513ff,\n salmon: 0xfa8072ff,\n sandybrown: 0xf4a460ff,\n seagreen: 0x2e8b57ff,\n seashell: 0xfff5eeff,\n sienna: 0xa0522dff,\n silver: 0xc0c0c0ff,\n skyblue: 0x87ceebff,\n slateblue: 0x6a5acdff,\n slategray: 0x708090ff,\n slategrey: 0x708090ff,\n snow: 0xfffafaff,\n springgreen: 0x00ff7fff,\n steelblue: 0x4682b4ff,\n tan: 0xd2b48cff,\n teal: 0x008080ff,\n thistle: 0xd8bfd8ff,\n tomato: 0xff6347ff,\n turquoise: 0x40e0d0ff,\n violet: 0xee82eeff,\n wheat: 0xf5deb3ff,\n white: 0xffffffff,\n whitesmoke: 0xf5f5f5ff,\n yellow: 0xffff00ff,\n yellowgreen: 0x9acd32ff,\n};\n\nmodule.exports = normalizeColorBase;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {ColorValue} from './StyleSheet';\nimport type {ProcessedColorValue} from './processColor';\n\nexport opaque type NativeColorValue = {\n semantic?: Array,\n dynamic?: {\n light: ?(ColorValue | ProcessedColorValue),\n dark: ?(ColorValue | ProcessedColorValue),\n highContrastLight?: ?(ColorValue | ProcessedColorValue),\n highContrastDark?: ?(ColorValue | ProcessedColorValue),\n },\n};\n\nexport const PlatformColor = (...names: Array): ColorValue => {\n return {semantic: names};\n};\n\nexport type DynamicColorIOSTuplePrivate = {\n light: ColorValue,\n dark: ColorValue,\n highContrastLight?: ColorValue,\n highContrastDark?: ColorValue,\n};\n\nexport const DynamicColorIOSPrivate = (\n tuple: DynamicColorIOSTuplePrivate,\n): ColorValue => {\n return {\n dynamic: {\n light: tuple.light,\n dark: tuple.dark,\n highContrastLight: tuple.highContrastLight,\n highContrastDark: tuple.highContrastDark,\n },\n };\n};\n\nexport const normalizeColorObject = (\n color: NativeColorValue,\n): ?ProcessedColorValue => {\n if ('semantic' in color) {\n // an ios semantic color\n return color;\n } else if ('dynamic' in color && color.dynamic !== undefined) {\n const normalizeColor = require('./normalizeColor');\n\n // a dynamic, appearance aware color\n const dynamic = color.dynamic;\n const dynamicColor: NativeColorValue = {\n dynamic: {\n light: normalizeColor(dynamic.light),\n dark: normalizeColor(dynamic.dark),\n highContrastLight: normalizeColor(dynamic.highContrastLight),\n highContrastDark: normalizeColor(dynamic.highContrastDark),\n },\n };\n return dynamicColor;\n }\n\n return null;\n};\n\nexport const processColorObject = (\n color: NativeColorValue,\n): ?NativeColorValue => {\n if ('dynamic' in color && color.dynamic != null) {\n const processColor = require('./processColor');\n const dynamic = color.dynamic;\n const dynamicColor: NativeColorValue = {\n dynamic: {\n light: processColor(dynamic.light),\n dark: processColor(dynamic.dark),\n highContrastLight: processColor(dynamic.highContrastLight),\n highContrastDark: processColor(dynamic.highContrastDark),\n },\n };\n return dynamicColor;\n }\n return color;\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\ntype Inset = {\n top: ?number,\n left: ?number,\n right: ?number,\n bottom: ?number,\n ...\n};\n\nconst dummyInsets = {\n top: undefined,\n left: undefined,\n right: undefined,\n bottom: undefined,\n};\n\nconst insetsDiffer = function(one: Inset, two: Inset): boolean {\n one = one || dummyInsets;\n two = two || dummyInsets;\n return (\n one !== two &&\n (one.top !== two.top ||\n one.left !== two.left ||\n one.right !== two.right ||\n one.bottom !== two.bottom)\n );\n};\n\nmodule.exports = insetsDiffer;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n'use strict';\n\nconst dummySize = {width: undefined, height: undefined};\n\nconst sizesDiffer = function(one, two) {\n one = one || dummySize;\n two = two || dummySize;\n return one !== two && (one.width !== two.width || one.height !== two.height);\n};\n\nmodule.exports = sizesDiffer;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n'use strict';\n\n/**\n * Unrolls an array comparison specially for matrices. Prioritizes\n * checking of indices that are most likely to change so that the comparison\n * bails as early as possible.\n *\n * @param {MatrixMath.Matrix} one First matrix.\n * @param {MatrixMath.Matrix} two Second matrix.\n * @return {boolean} Whether or not the two matrices differ.\n */\nconst matricesDiffer = function(one, two) {\n if (one === two) {\n return false;\n }\n return (\n !one ||\n !two ||\n one[12] !== two[12] ||\n one[13] !== two[13] ||\n one[14] !== two[14] ||\n one[5] !== two[5] ||\n one[10] !== two[10] ||\n one[0] !== two[0] ||\n one[1] !== two[1] ||\n one[2] !== two[2] ||\n one[3] !== two[3] ||\n one[4] !== two[4] ||\n one[6] !== two[6] ||\n one[7] !== two[7] ||\n one[8] !== two[8] ||\n one[9] !== two[9] ||\n one[11] !== two[11] ||\n one[15] !== two[15]\n );\n};\n\nmodule.exports = matricesDiffer;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nconst MatrixMath = require('../Utilities/MatrixMath');\nconst Platform = require('../Utilities/Platform');\n\nconst invariant = require('invariant');\nconst stringifySafe = require('../Utilities/stringifySafe').default;\n\n/**\n * Generate a transform matrix based on the provided transforms, and use that\n * within the style object instead.\n *\n * This allows us to provide an API that is similar to CSS, where transforms may\n * be applied in an arbitrary order, and yet have a universal, singular\n * interface to native code.\n */\nfunction processTransform(\n transform: Array,\n): Array | Array {\n if (__DEV__) {\n _validateTransforms(transform);\n }\n\n // Android & iOS implementations of transform property accept the list of\n // transform properties as opposed to a transform Matrix. This is necessary\n // to control transform property updates completely on the native thread.\n if (Platform.OS === 'android' || Platform.OS === 'ios') {\n return transform;\n }\n\n const result = MatrixMath.createIdentityMatrix();\n\n transform.forEach(transformation => {\n const key = Object.keys(transformation)[0];\n const value = transformation[key];\n\n switch (key) {\n case 'matrix':\n MatrixMath.multiplyInto(result, result, value);\n break;\n case 'perspective':\n _multiplyTransform(result, MatrixMath.reusePerspectiveCommand, [value]);\n break;\n case 'rotateX':\n _multiplyTransform(result, MatrixMath.reuseRotateXCommand, [\n _convertToRadians(value),\n ]);\n break;\n case 'rotateY':\n _multiplyTransform(result, MatrixMath.reuseRotateYCommand, [\n _convertToRadians(value),\n ]);\n break;\n case 'rotate':\n case 'rotateZ':\n _multiplyTransform(result, MatrixMath.reuseRotateZCommand, [\n _convertToRadians(value),\n ]);\n break;\n case 'scale':\n _multiplyTransform(result, MatrixMath.reuseScaleCommand, [value]);\n break;\n case 'scaleX':\n _multiplyTransform(result, MatrixMath.reuseScaleXCommand, [value]);\n break;\n case 'scaleY':\n _multiplyTransform(result, MatrixMath.reuseScaleYCommand, [value]);\n break;\n case 'translate':\n _multiplyTransform(result, MatrixMath.reuseTranslate3dCommand, [\n value[0],\n value[1],\n value[2] || 0,\n ]);\n break;\n case 'translateX':\n _multiplyTransform(result, MatrixMath.reuseTranslate2dCommand, [\n value,\n 0,\n ]);\n break;\n case 'translateY':\n _multiplyTransform(result, MatrixMath.reuseTranslate2dCommand, [\n 0,\n value,\n ]);\n break;\n case 'skewX':\n _multiplyTransform(result, MatrixMath.reuseSkewXCommand, [\n _convertToRadians(value),\n ]);\n break;\n case 'skewY':\n _multiplyTransform(result, MatrixMath.reuseSkewYCommand, [\n _convertToRadians(value),\n ]);\n break;\n default:\n throw new Error('Invalid transform name: ' + key);\n }\n });\n\n return result;\n}\n\n/**\n * Performs a destructive operation on a transform matrix.\n */\nfunction _multiplyTransform(\n result: Array,\n matrixMathFunction: Function,\n args: Array,\n): void {\n const matrixToApply = MatrixMath.createIdentityMatrix();\n const argsWithIdentity = [matrixToApply].concat(args);\n matrixMathFunction.apply(this, argsWithIdentity);\n MatrixMath.multiplyInto(result, result, matrixToApply);\n}\n\n/**\n * Parses a string like '0.5rad' or '60deg' into radians expressed in a float.\n * Note that validation on the string is done in `_validateTransform()`.\n */\nfunction _convertToRadians(value: string): number {\n const floatValue = parseFloat(value);\n return value.indexOf('rad') > -1 ? floatValue : (floatValue * Math.PI) / 180;\n}\n\nfunction _validateTransforms(transform: Array): void {\n transform.forEach(transformation => {\n const keys = Object.keys(transformation);\n invariant(\n keys.length === 1,\n 'You must specify exactly one property per transform object. Passed properties: %s',\n stringifySafe(transformation),\n );\n const key = keys[0];\n const value = transformation[key];\n _validateTransform(key, value, transformation);\n });\n}\n\nfunction _validateTransform(key, value, transformation) {\n invariant(\n !value.getValue,\n 'You passed an Animated.Value to a normal component. ' +\n 'You need to wrap that component in an Animated. For example, ' +\n 'replace by .',\n );\n\n const multivalueTransforms = ['matrix', 'translate'];\n if (multivalueTransforms.indexOf(key) !== -1) {\n invariant(\n Array.isArray(value),\n 'Transform with key of %s must have an array as the value: %s',\n key,\n stringifySafe(transformation),\n );\n }\n switch (key) {\n case 'matrix':\n invariant(\n value.length === 9 || value.length === 16,\n 'Matrix transform must have a length of 9 (2d) or 16 (3d). ' +\n 'Provided matrix has a length of %s: %s',\n /* $FlowFixMe[prop-missing] (>=0.84.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.84 was deployed. To\n * see the error, delete this comment and run Flow. */\n value.length,\n stringifySafe(transformation),\n );\n break;\n case 'translate':\n invariant(\n value.length === 2 || value.length === 3,\n 'Transform with key translate must be an array of length 2 or 3, found %s: %s',\n /* $FlowFixMe[prop-missing] (>=0.84.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.84 was deployed. To\n * see the error, delete this comment and run Flow. */\n value.length,\n stringifySafe(transformation),\n );\n break;\n case 'rotateX':\n case 'rotateY':\n case 'rotateZ':\n case 'rotate':\n case 'skewX':\n case 'skewY':\n invariant(\n typeof value === 'string',\n 'Transform with key of \"%s\" must be a string: %s',\n key,\n stringifySafe(transformation),\n );\n invariant(\n value.indexOf('deg') > -1 || value.indexOf('rad') > -1,\n 'Rotate transform must be expressed in degrees (deg) or radians ' +\n '(rad): %s',\n stringifySafe(transformation),\n );\n break;\n case 'perspective':\n invariant(\n typeof value === 'number',\n 'Transform with key of \"%s\" must be a number: %s',\n key,\n stringifySafe(transformation),\n );\n invariant(\n value !== 0,\n 'Transform with key of \"%s\" cannot be zero: %s',\n key,\n stringifySafe(transformation),\n );\n break;\n case 'translateX':\n case 'translateY':\n case 'scale':\n case 'scaleX':\n case 'scaleY':\n invariant(\n typeof value === 'number',\n 'Transform with key of \"%s\" must be a number: %s',\n key,\n stringifySafe(transformation),\n );\n break;\n default:\n invariant(\n false,\n 'Invalid transform %s: %s',\n key,\n stringifySafe(transformation),\n );\n }\n}\n\nmodule.exports = processTransform;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @noflow\n */\n\n'use strict';\n\nconst invariant = require('invariant');\n\n/**\n * Memory conservative (mutative) matrix math utilities. Uses \"command\"\n * matrices, which are reusable.\n */\nconst MatrixMath = {\n createIdentityMatrix: function() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n },\n\n createCopy: function(m) {\n return [\n m[0],\n m[1],\n m[2],\n m[3],\n m[4],\n m[5],\n m[6],\n m[7],\n m[8],\n m[9],\n m[10],\n m[11],\n m[12],\n m[13],\n m[14],\n m[15],\n ];\n },\n\n createOrthographic: function(left, right, bottom, top, near, far) {\n const a = 2 / (right - left);\n const b = 2 / (top - bottom);\n const c = -2 / (far - near);\n\n const tx = -(right + left) / (right - left);\n const ty = -(top + bottom) / (top - bottom);\n const tz = -(far + near) / (far - near);\n\n return [a, 0, 0, 0, 0, b, 0, 0, 0, 0, c, 0, tx, ty, tz, 1];\n },\n\n createFrustum: function(left, right, bottom, top, near, far) {\n const r_width = 1 / (right - left);\n const r_height = 1 / (top - bottom);\n const r_depth = 1 / (near - far);\n const x = 2 * (near * r_width);\n const y = 2 * (near * r_height);\n const A = (right + left) * r_width;\n const B = (top + bottom) * r_height;\n const C = (far + near) * r_depth;\n const D = 2 * (far * near * r_depth);\n return [x, 0, 0, 0, 0, y, 0, 0, A, B, C, -1, 0, 0, D, 0];\n },\n\n /**\n * This create a perspective projection towards negative z\n * Clipping the z range of [-near, -far]\n *\n * @param fovInRadians - field of view in radians\n */\n createPerspective: function(fovInRadians, aspect, near, far) {\n const h = 1 / Math.tan(fovInRadians / 2);\n const r_depth = 1 / (near - far);\n const C = (far + near) * r_depth;\n const D = 2 * (far * near * r_depth);\n return [h / aspect, 0, 0, 0, 0, h, 0, 0, 0, 0, C, -1, 0, 0, D, 0];\n },\n\n createTranslate2d: function(x, y) {\n const mat = MatrixMath.createIdentityMatrix();\n MatrixMath.reuseTranslate2dCommand(mat, x, y);\n return mat;\n },\n\n reuseTranslate2dCommand: function(matrixCommand, x, y) {\n matrixCommand[12] = x;\n matrixCommand[13] = y;\n },\n\n reuseTranslate3dCommand: function(matrixCommand, x, y, z) {\n matrixCommand[12] = x;\n matrixCommand[13] = y;\n matrixCommand[14] = z;\n },\n\n createScale: function(factor) {\n const mat = MatrixMath.createIdentityMatrix();\n MatrixMath.reuseScaleCommand(mat, factor);\n return mat;\n },\n\n reuseScaleCommand: function(matrixCommand, factor) {\n matrixCommand[0] = factor;\n matrixCommand[5] = factor;\n },\n\n reuseScale3dCommand: function(matrixCommand, x, y, z) {\n matrixCommand[0] = x;\n matrixCommand[5] = y;\n matrixCommand[10] = z;\n },\n\n reusePerspectiveCommand: function(matrixCommand, p) {\n matrixCommand[11] = -1 / p;\n },\n\n reuseScaleXCommand(matrixCommand, factor) {\n matrixCommand[0] = factor;\n },\n\n reuseScaleYCommand(matrixCommand, factor) {\n matrixCommand[5] = factor;\n },\n\n reuseScaleZCommand(matrixCommand, factor) {\n matrixCommand[10] = factor;\n },\n\n reuseRotateXCommand: function(matrixCommand, radians) {\n matrixCommand[5] = Math.cos(radians);\n matrixCommand[6] = Math.sin(radians);\n matrixCommand[9] = -Math.sin(radians);\n matrixCommand[10] = Math.cos(radians);\n },\n\n reuseRotateYCommand: function(matrixCommand, amount) {\n matrixCommand[0] = Math.cos(amount);\n matrixCommand[2] = -Math.sin(amount);\n matrixCommand[8] = Math.sin(amount);\n matrixCommand[10] = Math.cos(amount);\n },\n\n // http://www.w3.org/TR/css3-transforms/#recomposing-to-a-2d-matrix\n reuseRotateZCommand: function(matrixCommand, radians) {\n matrixCommand[0] = Math.cos(radians);\n matrixCommand[1] = Math.sin(radians);\n matrixCommand[4] = -Math.sin(radians);\n matrixCommand[5] = Math.cos(radians);\n },\n\n createRotateZ: function(radians) {\n const mat = MatrixMath.createIdentityMatrix();\n MatrixMath.reuseRotateZCommand(mat, radians);\n return mat;\n },\n\n reuseSkewXCommand: function(matrixCommand, radians) {\n matrixCommand[4] = Math.tan(radians);\n },\n\n reuseSkewYCommand: function(matrixCommand, radians) {\n matrixCommand[1] = Math.tan(radians);\n },\n\n multiplyInto: function(out, a, b) {\n const a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11],\n a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n\n let b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n },\n\n determinant(matrix: Array): number {\n const [\n m00,\n m01,\n m02,\n m03,\n m10,\n m11,\n m12,\n m13,\n m20,\n m21,\n m22,\n m23,\n m30,\n m31,\n m32,\n m33,\n ] = matrix;\n return (\n m03 * m12 * m21 * m30 -\n m02 * m13 * m21 * m30 -\n m03 * m11 * m22 * m30 +\n m01 * m13 * m22 * m30 +\n m02 * m11 * m23 * m30 -\n m01 * m12 * m23 * m30 -\n m03 * m12 * m20 * m31 +\n m02 * m13 * m20 * m31 +\n m03 * m10 * m22 * m31 -\n m00 * m13 * m22 * m31 -\n m02 * m10 * m23 * m31 +\n m00 * m12 * m23 * m31 +\n m03 * m11 * m20 * m32 -\n m01 * m13 * m20 * m32 -\n m03 * m10 * m21 * m32 +\n m00 * m13 * m21 * m32 +\n m01 * m10 * m23 * m32 -\n m00 * m11 * m23 * m32 -\n m02 * m11 * m20 * m33 +\n m01 * m12 * m20 * m33 +\n m02 * m10 * m21 * m33 -\n m00 * m12 * m21 * m33 -\n m01 * m10 * m22 * m33 +\n m00 * m11 * m22 * m33\n );\n },\n\n /**\n * Inverse of a matrix. Multiplying by the inverse is used in matrix math\n * instead of division.\n *\n * Formula from:\n * http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n */\n inverse(matrix: Array): Array {\n const det = MatrixMath.determinant(matrix);\n if (!det) {\n return matrix;\n }\n const [\n m00,\n m01,\n m02,\n m03,\n m10,\n m11,\n m12,\n m13,\n m20,\n m21,\n m22,\n m23,\n m30,\n m31,\n m32,\n m33,\n ] = matrix;\n return [\n (m12 * m23 * m31 -\n m13 * m22 * m31 +\n m13 * m21 * m32 -\n m11 * m23 * m32 -\n m12 * m21 * m33 +\n m11 * m22 * m33) /\n det,\n (m03 * m22 * m31 -\n m02 * m23 * m31 -\n m03 * m21 * m32 +\n m01 * m23 * m32 +\n m02 * m21 * m33 -\n m01 * m22 * m33) /\n det,\n (m02 * m13 * m31 -\n m03 * m12 * m31 +\n m03 * m11 * m32 -\n m01 * m13 * m32 -\n m02 * m11 * m33 +\n m01 * m12 * m33) /\n det,\n (m03 * m12 * m21 -\n m02 * m13 * m21 -\n m03 * m11 * m22 +\n m01 * m13 * m22 +\n m02 * m11 * m23 -\n m01 * m12 * m23) /\n det,\n (m13 * m22 * m30 -\n m12 * m23 * m30 -\n m13 * m20 * m32 +\n m10 * m23 * m32 +\n m12 * m20 * m33 -\n m10 * m22 * m33) /\n det,\n (m02 * m23 * m30 -\n m03 * m22 * m30 +\n m03 * m20 * m32 -\n m00 * m23 * m32 -\n m02 * m20 * m33 +\n m00 * m22 * m33) /\n det,\n (m03 * m12 * m30 -\n m02 * m13 * m30 -\n m03 * m10 * m32 +\n m00 * m13 * m32 +\n m02 * m10 * m33 -\n m00 * m12 * m33) /\n det,\n (m02 * m13 * m20 -\n m03 * m12 * m20 +\n m03 * m10 * m22 -\n m00 * m13 * m22 -\n m02 * m10 * m23 +\n m00 * m12 * m23) /\n det,\n (m11 * m23 * m30 -\n m13 * m21 * m30 +\n m13 * m20 * m31 -\n m10 * m23 * m31 -\n m11 * m20 * m33 +\n m10 * m21 * m33) /\n det,\n (m03 * m21 * m30 -\n m01 * m23 * m30 -\n m03 * m20 * m31 +\n m00 * m23 * m31 +\n m01 * m20 * m33 -\n m00 * m21 * m33) /\n det,\n (m01 * m13 * m30 -\n m03 * m11 * m30 +\n m03 * m10 * m31 -\n m00 * m13 * m31 -\n m01 * m10 * m33 +\n m00 * m11 * m33) /\n det,\n (m03 * m11 * m20 -\n m01 * m13 * m20 -\n m03 * m10 * m21 +\n m00 * m13 * m21 +\n m01 * m10 * m23 -\n m00 * m11 * m23) /\n det,\n (m12 * m21 * m30 -\n m11 * m22 * m30 -\n m12 * m20 * m31 +\n m10 * m22 * m31 +\n m11 * m20 * m32 -\n m10 * m21 * m32) /\n det,\n (m01 * m22 * m30 -\n m02 * m21 * m30 +\n m02 * m20 * m31 -\n m00 * m22 * m31 -\n m01 * m20 * m32 +\n m00 * m21 * m32) /\n det,\n (m02 * m11 * m30 -\n m01 * m12 * m30 -\n m02 * m10 * m31 +\n m00 * m12 * m31 +\n m01 * m10 * m32 -\n m00 * m11 * m32) /\n det,\n (m01 * m12 * m20 -\n m02 * m11 * m20 +\n m02 * m10 * m21 -\n m00 * m12 * m21 -\n m01 * m10 * m22 +\n m00 * m11 * m22) /\n det,\n ];\n },\n\n /**\n * Turns columns into rows and rows into columns.\n */\n transpose(m: Array): Array {\n return [\n m[0],\n m[4],\n m[8],\n m[12],\n m[1],\n m[5],\n m[9],\n m[13],\n m[2],\n m[6],\n m[10],\n m[14],\n m[3],\n m[7],\n m[11],\n m[15],\n ];\n },\n\n /**\n * Based on: http://tog.acm.org/resources/GraphicsGems/gemsii/unmatrix.c\n */\n multiplyVectorByMatrix(v: Array, m: Array): Array {\n const [vx, vy, vz, vw] = v;\n return [\n vx * m[0] + vy * m[4] + vz * m[8] + vw * m[12],\n vx * m[1] + vy * m[5] + vz * m[9] + vw * m[13],\n vx * m[2] + vy * m[6] + vz * m[10] + vw * m[14],\n vx * m[3] + vy * m[7] + vz * m[11] + vw * m[15],\n ];\n },\n\n /**\n * From: https://code.google.com/p/webgl-mjs/source/browse/mjs.js\n */\n v3Length(a: Array): number {\n return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]);\n },\n\n /**\n * Based on: https://code.google.com/p/webgl-mjs/source/browse/mjs.js\n */\n v3Normalize(vector: Array, v3Length: number): Array {\n const im = 1 / (v3Length || MatrixMath.v3Length(vector));\n return [vector[0] * im, vector[1] * im, vector[2] * im];\n },\n\n /**\n * The dot product of a and b, two 3-element vectors.\n * From: https://code.google.com/p/webgl-mjs/source/browse/mjs.js\n */\n v3Dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n },\n\n /**\n * From:\n * http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp\n */\n v3Combine(\n a: Array,\n b: Array,\n aScale: number,\n bScale: number,\n ): Array {\n return [\n aScale * a[0] + bScale * b[0],\n aScale * a[1] + bScale * b[1],\n aScale * a[2] + bScale * b[2],\n ];\n },\n\n /**\n * From:\n * http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp\n */\n v3Cross(a: Array, b: Array): Array {\n return [\n a[1] * b[2] - a[2] * b[1],\n a[2] * b[0] - a[0] * b[2],\n a[0] * b[1] - a[1] * b[0],\n ];\n },\n\n /**\n * Based on:\n * http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/\n * and:\n * http://quat.zachbennett.com/\n *\n * Note that this rounds degrees to the thousandth of a degree, due to\n * floating point errors in the creation of the quaternion.\n *\n * Also note that this expects the qw value to be last, not first.\n *\n * Also, when researching this, remember that:\n * yaw === heading === z-axis\n * pitch === elevation/attitude === y-axis\n * roll === bank === x-axis\n */\n quaternionToDegreesXYZ(q: Array, matrix, row): Array {\n const [qx, qy, qz, qw] = q;\n const qw2 = qw * qw;\n const qx2 = qx * qx;\n const qy2 = qy * qy;\n const qz2 = qz * qz;\n const test = qx * qy + qz * qw;\n const unit = qw2 + qx2 + qy2 + qz2;\n const conv = 180 / Math.PI;\n\n if (test > 0.49999 * unit) {\n return [0, 2 * Math.atan2(qx, qw) * conv, 90];\n }\n if (test < -0.49999 * unit) {\n return [0, -2 * Math.atan2(qx, qw) * conv, -90];\n }\n\n return [\n MatrixMath.roundTo3Places(\n Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx2 - 2 * qz2) * conv,\n ),\n MatrixMath.roundTo3Places(\n Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy2 - 2 * qz2) * conv,\n ),\n MatrixMath.roundTo3Places(Math.asin(2 * qx * qy + 2 * qz * qw) * conv),\n ];\n },\n\n /**\n * Based on:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\n roundTo3Places(n: number): number {\n const arr = n.toString().split('e');\n return Math.round(arr[0] + 'e' + (arr[1] ? +arr[1] - 3 : 3)) * 0.001;\n },\n\n /**\n * Decompose a matrix into separate transform values, for use on platforms\n * where applying a precomposed matrix is not possible, and transforms are\n * applied in an inflexible ordering (e.g. Android).\n *\n * Implementation based on\n * http://www.w3.org/TR/css3-transforms/#decomposing-a-2d-matrix\n * http://www.w3.org/TR/css3-transforms/#decomposing-a-3d-matrix\n * which was based on\n * http://tog.acm.org/resources/GraphicsGems/gemsii/unmatrix.c\n */\n decomposeMatrix(transformMatrix: Array): ?Object {\n invariant(\n transformMatrix.length === 16,\n 'Matrix decomposition needs a list of 3d matrix values, received %s',\n transformMatrix,\n );\n\n // output values\n let perspective = [];\n const quaternion = [];\n const scale = [];\n const skew = [];\n const translation = [];\n\n // create normalized, 2d array matrix\n // and normalized 1d array perspectiveMatrix with redefined 4th column\n if (!transformMatrix[15]) {\n return;\n }\n const matrix = [];\n const perspectiveMatrix = [];\n for (let i = 0; i < 4; i++) {\n matrix.push([]);\n for (let j = 0; j < 4; j++) {\n const value = transformMatrix[i * 4 + j] / transformMatrix[15];\n matrix[i].push(value);\n perspectiveMatrix.push(j === 3 ? 0 : value);\n }\n }\n perspectiveMatrix[15] = 1;\n\n // test for singularity of upper 3x3 part of the perspective matrix\n if (!MatrixMath.determinant(perspectiveMatrix)) {\n return;\n }\n\n // isolate perspective\n if (matrix[0][3] !== 0 || matrix[1][3] !== 0 || matrix[2][3] !== 0) {\n // rightHandSide is the right hand side of the equation.\n // rightHandSide is a vector, or point in 3d space relative to the origin.\n const rightHandSide = [\n matrix[0][3],\n matrix[1][3],\n matrix[2][3],\n matrix[3][3],\n ];\n\n // Solve the equation by inverting perspectiveMatrix and multiplying\n // rightHandSide by the inverse.\n const inversePerspectiveMatrix = MatrixMath.inverse(perspectiveMatrix);\n const transposedInversePerspectiveMatrix = MatrixMath.transpose(\n inversePerspectiveMatrix,\n );\n perspective = MatrixMath.multiplyVectorByMatrix(\n rightHandSide,\n transposedInversePerspectiveMatrix,\n );\n } else {\n // no perspective\n perspective[0] = perspective[1] = perspective[2] = 0;\n perspective[3] = 1;\n }\n\n // translation is simple\n for (let i = 0; i < 3; i++) {\n translation[i] = matrix[3][i];\n }\n\n // Now get scale and shear.\n // 'row' is a 3 element array of 3 component vectors\n const row = [];\n for (let i = 0; i < 3; i++) {\n row[i] = [matrix[i][0], matrix[i][1], matrix[i][2]];\n }\n\n // Compute X scale factor and normalize first row.\n scale[0] = MatrixMath.v3Length(row[0]);\n row[0] = MatrixMath.v3Normalize(row[0], scale[0]);\n\n // Compute XY shear factor and make 2nd row orthogonal to 1st.\n skew[0] = MatrixMath.v3Dot(row[0], row[1]);\n row[1] = MatrixMath.v3Combine(row[1], row[0], 1.0, -skew[0]);\n\n // Now, compute Y scale and normalize 2nd row.\n scale[1] = MatrixMath.v3Length(row[1]);\n row[1] = MatrixMath.v3Normalize(row[1], scale[1]);\n skew[0] /= scale[1];\n\n // Compute XZ and YZ shears, orthogonalize 3rd row\n skew[1] = MatrixMath.v3Dot(row[0], row[2]);\n row[2] = MatrixMath.v3Combine(row[2], row[0], 1.0, -skew[1]);\n skew[2] = MatrixMath.v3Dot(row[1], row[2]);\n row[2] = MatrixMath.v3Combine(row[2], row[1], 1.0, -skew[2]);\n\n // Next, get Z scale and normalize 3rd row.\n scale[2] = MatrixMath.v3Length(row[2]);\n row[2] = MatrixMath.v3Normalize(row[2], scale[2]);\n skew[1] /= scale[2];\n skew[2] /= scale[2];\n\n // At this point, the matrix (in rows) is orthonormal.\n // Check for a coordinate system flip. If the determinant\n // is -1, then negate the matrix and the scaling factors.\n const pdum3 = MatrixMath.v3Cross(row[1], row[2]);\n if (MatrixMath.v3Dot(row[0], pdum3) < 0) {\n for (let i = 0; i < 3; i++) {\n scale[i] *= -1;\n row[i][0] *= -1;\n row[i][1] *= -1;\n row[i][2] *= -1;\n }\n }\n\n // Now, get the rotations out\n quaternion[0] =\n 0.5 * Math.sqrt(Math.max(1 + row[0][0] - row[1][1] - row[2][2], 0));\n quaternion[1] =\n 0.5 * Math.sqrt(Math.max(1 - row[0][0] + row[1][1] - row[2][2], 0));\n quaternion[2] =\n 0.5 * Math.sqrt(Math.max(1 - row[0][0] - row[1][1] + row[2][2], 0));\n quaternion[3] =\n 0.5 * Math.sqrt(Math.max(1 + row[0][0] + row[1][1] + row[2][2], 0));\n\n if (row[2][1] > row[1][2]) {\n quaternion[0] = -quaternion[0];\n }\n if (row[0][2] > row[2][0]) {\n quaternion[1] = -quaternion[1];\n }\n if (row[1][0] > row[0][1]) {\n quaternion[2] = -quaternion[2];\n }\n\n // correct for occasional, weird Euler synonyms for 2d rotation\n let rotationDegrees;\n if (\n quaternion[0] < 0.001 &&\n quaternion[0] >= 0 &&\n quaternion[1] < 0.001 &&\n quaternion[1] >= 0\n ) {\n // this is a 2d rotation on the z-axis\n rotationDegrees = [\n 0,\n 0,\n MatrixMath.roundTo3Places(\n (Math.atan2(row[0][1], row[0][0]) * 180) / Math.PI,\n ),\n ];\n } else {\n rotationDegrees = MatrixMath.quaternionToDegreesXYZ(\n quaternion,\n matrix,\n row,\n );\n }\n\n // expose both base data and convenience names\n return {\n rotationDegrees,\n perspective,\n quaternion,\n scale,\n skew,\n translation,\n\n rotate: rotationDegrees[2],\n rotateX: rotationDegrees[0],\n rotateY: rotationDegrees[1],\n scaleX: scale[0],\n scaleY: scale[1],\n translateX: translation[0],\n translateY: translation[1],\n };\n },\n};\n\nmodule.exports = MatrixMath;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport {createViewConfig} from './ViewConfig';\nimport UIManager from '../ReactNative/UIManager';\nimport type {\n HostComponent,\n PartialViewConfig,\n} from '../Renderer/shims/ReactNativeTypes';\nimport ReactNativeViewConfigRegistry from '../Renderer/shims/ReactNativeViewConfigRegistry';\nimport getNativeComponentAttributes from '../ReactNative/getNativeComponentAttributes';\nimport verifyComponentAttributeEquivalence from '../Utilities/verifyComponentAttributeEquivalence';\nimport invariant from 'invariant';\nimport * as React from 'react';\n\nlet getRuntimeConfig;\n\nlet componentNameToExists: Map = new Map();\n\n/**\n * Configures a function that is called to determine whether a given component\n * should be registered using reflection of the native component at runtime.\n *\n * The provider should return null if the native component is unavailable in\n * the current environment.\n */\nexport function setRuntimeConfigProvider(\n runtimeConfigProvider: (\n name: string,\n ) => ?{\n native: boolean,\n verify: boolean,\n },\n): void {\n invariant(\n getRuntimeConfig == null,\n 'NativeComponentRegistry.setRuntimeConfigProvider() called more than once.',\n );\n getRuntimeConfig = runtimeConfigProvider;\n}\n\n/**\n * Gets a `NativeComponent` that can be rendered by React Native.\n *\n * The supplied `viewConfigProvider` may or may not be invoked and utilized,\n * depending on how `setRuntimeConfigProvider` is configured.\n */\nexport function get(\n name: string,\n viewConfigProvider: () => PartialViewConfig,\n): HostComponent {\n ReactNativeViewConfigRegistry.register(name, () => {\n const {native, verify} = getRuntimeConfig?.(name) ?? {\n native: true,\n verify: false,\n };\n\n const viewConfig = native\n ? getNativeComponentAttributes(name)\n : createViewConfig(viewConfigProvider());\n\n if (verify) {\n if (native) {\n verifyComponentAttributeEquivalence(\n viewConfig,\n createViewConfig(viewConfigProvider()),\n );\n } else {\n verifyComponentAttributeEquivalence(\n getNativeComponentAttributes(name),\n viewConfig,\n );\n }\n }\n\n return viewConfig;\n });\n\n // $FlowFixMe[incompatible-return] `NativeComponent` is actually string!\n return name;\n}\n\n/**\n * Same as `NativeComponentRegistry.get(...)`, except this will check either\n * the `setRuntimeConfigProvider` configuration or use native reflection (slow)\n * to determine whether this native component is available.\n *\n * If the native component is not available, a stub component is returned. Note\n * that the return value of this is not `HostComponent` because the returned\n * component instance is not guaranteed to have native methods.\n */\nexport function getWithFallback_DEPRECATED(\n name: string,\n viewConfigProvider: () => PartialViewConfig,\n): React.AbstractComponent {\n if (getRuntimeConfig == null) {\n // If `setRuntimeConfigProvider` is not configured, use native reflection.\n if (hasNativeViewConfig(name)) {\n return get(name, viewConfigProvider);\n }\n } else {\n // If there is no runtime config, then the native component is unavailable.\n if (getRuntimeConfig(name) != null) {\n return get(name, viewConfigProvider);\n }\n }\n\n const FallbackNativeComponent = function(props: Config): React.Node {\n return null;\n };\n FallbackNativeComponent.displayName = `Fallback(${name})`;\n return FallbackNativeComponent;\n}\n\nfunction hasNativeViewConfig(name: string): boolean {\n invariant(getRuntimeConfig == null, 'Unexpected invocation!');\n return UIManager.getViewManagerConfig(name) != null;\n}\n\n/**\n * Unstable API. Do not use!\n *\n * This method returns if there is a StaticViewConfig registered for the\n * component name received as a parameter.\n */\nexport function unstable_hasStaticViewConfig(name: string): boolean {\n const {native} = getRuntimeConfig?.(name) ?? {\n native: true,\n };\n return !native;\n}\n\n/**\n * Unstable API. Do not use!\n *\n * This method returns if the component with name received as a parameter\n * is registed in the native platform.\n */\nexport function unstable_hasComponent(name: string): boolean {\n let hasNativeComponent = componentNameToExists.get(name);\n if (hasNativeComponent == null) {\n if (global.__nativeComponentRegistry__hasComponent) {\n hasNativeComponent = global.__nativeComponentRegistry__hasComponent(name);\n componentNameToExists.set(name, hasNativeComponent);\n } else {\n throw `unstable_hasComponent('${name}'): Global function is not registered`;\n }\n }\n return hasNativeComponent;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport ReactNativeViewViewConfig from '../Components/View/ReactNativeViewViewConfig';\nimport type {\n PartialViewConfig,\n ViewConfig,\n} from '../Renderer/shims/ReactNativeTypes';\n\n/**\n * Creates a complete `ViewConfig` from a `PartialViewConfig`.\n */\nexport function createViewConfig(\n partialViewConfig: PartialViewConfig,\n): ViewConfig {\n return {\n uiViewClassName: partialViewConfig.uiViewClassName,\n Commands: {},\n bubblingEventTypes: composeIndexers(\n ReactNativeViewViewConfig.bubblingEventTypes,\n partialViewConfig.bubblingEventTypes,\n ),\n directEventTypes: composeIndexers(\n ReactNativeViewViewConfig.directEventTypes,\n partialViewConfig.directEventTypes,\n ),\n validAttributes: composeIndexers(\n // $FlowFixMe[incompatible-call] `style` property confuses Flow.\n ReactNativeViewViewConfig.validAttributes,\n // $FlowFixMe[incompatible-call] `style` property confuses Flow.\n partialViewConfig.validAttributes,\n ),\n };\n}\n\nfunction composeIndexers(\n maybeA: ?{+[string]: T},\n maybeB: ?{+[string]: T},\n): {+[string]: T} {\n return maybeA == null || maybeB == null\n ? maybeA ?? maybeB ?? {}\n : {...maybeA, ...maybeB};\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport UIManagerInjection from './UIManagerInjection';\nimport type {Spec} from './NativeUIManager';\nimport type {RootTag} from 'react-native/Libraries/Types/RootTagTypes';\n\ninterface UIManagerJSInterface extends Spec {\n +getViewManagerConfig: (viewManagerName: string) => Object;\n +hasViewManagerConfig: (viewManagerName: string) => boolean;\n +createView: (\n reactTag: ?number,\n viewName: string,\n rootTag: RootTag,\n props: Object,\n ) => void;\n +updateView: (reactTag: number, viewName: string, props: Object) => void;\n +manageChildren: (\n containerTag: ?number,\n moveFromIndices: Array,\n moveToIndices: Array,\n addChildReactTags: Array,\n addAtIndices: Array,\n removeAtIndices: Array,\n ) => void;\n}\n\nconst UIManager: UIManagerJSInterface =\n global.RN$Bridgeless === true\n ? require('./DummyUIManager') // No UIManager in bridgeless mode\n : UIManagerInjection.unstable_UIManager == null\n ? require('./PaperUIManager')\n : UIManagerInjection.unstable_UIManager;\n\nmodule.exports = UIManager;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nexport default {\n unstable_UIManager: (null: ?any),\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nimport type {RootTag} from 'react-native/Libraries/Types/RootTagTypes';\n\nmodule.exports = {\n getViewManagerConfig: (viewManagerName: string): mixed => {\n console.warn(\n 'Attempting to get config for view manager: ' + viewManagerName,\n );\n if (viewManagerName === 'RCTVirtualText') {\n return {};\n }\n return null;\n },\n hasViewManagerConfig: (viewManagerName: string): boolean => {\n return (\n viewManagerName === 'RCTVirtualText' ||\n viewManagerName === 'RCTShimmeringView'\n );\n },\n getConstants: (): {...} => ({}),\n getConstantsForViewManager: (viewManagerName: string) => {},\n getDefaultEventTypes: (): Array<$FlowFixMe> => [],\n lazilyLoadView: (name: string) => {},\n createView: (\n reactTag: ?number,\n viewName: string,\n rootTag: RootTag,\n props: Object,\n ) => {},\n updateView: (reactTag: number, viewName: string, props: Object) => {},\n focus: (reactTag: ?number) => {},\n blur: (reactTag: ?number) => {},\n findSubviewIn: (\n reactTag: ?number,\n point: Array,\n callback: (\n nativeViewTag: number,\n left: number,\n top: number,\n width: number,\n height: number,\n ) => void,\n ) => {},\n dispatchViewManagerCommand: (\n reactTag: ?number,\n commandID: number,\n commandArgs: ?Array,\n ) => {},\n measure: (\n reactTag: ?number,\n callback: (\n left: number,\n top: number,\n width: number,\n height: number,\n pageX: number,\n pageY: number,\n ) => void,\n ) => {},\n measureInWindow: (\n reactTag: ?number,\n callback: (x: number, y: number, width: number, height: number) => void,\n ) => {},\n viewIsDescendantOf: (\n reactTag: ?number,\n ancestorReactTag: ?number,\n callback: (result: Array) => void,\n ) => {},\n measureLayout: (\n reactTag: ?number,\n ancestorReactTag: ?number,\n errorCallback: (error: Object) => void,\n callback: (\n left: number,\n top: number,\n width: number,\n height: number,\n ) => void,\n ) => {},\n measureLayoutRelativeToParent: (\n reactTag: ?number,\n errorCallback: (error: Object) => void,\n callback: (\n left: number,\n top: number,\n width: number,\n height: number,\n ) => void,\n ) => {},\n setJSResponder: (reactTag: ?number, blockNativeResponder: boolean) => {},\n clearJSResponder: () => {},\n configureNextLayoutAnimation: (\n config: Object,\n callback: () => void,\n errorCallback: (error: Object) => void,\n ) => {},\n removeSubviewsFromContainerWithID: (containerID: number) => {},\n replaceExistingNonRootView: (reactTag: ?number, newReactTag: ?number) => {},\n setChildren: (containerTag: ?number, reactTags: Array) => {},\n manageChildren: (\n containerTag: ?number,\n moveFromIndices: Array,\n moveToIndices: Array,\n addChildReactTags: Array,\n addAtIndices: Array,\n removeAtIndices: Array,\n ) => {},\n\n // Android only\n setLayoutAnimationEnabledExperimental: (enabled: boolean) => {},\n sendAccessibilityEvent: (reactTag: ?number, eventType: number) => {},\n showPopupMenu: (\n reactTag: ?number,\n items: Array,\n error: (error: Object) => void,\n success: (event: string, selected?: number) => void,\n ) => {},\n dismissPopupMenu: () => {},\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nconst NativeModules = require('../BatchedBridge/NativeModules');\nconst Platform = require('../Utilities/Platform');\nconst UIManagerProperties = require('./UIManagerProperties');\n\nconst defineLazyObjectProperty = require('../Utilities/defineLazyObjectProperty');\n\nimport NativeUIManager from './NativeUIManager';\nimport type {RootTag} from 'react-native/Libraries/Types/RootTagTypes';\n\nconst viewManagerConfigs = {};\n\nconst triedLoadingConfig = new Set();\n\nlet NativeUIManagerConstants = {};\nlet isNativeUIManagerConstantsSet = false;\nfunction getConstants(): Object {\n if (!isNativeUIManagerConstantsSet) {\n NativeUIManagerConstants = NativeUIManager.getConstants();\n isNativeUIManagerConstantsSet = true;\n }\n return NativeUIManagerConstants;\n}\n\nfunction getViewManagerConfig(viewManagerName: string): any {\n if (\n viewManagerConfigs[viewManagerName] === undefined &&\n global.nativeCallSyncHook && // If we're in the Chrome Debugger, let's not even try calling the sync method\n NativeUIManager.getConstantsForViewManager\n ) {\n try {\n viewManagerConfigs[\n viewManagerName\n ] = NativeUIManager.getConstantsForViewManager(viewManagerName);\n } catch (e) {\n console.error(\n \"NativeUIManager.getConstantsForViewManager('\" +\n viewManagerName +\n \"') threw an exception.\",\n e,\n );\n viewManagerConfigs[viewManagerName] = null;\n }\n }\n\n const config = viewManagerConfigs[viewManagerName];\n if (config) {\n return config;\n }\n\n // If we're in the Chrome Debugger, let's not even try calling the sync\n // method.\n if (!global.nativeCallSyncHook) {\n return config;\n }\n\n if (\n NativeUIManager.lazilyLoadView &&\n !triedLoadingConfig.has(viewManagerName)\n ) {\n const result = NativeUIManager.lazilyLoadView(viewManagerName);\n triedLoadingConfig.add(viewManagerName);\n if (result != null && result.viewConfig != null) {\n getConstants()[viewManagerName] = result.viewConfig;\n lazifyViewManagerConfig(viewManagerName);\n }\n }\n\n return viewManagerConfigs[viewManagerName];\n}\n\n/* $FlowFixMe[cannot-spread-interface] (>=0.123.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.123.0 was deployed. To see\n * the error, delete this comment and run Flow. */\nconst UIManagerJS = {\n ...NativeUIManager,\n createView(\n reactTag: ?number,\n viewName: string,\n rootTag: RootTag,\n props: Object,\n ): void {\n if (Platform.OS === 'ios' && viewManagerConfigs[viewName] === undefined) {\n // This is necessary to force the initialization of native viewManager\n // classes in iOS when using static ViewConfigs\n getViewManagerConfig(viewName);\n }\n\n NativeUIManager.createView(reactTag, viewName, rootTag, props);\n },\n getConstants(): Object {\n return getConstants();\n },\n getViewManagerConfig(viewManagerName: string): any {\n return getViewManagerConfig(viewManagerName);\n },\n hasViewManagerConfig(viewManagerName: string): boolean {\n return getViewManagerConfig(viewManagerName) != null;\n },\n};\n\n// TODO (T45220498): Remove this.\n// 3rd party libs may be calling `NativeModules.UIManager.getViewManagerConfig()`\n// instead of `UIManager.getViewManagerConfig()` off UIManager.js.\n// This is a workaround for now.\n// $FlowFixMe[prop-missing]\nNativeUIManager.getViewManagerConfig = UIManagerJS.getViewManagerConfig;\n\nfunction lazifyViewManagerConfig(viewName) {\n const viewConfig = getConstants()[viewName];\n viewManagerConfigs[viewName] = viewConfig;\n if (viewConfig.Manager) {\n defineLazyObjectProperty(viewConfig, 'Constants', {\n get: () => {\n const viewManager = NativeModules[viewConfig.Manager];\n const constants = {};\n viewManager &&\n Object.keys(viewManager).forEach(key => {\n const value = viewManager[key];\n if (typeof value !== 'function') {\n constants[key] = value;\n }\n });\n return constants;\n },\n });\n defineLazyObjectProperty(viewConfig, 'Commands', {\n get: () => {\n const viewManager = NativeModules[viewConfig.Manager];\n const commands = {};\n let index = 0;\n viewManager &&\n Object.keys(viewManager).forEach(key => {\n const value = viewManager[key];\n if (typeof value === 'function') {\n commands[key] = index++;\n }\n });\n return commands;\n },\n });\n }\n}\n\n/**\n * Copies the ViewManager constants and commands into UIManager. This is\n * only needed for iOS, which puts the constants in the ViewManager\n * namespace instead of UIManager, unlike Android.\n */\nif (Platform.OS === 'ios') {\n Object.keys(getConstants()).forEach(viewName => {\n lazifyViewManagerConfig(viewName);\n });\n} else if (getConstants().ViewManagerNames) {\n NativeUIManager.getConstants().ViewManagerNames.forEach(viewManagerName => {\n defineLazyObjectProperty(NativeUIManager, viewManagerName, {\n get: () => NativeUIManager.getConstantsForViewManager(viewManagerName),\n });\n });\n}\n\nif (!global.nativeCallSyncHook) {\n Object.keys(getConstants()).forEach(viewManagerName => {\n if (!UIManagerProperties.includes(viewManagerName)) {\n if (!viewManagerConfigs[viewManagerName]) {\n viewManagerConfigs[viewManagerName] = getConstants()[viewManagerName];\n }\n defineLazyObjectProperty(NativeUIManager, viewManagerName, {\n get: () => {\n console.warn(\n `Accessing view manager configs directly off UIManager via UIManager['${viewManagerName}'] ` +\n `is no longer supported. Use UIManager.getViewManagerConfig('${viewManagerName}') instead.`,\n );\n\n return UIManagerJS.getViewManagerConfig(viewManagerName);\n },\n });\n }\n });\n}\n\nmodule.exports = UIManagerJS;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {RootTag} from '../TurboModule/RCTExport';\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => Object;\n +getConstantsForViewManager: (viewManagerName: string) => Object;\n +getDefaultEventTypes: () => Array;\n +lazilyLoadView: (name: string) => Object; // revisit return\n +createView: (\n reactTag: ?number,\n viewName: string,\n rootTag: RootTag,\n props: Object,\n ) => void;\n +updateView: (reactTag: number, viewName: string, props: Object) => void;\n +focus: (reactTag: ?number) => void;\n +blur: (reactTag: ?number) => void;\n +findSubviewIn: (\n reactTag: ?number,\n point: Array,\n callback: (\n nativeViewTag: number,\n left: number,\n top: number,\n width: number,\n height: number,\n ) => void,\n ) => void;\n +dispatchViewManagerCommand: (\n reactTag: ?number,\n commandID: number,\n commandArgs: ?Array,\n ) => void;\n +measure: (\n reactTag: ?number,\n callback: (\n left: number,\n top: number,\n width: number,\n height: number,\n pageX: number,\n pageY: number,\n ) => void,\n ) => void;\n +measureInWindow: (\n reactTag: ?number,\n callback: (x: number, y: number, width: number, height: number) => void,\n ) => void;\n +viewIsDescendantOf: (\n reactTag: ?number,\n ancestorReactTag: ?number,\n callback: (result: Array) => void,\n ) => void;\n +measureLayout: (\n reactTag: ?number,\n ancestorReactTag: ?number,\n errorCallback: (error: Object) => void,\n callback: (\n left: number,\n top: number,\n width: number,\n height: number,\n ) => void,\n ) => void;\n +measureLayoutRelativeToParent: (\n reactTag: ?number,\n errorCallback: (error: Object) => void,\n callback: (\n left: number,\n top: number,\n width: number,\n height: number,\n ) => void,\n ) => void;\n +setJSResponder: (reactTag: ?number, blockNativeResponder: boolean) => void;\n +clearJSResponder: () => void;\n +configureNextLayoutAnimation: (\n config: Object,\n callback: () => void, // check what is returned here\n errorCallback: (error: Object) => void,\n ) => void;\n +removeSubviewsFromContainerWithID: (containerID: number) => void;\n +replaceExistingNonRootView: (\n reactTag: ?number,\n newReactTag: ?number,\n ) => void;\n +setChildren: (containerTag: ?number, reactTags: Array) => void;\n +manageChildren: (\n containerTag: ?number,\n moveFromIndices: Array,\n moveToIndices: Array,\n addChildReactTags: Array,\n addAtIndices: Array,\n removeAtIndices: Array,\n ) => void;\n\n // Android only\n +setLayoutAnimationEnabledExperimental: (enabled: boolean) => void;\n +sendAccessibilityEvent: (reactTag: ?number, eventType: number) => void;\n +showPopupMenu: (\n reactTag: ?number,\n items: Array,\n error: (error: Object) => void,\n success: (event: string, selected?: number) => void,\n ) => void;\n +dismissPopupMenu: () => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing('UIManager'): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\n/**\n * The list of non-ViewManager related UIManager properties.\n *\n * In an effort to improve startup performance by lazily loading view managers,\n * the interface to access view managers will change from\n * UIManager['viewManagerName'] to UIManager.getViewManagerConfig('viewManagerName').\n * By using a function call instead of a property access, the UIManager will\n * be able to initialize and load the required view manager from native\n * synchronously. All of React Native's core components have been updated to\n * use getViewManagerConfig(). For the next few releases, any usage of\n * UIManager['viewManagerName'] will result in a warning. Because React Native\n * does not support Proxy objects, a view manager access is implied if any of\n * UIManager's properties that are not one of the properties below is being\n * accessed. Once UIManager property accesses for view managers has been fully\n * deprecated, this file will also be removed.\n */\nmodule.exports = [\n 'clearJSResponder',\n 'configureNextLayoutAnimation',\n 'createView',\n 'dismissPopupMenu',\n 'dispatchViewManagerCommand',\n 'findSubviewIn',\n 'getConstantsForViewManager',\n 'getDefaultEventTypes',\n 'manageChildren',\n 'measure',\n 'measureInWindow',\n 'measureLayout',\n 'measureLayoutRelativeToParent',\n 'removeRootView',\n 'removeSubviewsFromContainerWithID',\n 'replaceExistingNonRootView',\n 'sendAccessibilityEvent',\n 'setChildren',\n 'setJSResponder',\n 'setLayoutAnimationEnabledExperimental',\n 'showPopupMenu',\n 'updateView',\n 'viewIsDescendantOf',\n 'PopupMenu',\n 'LazyViewManagersEnabled',\n 'ViewManagerNames',\n 'StyleConstants',\n 'AccessibilityEventTypes',\n 'UIView',\n 'getViewManagerConfig',\n 'hasViewManagerConfig',\n 'blur',\n 'focus',\n 'genericBubblingEventTypes',\n 'genericDirectEventTypes',\n 'lazilyLoadView',\n];\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst ReactNativeStyleAttributes = require('../Components/View/ReactNativeStyleAttributes');\nconst UIManager = require('./UIManager');\n\nconst insetsDiffer = require('../Utilities/differ/insetsDiffer');\nconst invariant = require('invariant');\nconst matricesDiffer = require('../Utilities/differ/matricesDiffer');\nconst pointsDiffer = require('../Utilities/differ/pointsDiffer');\nconst processColor = require('../StyleSheet/processColor');\nconst processColorArray = require('../StyleSheet/processColorArray');\nconst resolveAssetSource = require('../Image/resolveAssetSource');\nconst sizesDiffer = require('../Utilities/differ/sizesDiffer');\n\nfunction getNativeComponentAttributes(uiViewClassName: string): any {\n const viewConfig = UIManager.getViewManagerConfig(uiViewClassName);\n\n invariant(\n viewConfig != null && viewConfig.NativeProps != null,\n 'requireNativeComponent: \"%s\" was not found in the UIManager.',\n uiViewClassName,\n );\n\n // TODO: This seems like a whole lot of runtime initialization for every\n // native component that can be either avoided or simplified.\n let {baseModuleName, bubblingEventTypes, directEventTypes} = viewConfig;\n let nativeProps = viewConfig.NativeProps;\n while (baseModuleName) {\n const baseModule = UIManager.getViewManagerConfig(baseModuleName);\n if (!baseModule) {\n baseModuleName = null;\n } else {\n bubblingEventTypes = {\n ...baseModule.bubblingEventTypes,\n ...bubblingEventTypes,\n };\n directEventTypes = {\n ...baseModule.directEventTypes,\n ...directEventTypes,\n };\n nativeProps = {\n ...baseModule.NativeProps,\n ...nativeProps,\n };\n baseModuleName = baseModule.baseModuleName;\n }\n }\n\n const validAttributes = {};\n\n for (const key in nativeProps) {\n const typeName = nativeProps[key];\n const diff = getDifferForType(typeName);\n const process = getProcessorForType(typeName);\n\n validAttributes[key] =\n diff == null && process == null ? true : {diff, process};\n }\n\n // Unfortunately, the current setup declares style properties as top-level\n // props. This makes it so we allow style properties in the `style` prop.\n // TODO: Move style properties into a `style` prop and disallow them as\n // top-level props on the native side.\n validAttributes.style = ReactNativeStyleAttributes;\n\n Object.assign(viewConfig, {\n uiViewClassName,\n validAttributes,\n bubblingEventTypes,\n directEventTypes,\n });\n\n if (!hasAttachedDefaultEventTypes) {\n attachDefaultEventTypes(viewConfig);\n hasAttachedDefaultEventTypes = true;\n }\n\n return viewConfig;\n}\n\n// TODO: Figure out how this makes sense. We're using a global boolean to only\n// initialize this on the first eagerly initialized native component.\nlet hasAttachedDefaultEventTypes = false;\nfunction attachDefaultEventTypes(viewConfig: any) {\n // This is supported on UIManager platforms (ex: Android),\n // as lazy view managers are not implemented for all platforms.\n // See [UIManager] for details on constants and implementations.\n const constants = UIManager.getConstants();\n if (constants.ViewManagerNames || constants.LazyViewManagersEnabled) {\n // Lazy view managers enabled.\n viewConfig = merge(viewConfig, UIManager.getDefaultEventTypes());\n } else {\n viewConfig.bubblingEventTypes = merge(\n viewConfig.bubblingEventTypes,\n constants.genericBubblingEventTypes,\n );\n viewConfig.directEventTypes = merge(\n viewConfig.directEventTypes,\n constants.genericDirectEventTypes,\n );\n }\n}\n\n// TODO: Figure out how to avoid all this runtime initialization cost.\nfunction merge(destination: ?Object, source: ?Object): ?Object {\n if (!source) {\n return destination;\n }\n if (!destination) {\n return source;\n }\n\n for (const key in source) {\n if (!source.hasOwnProperty(key)) {\n continue;\n }\n\n let sourceValue = source[key];\n if (destination.hasOwnProperty(key)) {\n const destinationValue = destination[key];\n if (\n typeof sourceValue === 'object' &&\n typeof destinationValue === 'object'\n ) {\n sourceValue = merge(destinationValue, sourceValue);\n }\n }\n destination[key] = sourceValue;\n }\n return destination;\n}\n\nfunction getDifferForType(\n typeName: string,\n): ?(prevProp: any, nextProp: any) => boolean {\n switch (typeName) {\n // iOS Types\n case 'CATransform3D':\n return matricesDiffer;\n case 'CGPoint':\n return pointsDiffer;\n case 'CGSize':\n return sizesDiffer;\n case 'UIEdgeInsets':\n return insetsDiffer;\n // Android Types\n case 'Point':\n return pointsDiffer;\n }\n return null;\n}\n\nfunction getProcessorForType(typeName: string): ?(nextProp: any) => any {\n switch (typeName) {\n // iOS Types\n case 'CGColor':\n case 'UIColor':\n return processColor;\n case 'CGColorArray':\n case 'UIColorArray':\n return processColorArray;\n case 'CGImage':\n case 'UIImage':\n case 'RCTImageSource':\n return resolveAssetSource;\n // Android Types\n case 'Color':\n return processColor;\n case 'ColorArray':\n return processColorArray;\n }\n return null;\n}\n\nmodule.exports = getNativeComponentAttributes;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format strict-local\n * @flow\n */\n\nimport type {AnyAttributeType} from '../../Renderer/shims/ReactNativeTypes';\nimport processColor from '../../StyleSheet/processColor';\nimport processTransform from '../../StyleSheet/processTransform';\nimport sizesDiffer from '../../Utilities/differ/sizesDiffer';\n\nconst colorAttributes = {process: processColor};\n\nconst ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {\n /**\n * Layout\n */\n alignContent: true,\n alignItems: true,\n alignSelf: true,\n aspectRatio: true,\n borderBottomWidth: true,\n borderEndWidth: true,\n borderLeftWidth: true,\n borderRightWidth: true,\n borderStartWidth: true,\n borderTopWidth: true,\n borderWidth: true,\n bottom: true,\n direction: true,\n display: true,\n end: true,\n flex: true,\n flexBasis: true,\n flexDirection: true,\n flexGrow: true,\n flexShrink: true,\n flexWrap: true,\n height: true,\n justifyContent: true,\n left: true,\n margin: true,\n marginBottom: true,\n marginEnd: true,\n marginHorizontal: true,\n marginLeft: true,\n marginRight: true,\n marginStart: true,\n marginTop: true,\n marginVertical: true,\n maxHeight: true,\n maxWidth: true,\n minHeight: true,\n minWidth: true,\n overflow: true,\n padding: true,\n paddingBottom: true,\n paddingEnd: true,\n paddingHorizontal: true,\n paddingLeft: true,\n paddingRight: true,\n paddingStart: true,\n paddingTop: true,\n paddingVertical: true,\n position: true,\n right: true,\n start: true,\n top: true,\n width: true,\n zIndex: true,\n\n /**\n * Shadow\n */\n elevation: true,\n shadowColor: colorAttributes,\n shadowOffset: {diff: sizesDiffer},\n shadowOpacity: true,\n shadowRadius: true,\n\n /**\n * Transform\n */\n decomposedMatrix: true, // @deprecated\n rotation: true, // @deprecated\n scaleX: true, // @deprecated\n scaleY: true, // @deprecated\n transform: {process: processTransform},\n transformMatrix: true, // @deprecated\n translateX: true, // @deprecated\n translateY: true, // @deprecated\n\n /**\n * View\n */\n backfaceVisibility: true,\n backgroundColor: colorAttributes,\n borderBottomColor: colorAttributes,\n borderBottomEndRadius: true,\n borderBottomLeftRadius: true,\n borderBottomRightRadius: true,\n borderBottomStartRadius: true,\n borderColor: colorAttributes,\n borderEndColor: colorAttributes,\n borderLeftColor: colorAttributes,\n borderRadius: true,\n borderRightColor: colorAttributes,\n borderStartColor: colorAttributes,\n borderStyle: true,\n borderTopColor: colorAttributes,\n borderTopEndRadius: true,\n borderTopLeftRadius: true,\n borderTopRightRadius: true,\n borderTopStartRadius: true,\n opacity: true,\n\n /**\n * Text\n */\n color: colorAttributes,\n fontFamily: true,\n fontSize: true,\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n includeFontPadding: true,\n letterSpacing: true,\n lineHeight: true,\n textAlign: true,\n textAlignVertical: true,\n textDecorationColor: colorAttributes,\n textDecorationLine: true,\n textDecorationStyle: true,\n textShadowColor: colorAttributes,\n textShadowOffset: true,\n textShadowRadius: true,\n textTransform: true,\n writingDirection: true,\n\n /**\n * Image\n */\n overlayColor: colorAttributes,\n resizeMode: true,\n tintColor: colorAttributes,\n};\n\nmodule.exports = ReactNativeStyleAttributes;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\ntype Point = {\n x: ?number,\n y: ?number,\n ...\n};\n\nconst dummyPoint = {x: undefined, y: undefined};\n\nconst pointsDiffer = function(one: ?Point, two: ?Point): boolean {\n one = one || dummyPoint;\n two = two || dummyPoint;\n return one !== two && (one.x !== two.x || one.y !== two.y);\n};\n\nmodule.exports = pointsDiffer;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nimport type {ColorValue} from './StyleSheet';\nimport processColor, {type ProcessedColorValue} from './processColor';\n\nconst TRANSPARENT = 0; // rgba(0, 0, 0, 0)\n\nfunction processColorArray(\n colors: ?$ReadOnlyArray,\n): ?$ReadOnlyArray {\n return colors == null ? null : colors.map(processColorElement);\n}\n\nfunction processColorElement(color: ColorValue): ProcessedColorValue {\n const value = processColor(color);\n // For invalid colors, fallback to transparent.\n if (value == null) {\n console.error('Invalid value in color array:', color);\n return TRANSPARENT;\n }\n return value;\n}\n\nmodule.exports = processColorArray;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n// Resolves an asset into a `source` for `Image`.\n\n'use strict';\n\nconst AssetRegistry = require('@react-native/assets/registry');\nconst AssetSourceResolver = require('./AssetSourceResolver');\nconst {pickScale} = require('./AssetUtils');\n\nimport type {ResolvedAssetSource} from './AssetSourceResolver';\n\nlet _customSourceTransformer, _serverURL, _scriptURL;\n\nlet _sourceCodeScriptURL: ?string;\nfunction getSourceCodeScriptURL(): ?string {\n if (_sourceCodeScriptURL) {\n return _sourceCodeScriptURL;\n }\n\n let sourceCode =\n global.nativeExtensions && global.nativeExtensions.SourceCode;\n if (!sourceCode) {\n sourceCode = require('../NativeModules/specs/NativeSourceCode').default;\n }\n _sourceCodeScriptURL = sourceCode.getConstants().scriptURL;\n return _sourceCodeScriptURL;\n}\n\nfunction getDevServerURL(): ?string {\n if (_serverURL === undefined) {\n const sourceCodeScriptURL = getSourceCodeScriptURL();\n const match =\n sourceCodeScriptURL && sourceCodeScriptURL.match(/^https?:\\/\\/.*?\\//);\n if (match) {\n // jsBundle was loaded from network\n _serverURL = match[0];\n } else {\n // jsBundle was loaded from file\n _serverURL = null;\n }\n }\n return _serverURL;\n}\n\nfunction _coerceLocalScriptURL(scriptURL: ?string): ?string {\n if (scriptURL) {\n if (scriptURL.startsWith('assets://')) {\n // android: running from within assets, no offline path to use\n return null;\n }\n scriptURL = scriptURL.substring(0, scriptURL.lastIndexOf('/') + 1);\n if (!scriptURL.includes('://')) {\n // Add file protocol in case we have an absolute file path and not a URL.\n // This shouldn't really be necessary. scriptURL should be a URL.\n scriptURL = 'file://' + scriptURL;\n }\n }\n return scriptURL;\n}\n\nfunction getScriptURL(): ?string {\n if (_scriptURL === undefined) {\n _scriptURL = _coerceLocalScriptURL(getSourceCodeScriptURL());\n }\n return _scriptURL;\n}\n\nfunction setCustomSourceTransformer(\n transformer: (resolver: AssetSourceResolver) => ResolvedAssetSource,\n): void {\n _customSourceTransformer = transformer;\n}\n\n/**\n * `source` is either a number (opaque type returned by require('./foo.png'))\n * or an `ImageSource` like { uri: '' }\n */\nfunction resolveAssetSource(source: any): ?ResolvedAssetSource {\n if (typeof source === 'object') {\n return source;\n }\n\n const asset = AssetRegistry.getAssetByID(source);\n if (!asset) {\n return null;\n }\n\n const resolver = new AssetSourceResolver(\n getDevServerURL(),\n getScriptURL(),\n asset,\n );\n if (_customSourceTransformer) {\n return _customSourceTransformer(resolver);\n }\n return resolver.defaultAsset();\n}\n\nmodule.exports = resolveAssetSource;\nmodule.exports.pickScale = pickScale;\nmodule.exports.setCustomSourceTransformer = setCustomSourceTransformer;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nexport type PackagerAsset = {\n +__packager_asset: boolean,\n +fileSystemLocation: string,\n +httpServerLocation: string,\n +width: ?number,\n +height: ?number,\n +scales: Array,\n +hash: string,\n +name: string,\n +type: string,\n ...\n};\n\nconst assets: Array = [];\n\nfunction registerAsset(asset: PackagerAsset): number {\n // `push` returns new array length, so the first asset will\n // get id 1 (not 0) to make the value truthy\n return assets.push(asset);\n}\n\nfunction getAssetByID(assetId: number): PackagerAsset {\n return assets[assetId - 1];\n}\n\nmodule.exports = {registerAsset, getAssetByID};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nexport type ResolvedAssetSource = {|\n +__packager_asset: boolean,\n +width: ?number,\n +height: ?number,\n +uri: string,\n +scale: number,\n|};\n\nimport type {PackagerAsset} from '@react-native/assets/registry';\n\nconst PixelRatio = require('../Utilities/PixelRatio');\nconst {pickScale} = require('./AssetUtils');\nconst Platform = require('../Utilities/Platform');\n\nconst invariant = require('invariant');\n\nconst {\n getAndroidResourceFolderName,\n getAndroidResourceIdentifier,\n getBasePath,\n} = require('@react-native/assets/path-support');\n\n/**\n * Returns a path like 'assets/AwesomeModule/icon@2x.png'\n */\nfunction getScaledAssetPath(asset): string {\n const scale = pickScale(asset.scales, PixelRatio.get());\n const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';\n const assetDir = getBasePath(asset);\n return assetDir + '/' + asset.name + scaleSuffix + '.' + asset.type;\n}\n\n/**\n * Returns a path like 'drawable-mdpi/icon.png'\n */\nfunction getAssetPathInDrawableFolder(asset): string {\n const scale = pickScale(asset.scales, PixelRatio.get());\n const drawbleFolder = getAndroidResourceFolderName(asset, scale);\n const fileName = getAndroidResourceIdentifier(asset);\n return drawbleFolder + '/' + fileName + '.' + asset.type;\n}\n\nclass AssetSourceResolver {\n serverUrl: ?string;\n // where the jsbundle is being run from\n jsbundleUrl: ?string;\n // the asset to resolve\n asset: PackagerAsset;\n\n constructor(serverUrl: ?string, jsbundleUrl: ?string, asset: PackagerAsset) {\n this.serverUrl = serverUrl;\n this.jsbundleUrl = jsbundleUrl;\n this.asset = asset;\n }\n\n isLoadedFromServer(): boolean {\n return !!this.serverUrl;\n }\n\n isLoadedFromFileSystem(): boolean {\n return !!(this.jsbundleUrl && this.jsbundleUrl.startsWith('file://'));\n }\n\n defaultAsset(): ResolvedAssetSource {\n if (this.isLoadedFromServer()) {\n return this.assetServerURL();\n }\n\n if (Platform.OS === 'android') {\n return this.isLoadedFromFileSystem()\n ? this.drawableFolderInBundle()\n : this.resourceIdentifierWithoutScale();\n } else {\n return this.scaledAssetURLNearBundle();\n }\n }\n\n /**\n * Returns an absolute URL which can be used to fetch the asset\n * from the devserver\n */\n assetServerURL(): ResolvedAssetSource {\n invariant(!!this.serverUrl, 'need server to load from');\n return this.fromSource(\n this.serverUrl +\n getScaledAssetPath(this.asset) +\n '?platform=' +\n Platform.OS +\n '&hash=' +\n this.asset.hash,\n );\n }\n\n /**\n * Resolves to just the scaled asset filename\n * E.g. 'assets/AwesomeModule/icon@2x.png'\n */\n scaledAssetPath(): ResolvedAssetSource {\n return this.fromSource(getScaledAssetPath(this.asset));\n }\n\n /**\n * Resolves to where the bundle is running from, with a scaled asset filename\n * E.g. 'file:///sdcard/bundle/assets/AwesomeModule/icon@2x.png'\n */\n scaledAssetURLNearBundle(): ResolvedAssetSource {\n const path = this.jsbundleUrl || 'file://';\n return this.fromSource(\n // Assets can have relative paths outside of the project root.\n // When bundling them we replace `../` with `_` to make sure they\n // don't end up outside of the expected assets directory.\n path + getScaledAssetPath(this.asset).replace(/\\.\\.\\//g, '_'),\n );\n }\n\n /**\n * The default location of assets bundled with the app, located by\n * resource identifier\n * The Android resource system picks the correct scale.\n * E.g. 'assets_awesomemodule_icon'\n */\n resourceIdentifierWithoutScale(): ResolvedAssetSource {\n invariant(\n Platform.OS === 'android',\n 'resource identifiers work on Android',\n );\n return this.fromSource(getAndroidResourceIdentifier(this.asset));\n }\n\n /**\n * If the jsbundle is running from a sideload location, this resolves assets\n * relative to its location\n * E.g. 'file:///sdcard/AwesomeModule/drawable-mdpi/icon.png'\n */\n drawableFolderInBundle(): ResolvedAssetSource {\n const path = this.jsbundleUrl || 'file://';\n return this.fromSource(path + getAssetPathInDrawableFolder(this.asset));\n }\n\n fromSource(source: string): ResolvedAssetSource {\n return {\n __packager_asset: true,\n width: this.asset.width,\n height: this.asset.height,\n uri: source,\n scale: pickScale(this.asset.scales, PixelRatio.get()),\n };\n }\n\n static pickScale: (\n scales: Array,\n deviceScale?: number,\n ) => number = pickScale;\n}\n\nmodule.exports = AssetSourceResolver;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nconst Dimensions = require('./Dimensions');\n\n/**\n * PixelRatio class gives access to the device pixel density.\n *\n * ## Fetching a correctly sized image\n *\n * You should get a higher resolution image if you are on a high pixel density\n * device. A good rule of thumb is to multiply the size of the image you display\n * by the pixel ratio.\n *\n * ```\n * var image = getImage({\n * width: PixelRatio.getPixelSizeForLayoutSize(200),\n * height: PixelRatio.getPixelSizeForLayoutSize(100),\n * });\n * \n * ```\n *\n * ## Pixel grid snapping\n *\n * In iOS, you can specify positions and dimensions for elements with arbitrary\n * precision, for example 29.674825. But, ultimately the physical display only\n * have a fixed number of pixels, for example 640×960 for iPhone 4 or 750×1334\n * for iPhone 6. iOS tries to be as faithful as possible to the user value by\n * spreading one original pixel into multiple ones to trick the eye. The\n * downside of this technique is that it makes the resulting element look\n * blurry.\n *\n * In practice, we found out that developers do not want this feature and they\n * have to work around it by doing manual rounding in order to avoid having\n * blurry elements. In React Native, we are rounding all the pixels\n * automatically.\n *\n * We have to be careful when to do this rounding. You never want to work with\n * rounded and unrounded values at the same time as you're going to accumulate\n * rounding errors. Having even one rounding error is deadly because a one\n * pixel border may vanish or be twice as big.\n *\n * In React Native, everything in JavaScript and within the layout engine works\n * with arbitrary precision numbers. It's only when we set the position and\n * dimensions of the native element on the main thread that we round. Also,\n * rounding is done relative to the root rather than the parent, again to avoid\n * accumulating rounding errors.\n *\n */\nclass PixelRatio {\n /**\n * Returns the device pixel density. Some examples:\n *\n * - PixelRatio.get() === 1\n * - mdpi Android devices (160 dpi)\n * - PixelRatio.get() === 1.5\n * - hdpi Android devices (240 dpi)\n * - PixelRatio.get() === 2\n * - iPhone 4, 4S\n * - iPhone 5, 5c, 5s\n * - iPhone 6\n * - iPhone 7\n * - iPhone 8\n * - iPhone SE\n * - xhdpi Android devices (320 dpi)\n * - PixelRatio.get() === 3\n * - iPhone 6 Plus\n * - iPhone 7 Plus\n * - iPhone 8 Plus\n * - iPhone X\n * - xxhdpi Android devices (480 dpi)\n * - PixelRatio.get() === 3.5\n * - Nexus 6\n */\n static get(): number {\n return Dimensions.get('window').scale;\n }\n\n /**\n * Returns the scaling factor for font sizes. This is the ratio that is used to calculate the\n * absolute font size, so any elements that heavily depend on that should use this to do\n * calculations.\n *\n * If a font scale is not set, this returns the device pixel ratio.\n *\n * This reflects the user preference set in:\n * - Settings > Display > Font size on Android,\n * - Settings > Display & Brightness > Text Size on iOS.\n */\n static getFontScale(): number {\n return Dimensions.get('window').fontScale || PixelRatio.get();\n }\n\n /**\n * Converts a layout size (dp) to pixel size (px).\n *\n * Guaranteed to return an integer number.\n */\n static getPixelSizeForLayoutSize(layoutSize: number): number {\n return Math.round(layoutSize * PixelRatio.get());\n }\n\n /**\n * Rounds a layout size (dp) to the nearest layout size that corresponds to\n * an integer number of pixels. For example, on a device with a PixelRatio\n * of 3, `PixelRatio.roundToNearestPixel(8.4) = 8.33`, which corresponds to\n * exactly (8.33 * 3) = 25 pixels.\n */\n static roundToNearestPixel(layoutSize: number): number {\n const ratio = PixelRatio.get();\n return Math.round(layoutSize * ratio) / ratio;\n }\n\n // No-op for iOS, but used on the web. Should not be documented.\n static startDetecting() {}\n}\n\nmodule.exports = PixelRatio;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport EventEmitter, {\n type EventSubscription,\n} from '../vendor/emitter/EventEmitter';\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\nimport NativeDeviceInfo, {\n type DisplayMetrics,\n type DisplayMetricsAndroid,\n type DimensionsPayload,\n} from './NativeDeviceInfo';\nimport invariant from 'invariant';\n\nconst eventEmitter = new EventEmitter<{\n change: [DimensionsPayload],\n}>();\nlet dimensionsInitialized = false;\nlet dimensions: DimensionsPayload;\n\nclass Dimensions {\n /**\n * NOTE: `useWindowDimensions` is the preferred API for React components.\n *\n * Initial dimensions are set before `runApplication` is called so they should\n * be available before any other require's are run, but may be updated later.\n *\n * Note: Although dimensions are available immediately, they may change (e.g\n * due to device rotation) so any rendering logic or styles that depend on\n * these constants should try to call this function on every render, rather\n * than caching the value (for example, using inline styles rather than\n * setting a value in a `StyleSheet`).\n *\n * Example: `const {height, width} = Dimensions.get('window');`\n *\n * @param {string} dim Name of dimension as defined when calling `set`.\n * @returns {DisplayMetrics? | DisplayMetricsAndroid?} Value for the dimension.\n */\n static get(dim: string): DisplayMetrics | DisplayMetricsAndroid {\n invariant(dimensions[dim], 'No dimension set for key ' + dim);\n return dimensions[dim];\n }\n\n /**\n * This should only be called from native code by sending the\n * didUpdateDimensions event.\n *\n * @param {DimensionsPayload} dims Simple string-keyed object of dimensions to set\n */\n static set(dims: $ReadOnly): void {\n // We calculate the window dimensions in JS so that we don't encounter loss of\n // precision in transferring the dimensions (which could be non-integers) over\n // the bridge.\n let {screen, window} = dims;\n const {windowPhysicalPixels} = dims;\n if (windowPhysicalPixels) {\n window = {\n width: windowPhysicalPixels.width / windowPhysicalPixels.scale,\n height: windowPhysicalPixels.height / windowPhysicalPixels.scale,\n scale: windowPhysicalPixels.scale,\n fontScale: windowPhysicalPixels.fontScale,\n };\n }\n const {screenPhysicalPixels} = dims;\n if (screenPhysicalPixels) {\n screen = {\n width: screenPhysicalPixels.width / screenPhysicalPixels.scale,\n height: screenPhysicalPixels.height / screenPhysicalPixels.scale,\n scale: screenPhysicalPixels.scale,\n fontScale: screenPhysicalPixels.fontScale,\n };\n } else if (screen == null) {\n screen = window;\n }\n\n dimensions = {window, screen};\n if (dimensionsInitialized) {\n // Don't fire 'change' the first time the dimensions are set.\n eventEmitter.emit('change', dimensions);\n } else {\n dimensionsInitialized = true;\n }\n }\n\n /**\n * Add an event handler. Supported events:\n *\n * - `change`: Fires when a property within the `Dimensions` object changes. The argument\n * to the event handler is an object with `window` and `screen` properties whose values\n * are the same as the return values of `Dimensions.get('window')` and\n * `Dimensions.get('screen')`, respectively.\n */\n static addEventListener(\n type: 'change',\n handler: Function,\n ): EventSubscription {\n invariant(\n type === 'change',\n 'Trying to subscribe to unknown event: \"%s\"',\n type,\n );\n return eventEmitter.addListener(type, handler);\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addEventListener`.\n */\n static removeEventListener(type: 'change', handler: Function) {\n invariant(\n type === 'change',\n 'Trying to remove listener for unknown event: \"%s\"',\n type,\n );\n // NOTE: This will report a deprecation notice via `console.error`.\n eventEmitter.removeListener(type, handler);\n }\n}\n\nlet initialDims: ?$ReadOnly =\n global.nativeExtensions &&\n global.nativeExtensions.DeviceInfo &&\n global.nativeExtensions.DeviceInfo.Dimensions;\nif (!initialDims) {\n // Subscribe before calling getConstants to make sure we don't miss any updates in between.\n RCTDeviceEventEmitter.addListener(\n 'didUpdateDimensions',\n (update: DimensionsPayload) => {\n Dimensions.set(update);\n },\n );\n initialDims = NativeDeviceInfo.getConstants().Dimensions;\n}\n\nDimensions.set(initialDims);\n\nmodule.exports = Dimensions;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport type DisplayMetricsAndroid = {|\n width: number,\n height: number,\n scale: number,\n fontScale: number,\n densityDpi: number,\n|};\n\nexport type DisplayMetrics = {|\n width: number,\n height: number,\n scale: number,\n fontScale: number,\n|};\n\nexport type DimensionsPayload = {|\n window?: DisplayMetrics,\n screen?: DisplayMetrics,\n windowPhysicalPixels?: DisplayMetricsAndroid,\n screenPhysicalPixels?: DisplayMetricsAndroid,\n|};\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n +Dimensions: DimensionsPayload,\n +isIPhoneX_deprecated?: boolean,\n |};\n}\n\nconst NativeModule: Spec = TurboModuleRegistry.getEnforcing('DeviceInfo');\nlet constants = null;\n\nconst NativeDeviceInfo = {\n getConstants(): {|\n +Dimensions: DimensionsPayload,\n +isIPhoneX_deprecated?: boolean,\n |} {\n if (constants == null) {\n constants = NativeModule.getConstants();\n }\n return constants;\n },\n};\n\nexport default NativeDeviceInfo;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport PixelRatio from '../Utilities/PixelRatio';\n\nlet cacheBreaker;\nlet warnIfCacheBreakerUnset = true;\n\nexport function pickScale(scales: Array, deviceScale?: number): number {\n if (deviceScale == null) {\n deviceScale = PixelRatio.get();\n }\n // Packager guarantees that `scales` array is sorted\n for (let i = 0; i < scales.length; i++) {\n if (scales[i] >= deviceScale) {\n return scales[i];\n }\n }\n\n // If nothing matches, device scale is larger than any available\n // scales, so we return the biggest one. Unless the array is empty,\n // in which case we default to 1\n return scales[scales.length - 1] || 1;\n}\n\nexport function setUrlCacheBreaker(appendage: string) {\n cacheBreaker = appendage;\n}\n\nexport function getUrlCacheBreaker(): string {\n if (cacheBreaker == null) {\n if (__DEV__ && warnIfCacheBreakerUnset) {\n warnIfCacheBreakerUnset = false;\n console.warn(\n 'AssetUtils.getUrlCacheBreaker: Cache breaker value is unset',\n );\n }\n return '';\n }\n return cacheBreaker;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nimport type {PackagerAsset} from './registry.js';\n\nconst androidScaleSuffix = {\n '0.75': 'ldpi',\n '1': 'mdpi',\n '1.5': 'hdpi',\n '2': 'xhdpi',\n '3': 'xxhdpi',\n '4': 'xxxhdpi',\n};\n\n/**\n * FIXME: using number to represent discrete scale numbers is fragile in essence because of\n * floating point numbers imprecision.\n */\nfunction getAndroidAssetSuffix(scale: number): string {\n if (scale.toString() in androidScaleSuffix) {\n return androidScaleSuffix[scale.toString()];\n }\n\n throw new Error('no such scale ' + scale.toString());\n}\n\n// See https://developer.android.com/guide/topics/resources/drawable-resource.html\nconst drawableFileTypes = new Set([\n 'gif',\n 'jpeg',\n 'jpg',\n 'png',\n 'svg',\n 'webp',\n 'xml',\n]);\n\nfunction getAndroidResourceFolderName(\n asset: PackagerAsset,\n scale: number,\n): string | $TEMPORARY$string<'raw'> {\n if (!drawableFileTypes.has(asset.type)) {\n return 'raw';\n }\n const suffix = getAndroidAssetSuffix(scale);\n if (!suffix) {\n throw new Error(\n \"Don't know which android drawable suffix to use for scale: \" +\n scale +\n '\\nAsset: ' +\n JSON.stringify(asset, null, '\\t') +\n '\\nPossible scales are:' +\n JSON.stringify(androidScaleSuffix, null, '\\t'),\n );\n }\n return 'drawable-' + suffix;\n}\n\nfunction getAndroidResourceIdentifier(asset: PackagerAsset): string {\n return (getBasePath(asset) + '/' + asset.name)\n .toLowerCase()\n .replace(/\\//g, '_') // Encode folder structure in file name\n .replace(/([^a-z0-9_])/g, '') // Remove illegal chars\n .replace(/^assets_/, ''); // Remove \"assets_\" prefix\n}\n\nfunction getBasePath(asset: PackagerAsset): string {\n const basePath = asset.httpServerLocation;\n return basePath.startsWith('/') ? basePath.substr(1) : basePath;\n}\n\nmodule.exports = {\n getAndroidResourceFolderName,\n getAndroidResourceIdentifier,\n getBasePath,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n scriptURL: string,\n |};\n}\n\nconst NativeModule = TurboModuleRegistry.getEnforcing('SourceCode');\nlet constants = null;\n\nconst NativeSourceCode = {\n getConstants(): {|\n scriptURL: string,\n |} {\n if (constants == null) {\n constants = NativeModule.getConstants();\n }\n\n return constants;\n },\n};\n\nexport default NativeSourceCode;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport ReactNativeViewViewConfig from '../Components/View/ReactNativeViewViewConfig';\nimport {type ViewConfig} from '../Renderer/shims/ReactNativeTypes';\n\nconst IGNORED_KEYS = ['transform', 'hitSlop'];\n\n/**\n * The purpose of this function is to validate that the view config that\n * native exposes for a given view manager is the same as the view config\n * that is specified for that view manager in JS.\n *\n * In order to improve perf, we want to avoid calling into native to get\n * the view config when each view manager is used. To do this, we are moving\n * the configs to JS. In the future we will use these JS based view configs\n * to codegen the view manager on native to ensure they stay in sync without\n * this runtime check.\n *\n * If this function fails, that likely means a change was made to the native\n * view manager without updating the JS config as well. Ideally you can make\n * that direct change to the JS config. If you don't know what the differences\n * are, the best approach I've found is to create a view that prints\n * the return value of getNativeComponentAttributes, and then copying that\n * text and pasting it back into JS:\n * {JSON.stringify(getNativeComponentAttributes('RCTView'))}\n *\n * This is meant to be a stopgap until the time comes when we only have a\n * single source of truth. I wonder if this message will still be here two\n * years from now...\n */\nexport default function verifyComponentAttributeEquivalence(\n nativeViewConfig: ViewConfig,\n staticViewConfig: ViewConfig,\n) {\n for (const prop of [\n 'validAttributes',\n 'bubblingEventTypes',\n 'directEventTypes',\n ]) {\n const diff = Object.keys(\n lefthandObjectDiff(nativeViewConfig[prop], staticViewConfig[prop]),\n );\n\n if (diff.length > 0) {\n const name =\n staticViewConfig.uiViewClassName ?? nativeViewConfig.uiViewClassName;\n console.error(\n `'${name}' has a view config that does not match native. ` +\n `'${prop}' is missing: ${diff.join(', ')}`,\n );\n }\n }\n}\n\nexport function lefthandObjectDiff(leftObj: Object, rightObj: Object): Object {\n const differentKeys = {};\n\n function compare(leftItem, rightItem, key) {\n if (typeof leftItem !== typeof rightItem && leftItem != null) {\n differentKeys[key] = rightItem;\n return;\n }\n\n if (typeof leftItem === 'object') {\n const objDiff = lefthandObjectDiff(leftItem, rightItem);\n if (Object.keys(objDiff).length > 1) {\n differentKeys[key] = objDiff;\n }\n return;\n }\n\n if (leftItem !== rightItem) {\n differentKeys[key] = rightItem;\n return;\n }\n }\n\n for (const key in leftObj) {\n if (IGNORED_KEYS.includes(key)) {\n continue;\n }\n\n if (!rightObj) {\n differentKeys[key] = {};\n } else if (leftObj.hasOwnProperty(key)) {\n compare(leftObj[key], rightObj[key], key);\n }\n }\n\n return differentKeys;\n}\n\nexport function getConfigWithoutViewProps(\n viewConfig: ViewConfig,\n propName: string,\n): {...} {\n if (!viewConfig[propName]) {\n return {};\n }\n\n return Object.keys(viewConfig[propName])\n .filter(prop => !ReactNativeViewViewConfig[propName][prop])\n .reduce((obj, prop) => {\n obj[prop] = viewConfig[propName][prop];\n return obj;\n }, {});\n}\n\nexport function stringifyViewConfig(viewConfig: any): string {\n return JSON.stringify(\n viewConfig,\n (key, val) => {\n if (typeof val === 'function') {\n return `ƒ ${val.name}`;\n }\n return val;\n },\n 2,\n );\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c;\n\ntype NativeCommands = TextInputNativeCommands;\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['focus', 'blur', 'setTextAndSelection'],\n});\n\nconst SinglelineTextInputNativeComponent: HostComponent = NativeComponentRegistry.get(\n 'RCTSinglelineTextInputView',\n () => RCTTextInputViewConfig,\n);\n\n// flowlint-next-line unclear-type:off\nexport default ((SinglelineTextInputNativeComponent: any): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {PartialViewConfig} from '../../Renderer/shims/ReactNativeTypes';\nimport ReactNativeViewViewConfig from '../../Components/View/ReactNativeViewViewConfig';\n\nconst RCTTextInputViewConfig = {\n uiViewClassName: 'RCTSinglelineTextInputView',\n bubblingEventTypes: {\n topBlur: {\n phasedRegistrationNames: {\n bubbled: 'onBlur',\n captured: 'onBlurCapture',\n },\n },\n topChange: {\n phasedRegistrationNames: {\n bubbled: 'onChange',\n captured: 'onChangeCapture',\n },\n },\n topEndEditing: {\n phasedRegistrationNames: {\n bubbled: 'onEndEditing',\n captured: 'onEndEditingCapture',\n },\n },\n topFocus: {\n phasedRegistrationNames: {\n bubbled: 'onFocus',\n captured: 'onFocusCapture',\n },\n },\n topKeyPress: {\n phasedRegistrationNames: {\n bubbled: 'onKeyPress',\n captured: 'onKeyPressCapture',\n },\n },\n topSubmitEditing: {\n phasedRegistrationNames: {\n bubbled: 'onSubmitEditing',\n captured: 'onSubmitEditingCapture',\n },\n },\n topTouchCancel: {\n phasedRegistrationNames: {\n bubbled: 'onTouchCancel',\n captured: 'onTouchCancelCapture',\n },\n },\n topTouchEnd: {\n phasedRegistrationNames: {\n bubbled: 'onTouchEnd',\n captured: 'onTouchEndCapture',\n },\n },\n\n topTouchMove: {\n phasedRegistrationNames: {\n bubbled: 'onTouchMove',\n captured: 'onTouchMoveCapture',\n },\n },\n },\n directEventTypes: {},\n validAttributes: {\n ...ReactNativeViewViewConfig.validAttributes,\n fontSize: true,\n fontWeight: true,\n fontVariant: true,\n // flowlint-next-line untyped-import:off\n textShadowOffset: {diff: require('../../Utilities/differ/sizesDiffer')},\n allowFontScaling: true,\n fontStyle: true,\n textTransform: true,\n textAlign: true,\n fontFamily: true,\n lineHeight: true,\n isHighlighted: true,\n writingDirection: true,\n textDecorationLine: true,\n textShadowRadius: true,\n letterSpacing: true,\n textDecorationStyle: true,\n textDecorationColor: {process: require('../../StyleSheet/processColor')},\n color: {process: require('../../StyleSheet/processColor')},\n maxFontSizeMultiplier: true,\n textShadowColor: {process: require('../../StyleSheet/processColor')},\n editable: true,\n inputAccessoryViewID: true,\n caretHidden: true,\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: {process: require('../../StyleSheet/processColor')},\n onSelectionChange: true,\n clearButtonMode: true,\n onContentSizeChange: true,\n keyboardType: true,\n selection: true,\n returnKeyType: true,\n blurOnSubmit: true,\n mostRecentEventCount: true,\n onChange: true,\n scrollEnabled: true,\n selectionColor: {process: require('../../StyleSheet/processColor')},\n contextMenuHidden: true,\n secureTextEntry: true,\n onTextInput: true,\n placeholder: true,\n autoCorrect: true,\n onScroll: true,\n multiline: true,\n textContentType: true,\n maxLength: true,\n autoCapitalize: true,\n keyboardAppearance: true,\n passwordRules: true,\n spellCheck: true,\n selectTextOnFocus: true,\n text: true,\n clearTextOnFocus: true,\n },\n};\n\nmodule.exports = (RCTTextInputViewConfig: PartialViewConfig);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nlet logListeners;\n\ntype LogListeners = {|\n +onDifferentFunctionsIgnored: (nameOne: ?string, nameTwo: ?string) => void,\n|};\n\ntype Options = {|+unsafelyIgnoreFunctions?: boolean|};\n\nfunction unstable_setLogListeners(listeners: ?LogListeners) {\n logListeners = listeners;\n}\n\n/*\n * @returns {bool} true if different, false if equal\n */\nconst deepDiffer = function(\n one: any,\n two: any,\n maxDepthOrOptions: Options | number = -1,\n maybeOptions?: Options,\n): boolean {\n const options =\n typeof maxDepthOrOptions === 'number' ? maybeOptions : maxDepthOrOptions;\n const maxDepth =\n typeof maxDepthOrOptions === 'number' ? maxDepthOrOptions : -1;\n if (maxDepth === 0) {\n return true;\n }\n if (one === two) {\n // Short circuit on identical object references instead of traversing them.\n return false;\n }\n if (typeof one === 'function' && typeof two === 'function') {\n // We consider all functions equal unless explicitly configured otherwise\n let unsafelyIgnoreFunctions = options?.unsafelyIgnoreFunctions;\n if (unsafelyIgnoreFunctions == null) {\n if (\n logListeners &&\n logListeners.onDifferentFunctionsIgnored &&\n (!options || !('unsafelyIgnoreFunctions' in options))\n ) {\n logListeners.onDifferentFunctionsIgnored(one.name, two.name);\n }\n unsafelyIgnoreFunctions = true;\n }\n return !unsafelyIgnoreFunctions;\n }\n if (typeof one !== 'object' || one === null) {\n // Primitives can be directly compared\n return one !== two;\n }\n if (typeof two !== 'object' || two === null) {\n // We know they are different because the previous case would have triggered\n // otherwise.\n return true;\n }\n if (one.constructor !== two.constructor) {\n return true;\n }\n if (Array.isArray(one)) {\n // We know two is also an array because the constructors are equal\n const len = one.length;\n if (two.length !== len) {\n return true;\n }\n for (let ii = 0; ii < len; ii++) {\n if (deepDiffer(one[ii], two[ii], maxDepth - 1, options)) {\n return true;\n }\n }\n } else {\n for (const key in one) {\n if (deepDiffer(one[key], two[key], maxDepth - 1, options)) {\n return true;\n }\n }\n for (const twoKey in two) {\n // The only case we haven't checked yet is keys that are in two but aren't\n // in one, which means they are different.\n if (one[twoKey] === undefined && two[twoKey] !== undefined) {\n return true;\n }\n }\n }\n return false;\n};\n\nmodule.exports = deepDiffer;\nmodule.exports.unstable_setLogListeners = unstable_setLogListeners;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nimport type {DangerouslyImpreciseStyleProp} from './StyleSheet';\nimport type {____FlattenStyleProp_Internal} from './StyleSheetTypes';\n\nfunction flattenStyle<+TStyleProp: DangerouslyImpreciseStyleProp>(\n style: ?TStyleProp,\n): ?____FlattenStyleProp_Internal {\n if (style === null || typeof style !== 'object') {\n return undefined;\n }\n\n if (!Array.isArray(style)) {\n return style;\n }\n\n const result = {};\n for (let i = 0, styleLength = style.length; i < styleLength; ++i) {\n const computedStyle = flattenStyle(style[i]);\n if (computedStyle) {\n for (const key in computedStyle) {\n result[key] = computedStyle[key];\n }\n }\n }\n return result;\n}\n\nmodule.exports = flattenStyle;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport {handleException, SyntheticError} from './ExceptionsManager';\n\nimport type {ExtendedError} from './ExtendedError';\n\nexport type CapturedError = {\n +componentStack: string,\n +error: mixed,\n +errorBoundary: ?{...},\n ...\n};\n\nconst ReactFiberErrorDialog = {\n /**\n * Intercept lifecycle errors and ensure they are shown with the correct stack\n * trace within the native redbox component.\n */\n showErrorDialog({componentStack, error: errorValue}: CapturedError): boolean {\n let error: ?ExtendedError;\n\n // Typically, `errorValue` should be an error. However, other values such as\n // strings (or even null) are sometimes thrown.\n if (errorValue instanceof Error) {\n /* $FlowFixMe[class-object-subtyping] added when improving typing for\n * this parameters */\n error = (errorValue: ExtendedError);\n } else if (typeof errorValue === 'string') {\n /* $FlowFixMe[class-object-subtyping] added when improving typing for\n * this parameters */\n error = (new SyntheticError(errorValue): ExtendedError);\n } else {\n /* $FlowFixMe[class-object-subtyping] added when improving typing for\n * this parameters */\n error = (new SyntheticError('Unspecified error'): ExtendedError);\n }\n try {\n error.componentStack = componentStack;\n error.isComponentError = true;\n } catch {\n // Ignored.\n }\n\n handleException(error, false);\n\n // Return false here to prevent ReactFiberErrorLogger default behavior of\n // logging error details to console.error. Calls to console.error are\n // automatically routed to the native redbox controller, which we've already\n // done above by calling ExceptionsManager.\n return false;\n },\n};\n\nexport default ReactFiberErrorDialog;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport NativeAccessibilityManager from './NativeAccessibilityManager';\n\n/**\n * This is a function exposed to the React Renderer that can be used by the\n * pre-Fabric renderer to emit accessibility events to pre-Fabric nodes.\n */\nfunction legacySendAccessibilityEvent(\n reactTag: number,\n eventType: string,\n): void {\n if (eventType === 'focus' && NativeAccessibilityManager) {\n NativeAccessibilityManager.setAccessibilityFocus(reactTag);\n }\n}\n\nmodule.exports = legacySendAccessibilityEvent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getCurrentBoldTextState: (\n onSuccess: (isBoldTextEnabled: boolean) => void,\n onError: (error: Object) => void,\n ) => void;\n +getCurrentGrayscaleState: (\n onSuccess: (isGrayscaleEnabled: boolean) => void,\n onError: (error: Object) => void,\n ) => void;\n +getCurrentInvertColorsState: (\n onSuccess: (isInvertColorsEnabled: boolean) => void,\n onError: (error: Object) => void,\n ) => void;\n +getCurrentReduceMotionState: (\n onSuccess: (isReduceMotionEnabled: boolean) => void,\n onError: (error: Object) => void,\n ) => void;\n +getCurrentReduceTransparencyState: (\n onSuccess: (isReduceTransparencyEnabled: boolean) => void,\n onError: (error: Object) => void,\n ) => void;\n +getCurrentVoiceOverState: (\n onSuccess: (isScreenReaderEnabled: boolean) => void,\n onError: (error: Object) => void,\n ) => void;\n +setAccessibilityContentSizeMultipliers: (JSMultipliers: {|\n +extraSmall?: ?number,\n +small?: ?number,\n +medium?: ?number,\n +large?: ?number,\n +extraLarge?: ?number,\n +extraExtraLarge?: ?number,\n +extraExtraExtraLarge?: ?number,\n +accessibilityMedium?: ?number,\n +accessibilityLarge?: ?number,\n +accessibilityExtraLarge?: ?number,\n +accessibilityExtraExtraLarge?: ?number,\n +accessibilityExtraExtraExtraLarge?: ?number,\n |}) => void;\n +setAccessibilityFocus: (reactTag: number) => void;\n +announceForAccessibility: (announcement: string) => void;\n}\n\nexport default (TurboModuleRegistry.get('AccessibilityManager'): ?Spec);\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/** @license React v0.20.2\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f,g,h,k;if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0))};g=function(a,b){u=setTimeout(a,b)};h=function(){clearTimeout(u)};exports.unstable_shouldYield=function(){return!1};k=exports.unstable_forceFrameRate=function(){}}else{var x=window.setTimeout,y=window.clearTimeout;if(\"undefined\"!==typeof console){var z=\nwindow.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\");\"function\"!==typeof z&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if(\"function\"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +isReduceMotionEnabled: (\n onSuccess: (isReduceMotionEnabled: boolean) => void,\n ) => void;\n +isTouchExplorationEnabled: (\n onSuccess: (isScreenReaderEnabled: boolean) => void,\n ) => void;\n +setAccessibilityFocus: (reactTag: number) => void;\n +announceForAccessibility: (announcement: string) => void;\n +getRecommendedTimeoutMillis?: (\n mSec: number,\n onSuccess: (recommendedTimeoutMillis: number) => void,\n ) => void;\n}\n\nexport default (TurboModuleRegistry.get('AccessibilityInfo'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n * @generate-docs\n */\n\n'use strict';\nimport * as React from 'react';\nimport Platform from '../../Utilities/Platform';\nimport StyleSheet, {type ColorValue} from '../../StyleSheet/StyleSheet';\nimport View from '../View/View';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\nconst PlatformActivityIndicator =\n Platform.OS === 'android'\n ? require('../ProgressBarAndroid/ProgressBarAndroid')\n : require('./ActivityIndicatorViewNativeComponent').default;\n\nconst GRAY = '#999999';\n\ntype IndicatorSize = number | 'small' | 'large';\n\ntype IOSProps = $ReadOnly<{|\n /**\n Whether the indicator should hide when not animating.\n\n @platform ios\n */\n hidesWhenStopped?: ?boolean,\n|}>;\ntype Props = $ReadOnly<{|\n ...ViewProps,\n ...IOSProps,\n\n /**\n \tWhether to show the indicator (`true`) or hide it (`false`).\n */\n animating?: ?boolean,\n\n /**\n The foreground color of the spinner.\n\n @default {@platform android} `null` (system accent default color)\n @default {@platform ios} '#999999'\n */\n color?: ?ColorValue,\n\n /**\n Size of the indicator.\n\n @type enum(`'small'`, `'large'`)\n @type {@platform android} number\n */\n size?: ?IndicatorSize,\n|}>;\n\nconst ActivityIndicator = (\n {\n animating = true,\n color = Platform.OS === 'ios' ? GRAY : null,\n hidesWhenStopped = true,\n onLayout,\n size = 'small',\n style,\n ...restProps\n }: Props,\n forwardedRef?: any,\n) => {\n let sizeStyle;\n let sizeProp;\n\n switch (size) {\n case 'small':\n sizeStyle = styles.sizeSmall;\n sizeProp = 'small';\n break;\n case 'large':\n sizeStyle = styles.sizeLarge;\n sizeProp = 'large';\n break;\n default:\n sizeStyle = {height: size, width: size};\n break;\n }\n\n const nativeProps = {\n animating,\n color,\n hidesWhenStopped,\n ...restProps,\n ref: forwardedRef,\n style: sizeStyle,\n size: sizeProp,\n };\n\n const androidProps = {\n styleAttr: 'Normal',\n indeterminate: true,\n };\n\n return (\n \n {Platform.OS === 'android' ? (\n // $FlowFixMe[prop-missing] Flow doesn't know when this is the android component\n \n ) : (\n /* $FlowFixMe[prop-missing] (>=0.106.0 site=react_native_android_fb) This comment\n * suppresses an error found when Flow v0.106 was deployed. To see the\n * error, delete this comment and run Flow. */\n \n )}\n \n );\n};\n\n/**\n Displays a circular loading indicator.\n\n ```SnackPlayer name=ActivityIndicator%20Function%20Component%20Example\n import React from \"react\";\n import { ActivityIndicator, StyleSheet, Text, View } from \"react-native\";\n\n const App = () => (\n \n \n \n \n \n \n );\n\n const styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: \"center\"\n },\n horizontal: {\n flexDirection: \"row\",\n justifyContent: \"space-around\",\n padding: 10\n }\n });\n export default App;\n ```\n\n ```SnackPlayer name=ActivityIndicator%20Class%20Component%20Example\n import React, { Component } from \"react\";\n import { ActivityIndicator, StyleSheet, Text, View } from \"react-native\";\n\n class App extends Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n }\n\n const styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: \"center\"\n },\n horizontal: {\n flexDirection: \"row\",\n justifyContent: \"space-around\",\n padding: 10\n }\n });\n export default App;\n ```\n*/\n\nconst ActivityIndicatorWithRef: React.AbstractComponent<\n Props,\n HostComponent,\n> = React.forwardRef(ActivityIndicator);\nActivityIndicatorWithRef.displayName = 'ActivityIndicator';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n sizeSmall: {\n width: 20,\n height: 20,\n },\n sizeLarge: {\n width: 36,\n height: 36,\n },\n});\n\nmodule.exports = ActivityIndicatorWithRef;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst PixelRatio = require('../Utilities/PixelRatio');\nconst ReactNativeStyleAttributes = require('../Components/View/ReactNativeStyleAttributes');\n\nconst flatten = require('./flattenStyle');\n\nimport type {\n ____ColorValue_Internal,\n ____Styles_Internal,\n ____DangerouslyImpreciseStyle_Internal,\n ____DangerouslyImpreciseStyleProp_Internal,\n ____ViewStyle_Internal,\n ____ViewStyleProp_Internal,\n ____TextStyle_Internal,\n ____TextStyleProp_Internal,\n ____ImageStyle_Internal,\n ____ImageStyleProp_Internal,\n} from './StyleSheetTypes';\n\n/**\n * This type should be used as the type for anything that is a color. It is\n * most useful when using DynamicColorIOS which can be a string or a dynamic\n * color object.\n *\n * type props = {backgroundColor: ColorValue};\n */\nexport type ColorValue = ____ColorValue_Internal;\n\n/**\n * This type should be used as the type for a prop that is passed through\n * to a 's `style` prop. This ensures call sites of the component\n * can't pass styles that View doesn't support such as `fontSize`.`\n *\n * type Props = {style: ViewStyleProp}\n * const MyComponent = (props: Props) => \n */\nexport type ViewStyleProp = ____ViewStyleProp_Internal;\n\n/**\n * This type should be used as the type for a prop that is passed through\n * to a 's `style` prop. This ensures call sites of the component\n * can't pass styles that Text doesn't support such as `resizeMode`.`\n *\n * type Props = {style: TextStyleProp}\n * const MyComponent = (props: Props) => \n */\nexport type TextStyleProp = ____TextStyleProp_Internal;\n\n/**\n * This type should be used as the type for a prop that is passed through\n * to an 's `style` prop. This ensures call sites of the component\n * can't pass styles that Image doesn't support such as `fontSize`.`\n *\n * type Props = {style: ImageStyleProp}\n * const MyComponent = (props: Props) => \n */\nexport type ImageStyleProp = ____ImageStyleProp_Internal;\n\n/**\n * WARNING: You probably shouldn't be using this type. This type\n * is similar to the ones above except it allows styles that are accepted\n * by all of View, Text, or Image. It is therefore very unsafe to pass this\n * through to an underlying component. Using this is almost always a mistake\n * and using one of the other more restrictive types is likely the right choice.\n */\nexport type DangerouslyImpreciseStyleProp = ____DangerouslyImpreciseStyleProp_Internal;\n\n/**\n * Utility type for getting the values for specific style keys.\n *\n * The following is bad because position is more restrictive than 'string':\n * ```\n * type Props = {position: string};\n * ```\n *\n * You should use the following instead:\n *\n * ```\n * type Props = {position: TypeForStyleKey<'position'>};\n * ```\n *\n * This will correctly give you the type 'absolute' | 'relative'\n */\nexport type TypeForStyleKey<\n +key: $Keys<____DangerouslyImpreciseStyle_Internal>,\n> = $ElementType<____DangerouslyImpreciseStyle_Internal, key>;\n\n/**\n * This type is an object of the different possible style\n * properties that can be specified for View.\n *\n * Note that this isn't a safe way to type a style prop for a component as\n * results from StyleSheet.create return an internal identifier, not\n * an object of styles.\n *\n * If you want to type the style prop of a function,\n * consider using ViewStyleProp.\n *\n * A reasonable usage of this type is for helper functions that return an\n * object of styles to pass to a View that can't be precomputed with\n * StyleSheet.create.\n */\nexport type ViewStyle = ____ViewStyle_Internal;\n\n/**\n * This type is an object of the different possible style\n * properties that can be specified for Text.\n *\n * Note that this isn't a safe way to type a style prop for a component as\n * results from StyleSheet.create return an internal identifier, not\n * an object of styles.\n *\n * If you want to type the style prop of a function,\n * consider using TextStyleProp.\n *\n * A reasonable usage of this type is for helper functions that return an\n * object of styles to pass to a Text that can't be precomputed with\n * StyleSheet.create.\n */\nexport type TextStyle = ____TextStyle_Internal;\n\n/**\n * This type is an object of the different possible style\n * properties that can be specified for Image.\n *\n * Note that this isn't a safe way to type a style prop for a component as\n * results from StyleSheet.create return an internal identifier, not\n * an object of styles.\n *\n * If you want to type the style prop of a function,\n * consider using ImageStyleProp.\n *\n * A reasonable usage of this type is for helper functions that return an\n * object of styles to pass to an Image that can't be precomputed with\n * StyleSheet.create.\n */\nexport type ImageStyle = ____ImageStyle_Internal;\n\n/**\n * WARNING: You probably shouldn't be using this type. This type is an object\n * with all possible style keys and their values. Note that this isn't\n * a safe way to type a style prop for a component as results from\n * StyleSheet.create return an internal identifier, not an object of styles.\n *\n * If you want to type the style prop of a function, consider using\n * ViewStyleProp, TextStyleProp, or ImageStyleProp.\n *\n * This should only be used by very core utilities that operate on an object\n * containing any possible style value.\n */\nexport type DangerouslyImpreciseStyle = ____DangerouslyImpreciseStyle_Internal;\n\nlet hairlineWidth: number = PixelRatio.roundToNearestPixel(0.4);\nif (hairlineWidth === 0) {\n hairlineWidth = 1 / PixelRatio.get();\n}\n\nconst absoluteFill = {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n};\nif (__DEV__) {\n Object.freeze(absoluteFill);\n}\n\n/**\n * A StyleSheet is an abstraction similar to CSS StyleSheets\n *\n * Create a new StyleSheet:\n *\n * ```\n * const styles = StyleSheet.create({\n * container: {\n * borderRadius: 4,\n * borderWidth: 0.5,\n * borderColor: '#d6d7da',\n * },\n * title: {\n * fontSize: 19,\n * fontWeight: 'bold',\n * },\n * activeTitle: {\n * color: 'red',\n * },\n * });\n * ```\n *\n * Use a StyleSheet:\n *\n * ```\n * \n * \n * \n * ```\n *\n * Code quality:\n *\n * - By moving styles away from the render function, you're making the code\n * easier to understand.\n * - Naming the styles is a good way to add meaning to the low level components\n * in the render function.\n *\n * Performance:\n *\n * - Making a stylesheet from a style object makes it possible to refer to it\n * by ID instead of creating a new style object every time.\n * - It also allows to send the style only once through the bridge. All\n * subsequent uses are going to refer an id (not implemented yet).\n */\nmodule.exports = {\n /**\n * This is defined as the width of a thin line on the platform. It can be\n * used as the thickness of a border or division between two elements.\n * Example:\n * ```\n * {\n * borderBottomColor: '#bbb',\n * borderBottomWidth: StyleSheet.hairlineWidth\n * }\n * ```\n *\n * This constant will always be a round number of pixels (so a line defined\n * by it look crisp) and will try to match the standard width of a thin line\n * on the underlying platform. However, you should not rely on it being a\n * constant size, because on different platforms and screen densities its\n * value may be calculated differently.\n *\n * A line with hairline width may not be visible if your simulator is downscaled.\n */\n hairlineWidth,\n\n /**\n * A very common pattern is to create overlays with position absolute and zero positioning,\n * so `absoluteFill` can be used for convenience and to reduce duplication of these repeated\n * styles.\n */\n absoluteFill: (absoluteFill: any), // TODO: This should be updated after we fix downstream Flow sites.\n\n /**\n * Sometimes you may want `absoluteFill` but with a couple tweaks - `absoluteFillObject` can be\n * used to create a customized entry in a `StyleSheet`, e.g.:\n *\n * const styles = StyleSheet.create({\n * wrapper: {\n * ...StyleSheet.absoluteFillObject,\n * top: 10,\n * backgroundColor: 'transparent',\n * },\n * });\n */\n absoluteFillObject: absoluteFill,\n\n /**\n * Combines two styles such that `style2` will override any styles in `style1`.\n * If either style is falsy, the other one is returned without allocating an\n * array, saving allocations and maintaining reference equality for\n * PureComponent checks.\n */\n compose(\n style1: ?T,\n style2: ?T,\n ): ?T | $ReadOnlyArray {\n if (style1 != null && style2 != null) {\n return ([style1, style2]: $ReadOnlyArray);\n } else {\n return style1 != null ? style1 : style2;\n }\n },\n\n /**\n * Flattens an array of style objects, into one aggregated style object.\n * Alternatively, this method can be used to lookup IDs, returned by\n * StyleSheet.register.\n *\n * > **NOTE**: Exercise caution as abusing this can tax you in terms of\n * > optimizations.\n * >\n * > IDs enable optimizations through the bridge and memory in general. Referring\n * > to style objects directly will deprive you of these optimizations.\n *\n * Example:\n * ```\n * const styles = StyleSheet.create({\n * listItem: {\n * flex: 1,\n * fontSize: 16,\n * color: 'white'\n * },\n * selectedListItem: {\n * color: 'green'\n * }\n * });\n *\n * StyleSheet.flatten([styles.listItem, styles.selectedListItem])\n * // returns { flex: 1, fontSize: 16, color: 'green' }\n * ```\n * Alternative use:\n * ```\n * StyleSheet.flatten(styles.listItem);\n * // return { flex: 1, fontSize: 16, color: 'white' }\n * // Simply styles.listItem would return its ID (number)\n * ```\n * This method internally uses `StyleSheetRegistry.getStyleByID(style)`\n * to resolve style objects represented by IDs. Thus, an array of style\n * objects (instances of StyleSheet.create), are individually resolved to,\n * their respective objects, merged as one and then returned. This also explains\n * the alternative use.\n */\n flatten,\n\n /**\n * WARNING: EXPERIMENTAL. Breaking changes will probably happen a lot and will\n * not be reliably announced. The whole thing might be deleted, who knows? Use\n * at your own risk.\n *\n * Sets a function to use to pre-process a style property value. This is used\n * internally to process color and transform values. You should not use this\n * unless you really know what you are doing and have exhausted other options.\n */\n setStyleAttributePreprocessor(\n property: string,\n process: (nextProp: mixed) => mixed,\n ) {\n let value;\n\n if (ReactNativeStyleAttributes[property] === true) {\n value = {process};\n } else if (typeof ReactNativeStyleAttributes[property] === 'object') {\n value = {...ReactNativeStyleAttributes[property], process};\n } else {\n console.error(`${property} is not a valid style attribute`);\n return;\n }\n\n if (__DEV__ && typeof value.process === 'function') {\n console.warn(`Overwriting ${property} style attribute preprocessor`);\n }\n\n ReactNativeStyleAttributes[property] = value;\n },\n\n /**\n * Creates a StyleSheet style reference from the given object.\n */\n create<+S: ____Styles_Internal>(obj: S): $ReadOnly {\n // TODO: This should return S as the return type. But first,\n // we need to codemod all the callsites that are typing this\n // return value as a number (even though it was opaque).\n if (__DEV__) {\n for (const key in obj) {\n if (obj[key]) {\n Object.freeze(obj[key]);\n }\n }\n }\n return obj;\n },\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {ViewProps} from './ViewPropTypes';\n\nimport ViewNativeComponent from './ViewNativeComponent';\nimport TextAncestor from '../../Text/TextAncestor';\nimport * as React from 'react';\n\nexport type Props = ViewProps;\n\n/**\n * The most fundamental component for building a UI, View is a container that\n * supports layout with flexbox, style, some touch handling, and accessibility\n * controls.\n *\n * @see https://reactnative.dev/docs/view.html\n */\nconst View: React.AbstractComponent<\n ViewProps,\n React.ElementRef,\n> = React.forwardRef((props: ViewProps, forwardedRef) => {\n return (\n \n \n \n );\n});\n\nView.displayName = 'View';\n\nmodule.exports = View;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as NativeComponentRegistry from '../../NativeComponent/NativeComponentRegistry';\nimport {type HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport Platform from '../../Utilities/Platform';\nimport codegenNativeCommands from '../../Utilities/codegenNativeCommands';\nimport ReactNativeViewViewConfigAndroid from './ReactNativeViewViewConfigAndroid';\nimport {type ViewProps as Props} from './ViewPropTypes';\nimport * as React from 'react';\n\nconst ViewNativeComponent: HostComponent = NativeComponentRegistry.get(\n 'RCTView',\n () =>\n Platform.OS === 'android'\n ? ReactNativeViewViewConfigAndroid\n : {uiViewClassName: 'RCTView'},\n);\n\ninterface NativeCommands {\n +hotspotUpdate: (\n viewRef: React.ElementRef>,\n x: number,\n y: number,\n ) => void;\n +setPressed: (\n viewRef: React.ElementRef>,\n pressed: boolean,\n ) => void;\n}\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['hotspotUpdate', 'setPressed'],\n});\n\nexport default ViewNativeComponent;\n\nexport type ViewNativeComponentType = HostComponent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nconst React = require('react');\n\n/**\n * Whether the current element is the descendant of a element.\n */\nconst TextAncestorContext = (React.createContext(\n false,\n): React$Context<$FlowFixMe>);\nif (__DEV__) {\n TextAncestorContext.displayName = 'TextAncestorContext';\n}\nmodule.exports = TextAncestorContext;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n'use strict';\n\nmodule.exports = require('../UnimplementedViews/UnimplementedView');\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\nimport * as React from 'react';\nimport StyleSheet from '../../StyleSheet/StyleSheet';\n\n/**\n * Common implementation for a simple stubbed view. Simply applies the view's styles to the inner\n * View component and renders its children.\n */\nclass UnimplementedView extends React.Component<$FlowFixMeProps> {\n render(): React.Node {\n // Workaround require cycle from requireNativeComponent\n const View = require('../View/View');\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n unimplementedView: __DEV__\n ? {\n alignSelf: 'flex-start',\n borderColor: 'red',\n borderWidth: 1,\n }\n : {},\n});\n\nmodule.exports = UnimplementedView;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {WithDefault} from '../../Types/CodegenTypes';\n\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n /**\n * Whether the indicator should hide when not animating (true by default).\n *\n * See https://reactnative.dev/docs/activityindicator.html#hideswhenstopped\n */\n hidesWhenStopped?: WithDefault,\n\n /**\n * Whether to show the indicator (true, the default) or hide it (false).\n *\n * See https://reactnative.dev/docs/activityindicator.html#animating\n */\n animating?: WithDefault,\n\n /**\n * The foreground color of the spinner (default is gray).\n *\n * See https://reactnative.dev/docs/activityindicator.html#color\n */\n color?: ?ColorValue,\n\n /**\n * Size of the indicator (default is 'small').\n * Passing a number to the size prop is only supported on Android.\n *\n * See https://reactnative.dev/docs/activityindicator.html#size\n */\n size?: WithDefault<'small' | 'large', 'small'>,\n|}>;\n\nexport default (codegenNativeComponent('ActivityIndicatorView', {\n paperComponentName: 'RCTActivityIndicatorView',\n}): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n// TODO: move this file to shims/ReactNative (requires React update and sync)\n\nimport requireNativeComponent from '../../Libraries/ReactNative/requireNativeComponent';\nimport type {HostComponent} from '../../Libraries/Renderer/shims/ReactNativeTypes';\nimport UIManager from '../ReactNative/UIManager';\n\n// TODO: import from CodegenSchema once workspaces are enabled\ntype Options = $ReadOnly<{|\n interfaceOnly?: boolean,\n paperComponentName?: string,\n paperComponentNameDeprecated?: string,\n excludedPlatforms?: $ReadOnlyArray<'iOS' | 'android'>,\n|}>;\n\nexport type NativeComponentType = HostComponent;\n\nfunction codegenNativeComponent(\n componentName: string,\n options?: Options,\n): NativeComponentType {\n let componentNameInUse =\n options && options.paperComponentName != null\n ? options.paperComponentName\n : componentName;\n\n if (options != null && options.paperComponentNameDeprecated != null) {\n if (UIManager.getViewManagerConfig(componentName)) {\n componentNameInUse = componentName;\n } else if (\n options.paperComponentNameDeprecated != null &&\n UIManager.getViewManagerConfig(options.paperComponentNameDeprecated)\n ) {\n componentNameInUse = options.paperComponentNameDeprecated;\n } else {\n throw new Error(\n `Failed to find native component for either ${componentName} or ${options.paperComponentNameDeprecated ??\n '(unknown)'}`,\n );\n }\n }\n\n // If this function is run at runtime then that means the view configs were not\n // generated with the view config babel plugin, so we need to require the native component.\n //\n // This will be useful during migration, but eventually this will error.\n return (requireNativeComponent(\n componentNameInUse,\n ): HostComponent);\n}\n\nexport default codegenNativeComponent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst createReactNativeComponentClass = require('../Renderer/shims/createReactNativeComponentClass');\nconst getNativeComponentAttributes = require('./getNativeComponentAttributes');\n\nimport type {HostComponent} from '../Renderer/shims/ReactNativeTypes';\n\n/**\n * Creates values that can be used like React components which represent native\n * view managers. You should create JavaScript modules that wrap these values so\n * that the results are memoized. Example:\n *\n * const View = requireNativeComponent('RCTView');\n *\n */\n\nconst requireNativeComponent = (uiViewClassName: string): HostComponent =>\n ((createReactNativeComponentClass(uiViewClassName, () =>\n getNativeComponentAttributes(uiViewClassName),\n ): any): HostComponent);\n\nmodule.exports = requireNativeComponent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n * @generated SignedSource<<435ec24b3531c66986fe5d529795713b>>\n *\n * This file was sync'd from the facebook/react repository.\n */\n\n'use strict';\n\nimport {ReactNativeViewConfigRegistry} from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface';\nimport {type ViewConfig} from './ReactNativeTypes';\n\nconst {register} = ReactNativeViewConfigRegistry;\n\n/**\n * Creates a renderable ReactNative host component.\n * Use this method for view configs that are loaded from UIManager.\n * Use createReactNativeComponentClass() for view configs defined within JavaScript.\n *\n * @param {string} config iOS View configuration.\n * @private\n */\nconst createReactNativeComponentClass = function(\n name: string,\n callback: () => ViewConfig,\n): string {\n return register(name, callback);\n};\n\nmodule.exports = createReactNativeComponentClass;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n * @generate-docs\n */\n\n'use strict';\n\nimport * as React from 'react';\nimport Platform from '../Utilities/Platform';\nimport StyleSheet, {type ColorValue} from '../StyleSheet/StyleSheet';\nimport Text from '../Text/Text';\nimport TouchableNativeFeedback from './Touchable/TouchableNativeFeedback';\nimport TouchableOpacity from './Touchable/TouchableOpacity';\nimport View from './View/View';\nimport invariant from 'invariant';\n\nimport type {\n AccessibilityState,\n AccessibilityActionEvent,\n AccessibilityActionInfo,\n} from './View/ViewAccessibility';\nimport type {PressEvent} from '../Types/CoreEventTypes';\n\ntype ButtonProps = $ReadOnly<{|\n /**\n Text to display inside the button. On Android the given title will be\n converted to the uppercased form.\n */\n title: string,\n\n /**\n Handler to be called when the user taps the button. The first function\n argument is an event in form of [PressEvent](pressevent).\n */\n onPress: (event?: PressEvent) => mixed,\n\n /**\n If `true`, doesn't play system sound on touch.\n\n @platform android\n\n @default false\n */\n touchSoundDisabled?: ?boolean,\n\n /**\n Color of the text (iOS), or background color of the button (Android).\n\n @default {@platform android} '#2196F3'\n @default {@platform ios} '#007AFF'\n */\n color?: ?ColorValue,\n\n /**\n TV preferred focus.\n\n @platform tv\n\n @default false\n */\n hasTVPreferredFocus?: ?boolean,\n\n /**\n Designates the next view to receive focus when the user navigates down. See\n the [Android documentation][android:nextFocusDown].\n\n [android:nextFocusDown]:\n https://developer.android.com/reference/android/view/View.html#attr_android:nextFocusDown\n\n @platform android, tv\n */\n nextFocusDown?: ?number,\n\n /**\n Designates the next view to receive focus when the user navigates forward.\n See the [Android documentation][android:nextFocusForward].\n\n [android:nextFocusForward]:\n https://developer.android.com/reference/android/view/View.html#attr_android:nextFocusForward\n\n @platform android, tv\n */\n nextFocusForward?: ?number,\n\n /**\n Designates the next view to receive focus when the user navigates left. See\n the [Android documentation][android:nextFocusLeft].\n\n [android:nextFocusLeft]:\n https://developer.android.com/reference/android/view/View.html#attr_android:nextFocusLeft\n\n @platform android, tv\n */\n nextFocusLeft?: ?number,\n\n /**\n Designates the next view to receive focus when the user navigates right. See\n the [Android documentation][android:nextFocusRight].\n\n [android:nextFocusRight]:\n https://developer.android.com/reference/android/view/View.html#attr_android:nextFocusRight\n\n @platform android, tv\n */\n nextFocusRight?: ?number,\n\n /**\n Designates the next view to receive focus when the user navigates up. See\n the [Android documentation][android:nextFocusUp].\n\n [android:nextFocusUp]:\n https://developer.android.com/reference/android/view/View.html#attr_android:nextFocusUp\n\n @platform android, tv\n */\n nextFocusUp?: ?number,\n\n /**\n Text to display for blindness accessibility features.\n */\n accessibilityLabel?: ?string,\n\n /**\n If `true`, disable all interactions for this component.\n\n @default false\n */\n disabled?: ?boolean,\n\n /**\n Used to locate this view in end-to-end tests.\n */\n testID?: ?string,\n\n /**\n * Accessibility props.\n */\n accessible?: ?boolean,\n accessibilityActions?: ?$ReadOnlyArray,\n onAccessibilityAction?: ?(event: AccessibilityActionEvent) => mixed,\n accessibilityState?: ?AccessibilityState,\n|}>;\n\n/**\n A basic button component that should render nicely on any platform. Supports a\n minimal level of customization.\n\n If this button doesn't look right for your app, you can build your own button\n using [TouchableOpacity](touchableopacity) or\n [TouchableWithoutFeedback](touchablewithoutfeedback). For inspiration, look at\n the [source code for this button component][button:source]. Or, take a look at\n the [wide variety of button components built by the community]\n [button:examples].\n\n [button:source]:\n https://github.com/facebook/react-native/blob/HEAD/Libraries/Components/Button.js\n\n [button:examples]:\n https://js.coach/?menu%5Bcollections%5D=React%20Native&page=1&query=button\n\n ```jsx\n \n ```\n\n ```SnackPlayer name=Button%20Example\n import React from 'react';\n import { StyleSheet, Button, View, SafeAreaView, Text, Alert } from 'react-native';\n\n const Separator = () => (\n \n );\n\n const App = () => (\n \n \n \n The title and onPress handler are required. It is recommended to set accessibilityLabel to help make your app usable by everyone.\n \n Alert.alert('Simple Button pressed')}\n />\n \n \n \n \n Adjust the color in a way that looks standard on each platform. On iOS, the color prop controls the color of the text. On Android, the color adjusts the background color of the button.\n \n Alert.alert('Button with adjusted color pressed')}\n />\n \n \n \n \n All interaction for the component are disabled.\n \n Alert.alert('Cannot press this one')}\n />\n \n \n \n \n This layout strategy lets the title define the width of the button.\n \n \n Alert.alert('Left button pressed')}\n />\n Alert.alert('Right button pressed')}\n />\n \n \n \n );\n\n const styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n marginHorizontal: 16,\n },\n title: {\n textAlign: 'center',\n marginVertical: 8,\n },\n fixToText: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n separator: {\n marginVertical: 8,\n borderBottomColor: '#737373',\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n });\n\n export default App;\n ```\n */\n\nclass Button extends React.Component {\n render(): React.Node {\n const {\n accessibilityLabel,\n color,\n onPress,\n touchSoundDisabled,\n title,\n hasTVPreferredFocus,\n nextFocusDown,\n nextFocusForward,\n nextFocusLeft,\n nextFocusRight,\n nextFocusUp,\n testID,\n accessible,\n accessibilityActions,\n onAccessibilityAction,\n } = this.props;\n const buttonStyles = [styles.button];\n const textStyles = [styles.text];\n if (color) {\n if (Platform.OS === 'ios') {\n textStyles.push({color: color});\n } else {\n buttonStyles.push({backgroundColor: color});\n }\n }\n\n const disabled =\n this.props.disabled != null\n ? this.props.disabled\n : this.props.accessibilityState?.disabled;\n\n const accessibilityState =\n disabled !== this.props.accessibilityState?.disabled\n ? {...this.props.accessibilityState, disabled}\n : this.props.accessibilityState;\n\n if (disabled) {\n buttonStyles.push(styles.buttonDisabled);\n textStyles.push(styles.textDisabled);\n }\n\n invariant(\n typeof title === 'string',\n 'The title prop of a Button must be a string',\n );\n const formattedTitle =\n Platform.OS === 'android' ? title.toUpperCase() : title;\n const Touchable =\n Platform.OS === 'android' ? TouchableNativeFeedback : TouchableOpacity;\n\n return (\n \n \n \n {formattedTitle}\n \n \n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n button: Platform.select({\n ios: {},\n android: {\n elevation: 4,\n // Material design blue from https://material.google.com/style/color.html#color-color-palette\n backgroundColor: '#2196F3',\n borderRadius: 2,\n },\n }),\n text: {\n textAlign: 'center',\n margin: 8,\n ...Platform.select({\n ios: {\n // iOS blue from https://developer.apple.com/ios/human-interface-guidelines/visual-design/color/\n color: '#007AFF',\n fontSize: 18,\n },\n android: {\n color: 'white',\n fontWeight: '500',\n },\n }),\n },\n buttonDisabled: Platform.select({\n ios: {},\n android: {\n elevation: 0,\n backgroundColor: '#dfdfdf',\n },\n }),\n textDisabled: Platform.select({\n ios: {\n color: '#cdcdcd',\n },\n android: {\n color: '#a1a1a1',\n },\n }),\n});\n\nmodule.exports = Button;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport DeprecatedTextPropTypes from '../DeprecatedPropTypes/DeprecatedTextPropTypes';\nimport * as PressabilityDebug from '../Pressability/PressabilityDebug';\nimport usePressability from '../Pressability/usePressability';\nimport StyleSheet from '../StyleSheet/StyleSheet';\nimport processColor from '../StyleSheet/processColor';\nimport TextAncestor from './TextAncestor';\nimport {NativeText, NativeVirtualText} from './TextNativeComponent';\nimport {type TextProps} from './TextProps';\nimport * as React from 'react';\nimport {useContext, useMemo, useState} from 'react';\nimport invariant from 'invariant';\n\n/**\n * Text is the fundamental component for displaying text.\n *\n * @see https://reactnative.dev/docs/text.html\n */\nconst Text: React.AbstractComponent<\n TextProps,\n React.ElementRef,\n> = React.forwardRef((props: TextProps, forwardedRef) => {\n const {\n accessible,\n allowFontScaling,\n ellipsizeMode,\n onLongPress,\n onPress,\n onPressIn,\n onPressOut,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n onResponderTerminationRequest,\n onStartShouldSetResponder,\n pressRetentionOffset,\n suppressHighlighting,\n ...restProps\n } = props;\n\n const [isHighlighted, setHighlighted] = useState(false);\n\n const isPressable =\n (onPress != null ||\n onLongPress != null ||\n onStartShouldSetResponder != null) &&\n restProps.disabled !== true;\n\n const initialized = useLazyInitialization(isPressable);\n const config = useMemo(\n () =>\n initialized\n ? {\n disabled: !isPressable,\n pressRectOffset: pressRetentionOffset,\n onLongPress,\n onPress,\n onPressIn(event) {\n setHighlighted(!suppressHighlighting);\n onPressIn?.(event);\n },\n onPressOut(event) {\n setHighlighted(false);\n onPressOut?.(event);\n },\n onResponderTerminationRequest_DEPRECATED: onResponderTerminationRequest,\n onStartShouldSetResponder_DEPRECATED: onStartShouldSetResponder,\n }\n : null,\n [\n initialized,\n isPressable,\n pressRetentionOffset,\n onLongPress,\n onPress,\n onPressIn,\n onPressOut,\n onResponderTerminationRequest,\n onStartShouldSetResponder,\n suppressHighlighting,\n ],\n );\n\n const eventHandlers = usePressability(config);\n const eventHandlersForText = useMemo(\n () =>\n eventHandlers == null\n ? null\n : {\n onResponderGrant(event) {\n eventHandlers.onResponderGrant(event);\n if (onResponderGrant != null) {\n onResponderGrant(event);\n }\n },\n onResponderMove(event) {\n eventHandlers.onResponderMove(event);\n if (onResponderMove != null) {\n onResponderMove(event);\n }\n },\n onResponderRelease(event) {\n eventHandlers.onResponderRelease(event);\n if (onResponderRelease != null) {\n onResponderRelease(event);\n }\n },\n onResponderTerminate(event) {\n eventHandlers.onResponderTerminate(event);\n if (onResponderTerminate != null) {\n onResponderTerminate(event);\n }\n },\n onResponderTerminationRequest:\n eventHandlers.onResponderTerminationRequest,\n onStartShouldSetResponder: eventHandlers.onStartShouldSetResponder,\n },\n [\n eventHandlers,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n ],\n );\n\n // TODO: Move this processing to the view configuration.\n const selectionColor =\n restProps.selectionColor == null\n ? null\n : processColor(restProps.selectionColor);\n\n let style = restProps.style;\n if (__DEV__) {\n if (PressabilityDebug.isEnabled() && onPress != null) {\n style = StyleSheet.compose(restProps.style, {\n color: 'magenta',\n });\n }\n }\n\n let numberOfLines = restProps.numberOfLines;\n if (numberOfLines != null && !(numberOfLines >= 0)) {\n console.error(\n `'numberOfLines' in must be a non-negative number, received: ${numberOfLines}. The value will be set to 0.`,\n );\n numberOfLines = 0;\n }\n\n const hasTextAncestor = useContext(TextAncestor);\n\n return hasTextAncestor ? (\n \n ) : (\n \n \n \n );\n});\n\nText.displayName = 'Text';\n\n// TODO: Delete this.\nText.propTypes = DeprecatedTextPropTypes;\n\n/**\n * Returns false until the first time `newValue` is true, after which this will\n * always return true. This is necessary to lazily initialize `Pressability` so\n * we do not eagerly create one for every pressable `Text` component.\n */\nfunction useLazyInitialization(newValue: boolean): boolean {\n const [oldValue, setValue] = useState(newValue);\n if (!oldValue && newValue) {\n setValue(newValue);\n }\n return oldValue;\n}\n\n// $FlowFixMe[incompatible-cast] - No good way to type a React.AbstractComponent with statics.\nmodule.exports = (Text: typeof Text &\n $ReadOnly<{\n propTypes: typeof DeprecatedTextPropTypes,\n }>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst DeprecatedColorPropType = require('./DeprecatedColorPropType');\nconst DeprecatedEdgeInsetsPropType = require('./DeprecatedEdgeInsetsPropType');\nconst DeprecatedStyleSheetPropType = require('./DeprecatedStyleSheetPropType');\nconst PropTypes = require('prop-types');\nconst DeprecatedTextStylePropTypes = require('./DeprecatedTextStylePropTypes');\n\nconst stylePropType: ReactPropsCheckType = DeprecatedStyleSheetPropType(\n DeprecatedTextStylePropTypes,\n);\n\nconst DataDetectorTypes = ['phoneNumber', 'link', 'email', 'none', 'all'];\n\nmodule.exports = {\n /**\n * When `numberOfLines` is set, this prop defines how text will be\n * truncated.\n *\n * See https://reactnative.dev/docs/text.html#ellipsizemode\n */\n ellipsizeMode: (PropTypes.oneOf([\n 'head',\n 'middle',\n 'tail',\n 'clip',\n ]): React$PropType$Primitive<'head' | 'middle' | 'tail' | 'clip'>),\n /**\n * Used to truncate the text with an ellipsis.\n *\n * See https://reactnative.dev/docs/text.html#numberoflines\n */\n numberOfLines: PropTypes.number,\n /**\n * Set text break strategy on Android.\n *\n * See https://reactnative.dev/docs/text.html#textbreakstrategy\n */\n textBreakStrategy: (PropTypes.oneOf([\n 'simple',\n 'highQuality',\n 'balanced',\n ]): React$PropType$Primitive<'simple' | 'highQuality' | 'balanced'>),\n /**\n * Invoked on mount and layout changes.\n *\n * See https://reactnative.dev/docs/text.html#onlayout\n */\n onLayout: PropTypes.func,\n /**\n * This function is called on press.\n *\n * See https://reactnative.dev/docs/text.html#onpress\n */\n onPress: PropTypes.func,\n /**\n * This function is called on long press.\n *\n * See https://reactnative.dev/docs/text.html#onlongpress\n */\n onLongPress: PropTypes.func,\n /**\n * Defines how far your touch may move off of the button, before\n * deactivating the button.\n *\n * See https://reactnative.dev/docs/text.html#pressretentionoffset\n */\n pressRetentionOffset: DeprecatedEdgeInsetsPropType,\n /**\n * Lets the user select text.\n *\n * See https://reactnative.dev/docs/text.html#selectable\n */\n selectable: PropTypes.bool,\n /**\n * The highlight color of the text.\n *\n * See https://reactnative.dev/docs/text.html#selectioncolor\n */\n selectionColor: DeprecatedColorPropType,\n /**\n * When `true`, no visual change is made when text is pressed down.\n *\n * See https://reactnative.dev/docs/text.html#supperhighlighting\n */\n suppressHighlighting: PropTypes.bool,\n style: stylePropType,\n /**\n * Used to locate this view in end-to-end tests.\n *\n * See https://reactnative.dev/docs/text.html#testid\n */\n testID: PropTypes.string,\n /**\n * Used to locate this view from native code.\n *\n * See https://reactnative.dev/docs/text.html#nativeid\n */\n nativeID: PropTypes.string,\n /**\n * Whether fonts should scale to respect Text Size accessibility settings.\n *\n * See https://reactnative.dev/docs/text.html#allowfontscaling\n */\n allowFontScaling: PropTypes.bool,\n /**\n * Specifies largest possible scale a font can reach when `allowFontScaling` is enabled.\n * Possible values:\n * `null/undefined` (default): inherit from the parent node or the global default (0)\n * `0`: no max, ignore parent/global default\n * `>= 1`: sets the maxFontSizeMultiplier of this node to this value\n */\n maxFontSizeMultiplier: PropTypes.number,\n /**\n * Indicates whether the view is an accessibility element.\n *\n * See https://reactnative.dev/docs/text.html#accessible\n */\n accessible: PropTypes.bool,\n /**\n * Whether font should be scaled down automatically.\n *\n * See https://reactnative.dev/docs/text.html#adjustsfontsizetofit\n */\n adjustsFontSizeToFit: PropTypes.bool,\n /**\n * Smallest possible scale a font can reach.\n *\n * See https://reactnative.dev/docs/text.html#minimumfontscale\n */\n minimumFontScale: PropTypes.number,\n /**\n * Specifies the disabled state of the text view for testing purposes.\n *\n * See https://reactnative.dev/docs/text.html#disabled\n */\n disabled: PropTypes.bool,\n /**\n * Determines the types of data converted to clickable URLs in text.\n *\n * See https://reactnative.dev/docs/text.html#dataDetectorType\n */\n dataDetectorType: (PropTypes.oneOf(\n DataDetectorTypes,\n ): React$PropType$Primitive<\n 'phoneNumber' | 'link' | 'email' | 'none' | 'all',\n >),\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n'use strict';\n\nconst normalizeColor = require('../StyleSheet/normalizeColor');\n\nconst colorPropType = function(\n isRequired,\n props,\n propName,\n componentName,\n location,\n propFullName,\n) {\n const color = props[propName];\n if (color === undefined || color === null) {\n if (isRequired) {\n return new Error(\n 'Required ' +\n location +\n ' `' +\n (propFullName || propName) +\n '` was not specified in `' +\n componentName +\n '`.',\n );\n }\n return;\n }\n\n if (typeof color === 'number') {\n // Developers should not use a number, but we are using the prop type\n // both for user provided colors and for transformed ones. This isn't ideal\n // and should be fixed but will do for now...\n return;\n }\n\n if (normalizeColor(color) === null) {\n return new Error(\n 'Invalid ' +\n location +\n ' `' +\n (propFullName || propName) +\n '` supplied to `' +\n componentName +\n '`: ' +\n color +\n '\\n' +\n `Valid color formats are\n - '#f0f' (#rgb)\n - '#f0fc' (#rgba)\n - '#ff00ff' (#rrggbb)\n - '#ff00ff00' (#rrggbbaa)\n - 'rgb(255, 255, 255)'\n - 'rgba(255, 255, 255, 1.0)'\n - 'hsl(360, 100%, 100%)'\n - 'hsla(360, 100%, 100%, 1.0)'\n - 'transparent'\n - 'red'\n - 0xff00ff00 (0xrrggbbaa)\n`,\n );\n }\n};\n\nconst ColorPropType = colorPropType.bind(null, false /* isRequired */);\nColorPropType.isRequired = colorPropType.bind(null, true /* isRequired */);\n\nmodule.exports = ColorPropType;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst PropTypes = require('prop-types');\n\nconst DeprecatedEdgeInsetsPropType: React$PropType$Primitive<{\n bottom?: number,\n left?: number,\n right?: number,\n top?: number,\n ...\n}> = PropTypes.shape({\n top: PropTypes.number,\n left: PropTypes.number,\n bottom: PropTypes.number,\n right: PropTypes.number,\n});\n\nmodule.exports = DeprecatedEdgeInsetsPropType;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nconst deprecatedCreateStrictShapeTypeChecker = require('./deprecatedCreateStrictShapeTypeChecker');\nconst flattenStyle = require('../StyleSheet/flattenStyle');\n\nfunction DeprecatedStyleSheetPropType(shape: {\n [key: string]: ReactPropsCheckType,\n ...,\n}): ReactPropsCheckType {\n const shapePropType = deprecatedCreateStrictShapeTypeChecker(shape);\n return function(props, propName, componentName, location?, ...rest) {\n let newProps = props;\n if (props[propName]) {\n // Just make a dummy prop object with only the flattened style\n newProps = {};\n newProps[propName] = flattenStyle(props[propName]);\n }\n return shapePropType(newProps, propName, componentName, location, ...rest);\n };\n}\n\nmodule.exports = DeprecatedStyleSheetPropType;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nconst invariant = require('invariant');\n\nfunction deprecatedCreateStrictShapeTypeChecker(shapeTypes: {\n [key: string]: ReactPropsCheckType,\n ...,\n}): ReactPropsChainableTypeChecker {\n function checkType(\n isRequired,\n props,\n propName,\n componentName,\n location?,\n ...rest\n ) {\n if (!props[propName]) {\n if (isRequired) {\n invariant(\n false,\n `Required object \\`${propName}\\` was not specified in ` +\n `\\`${componentName}\\`.`,\n );\n }\n return;\n }\n const propValue = props[propName];\n const propType = typeof propValue;\n const locationName = location || '(unknown)';\n if (propType !== 'object') {\n invariant(\n false,\n `Invalid ${locationName} \\`${propName}\\` of type \\`${propType}\\` ` +\n `supplied to \\`${componentName}\\`, expected \\`object\\`.`,\n );\n }\n // We need to check all keys in case some are required but missing from\n // props.\n const allKeys = {...props[propName], ...shapeTypes};\n for (const key in allKeys) {\n const checker = shapeTypes[key];\n if (!checker) {\n invariant(\n false,\n `Invalid props.${propName} key \\`${key}\\` supplied to \\`${componentName}\\`.` +\n '\\nBad object: ' +\n JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' +\n JSON.stringify(Object.keys(shapeTypes), null, ' '),\n );\n }\n const error = checker(propValue, key, componentName, location, ...rest);\n if (error) {\n invariant(\n false,\n error.message +\n '\\nBad object: ' +\n JSON.stringify(props[propName], null, ' '),\n );\n }\n }\n }\n function chainedCheckType(\n props: {[key: string]: any, ...},\n propName: string,\n componentName: string,\n location?: string,\n ...rest\n ): ?Error {\n return checkType(false, props, propName, componentName, location, ...rest);\n }\n chainedCheckType.isRequired = checkType.bind(null, true);\n return chainedCheckType;\n}\n\nmodule.exports = deprecatedCreateStrictShapeTypeChecker;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nconst DeprecatedColorPropType = require('./DeprecatedColorPropType');\nconst DeprecatedViewStylePropTypes = require('./DeprecatedViewStylePropTypes');\nconst ReactPropTypes = require('prop-types');\n\nconst DeprecatedTextStylePropTypes = {\n ...DeprecatedViewStylePropTypes,\n\n color: DeprecatedColorPropType,\n fontFamily: ReactPropTypes.string,\n fontSize: ReactPropTypes.number,\n fontStyle: (ReactPropTypes.oneOf([\n 'normal',\n 'italic',\n ]): React$PropType$Primitive<'normal' | 'italic'>),\n /**\n * Specifies font weight. The values 'normal' and 'bold' are supported for\n * most fonts. Not all fonts have a variant for each of the numeric values,\n * in that case the closest one is chosen.\n */\n fontWeight: (ReactPropTypes.oneOf([\n 'normal' /*default*/,\n 'bold',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n ]): React$PropType$Primitive<\n | 'normal'\n | 'bold'\n | '100'\n | '200'\n | '300'\n | '400'\n | '500'\n | '600'\n | '700'\n | '800'\n | '900',\n >),\n fontVariant: (ReactPropTypes.arrayOf(\n ReactPropTypes.oneOf([\n 'small-caps',\n 'oldstyle-nums',\n 'lining-nums',\n 'tabular-nums',\n 'proportional-nums',\n ]),\n ): React$PropType$Primitive<\n Array<\n | 'small-caps'\n | 'oldstyle-nums'\n | 'lining-nums'\n | 'tabular-nums'\n | 'proportional-nums',\n >,\n >),\n textShadowOffset: (ReactPropTypes.shape({\n width: ReactPropTypes.number,\n height: ReactPropTypes.number,\n }): React$PropType$Primitive<{\n height?: number,\n width?: number,\n ...\n }>),\n textShadowRadius: ReactPropTypes.number,\n textShadowColor: DeprecatedColorPropType,\n /**\n * @platform ios\n */\n letterSpacing: ReactPropTypes.number,\n lineHeight: ReactPropTypes.number,\n /**\n * Specifies text alignment. The value 'justify' is only supported on iOS and\n * fallbacks to `left` on Android.\n */\n textAlign: (ReactPropTypes.oneOf([\n 'auto' /*default*/,\n 'left',\n 'right',\n 'center',\n 'justify',\n ]): React$PropType$Primitive<\n 'auto' | 'left' | 'right' | 'center' | 'justify',\n >),\n /**\n * @platform android\n */\n textAlignVertical: (ReactPropTypes.oneOf([\n 'auto' /*default*/,\n 'top',\n 'bottom',\n 'center',\n ]): React$PropType$Primitive<'auto' | 'top' | 'bottom' | 'center'>),\n /**\n * Set to `false` to remove extra font padding intended to make space for certain ascenders / descenders.\n * With some fonts, this padding can make text look slightly misaligned when centered vertically.\n * For best results also set `textAlignVertical` to `center`. Default is true.\n * @platform android\n */\n includeFontPadding: ReactPropTypes.bool,\n textDecorationLine: (ReactPropTypes.oneOf([\n 'none' /*default*/,\n 'underline',\n 'line-through',\n 'underline line-through',\n ]): React$PropType$Primitive<\n 'none' | 'underline' | 'line-through' | 'underline line-through',\n >),\n /**\n * @platform ios\n */\n textDecorationStyle: (ReactPropTypes.oneOf([\n 'solid' /*default*/,\n 'double',\n 'dotted',\n 'dashed',\n ]): React$PropType$Primitive<'solid' | 'double' | 'dotted' | 'dashed'>),\n /**\n * @platform ios\n */\n textDecorationColor: DeprecatedColorPropType,\n textTransform: (ReactPropTypes.oneOf([\n 'none' /*default*/,\n 'capitalize',\n 'uppercase',\n 'lowercase',\n ]): React$PropType$Primitive<\n 'none' | 'capitalize' | 'uppercase' | 'lowercase',\n >),\n /**\n * @platform ios\n */\n writingDirection: (ReactPropTypes.oneOf([\n 'auto' /*default*/,\n 'ltr',\n 'rtl',\n ]): React$PropType$Primitive<'auto' | 'ltr' | 'rtl'>),\n};\n\nmodule.exports = DeprecatedTextStylePropTypes;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nconst DeprecatedColorPropType = require('./DeprecatedColorPropType');\nconst DeprecatedLayoutPropTypes = require('./DeprecatedLayoutPropTypes');\nconst DeprecatedShadowPropTypesIOS = require('./DeprecatedShadowPropTypesIOS');\nconst DeprecatedTransformPropTypes = require('./DeprecatedTransformPropTypes');\nconst ReactPropTypes = require('prop-types');\n\n/**\n * Warning: Some of these properties may not be supported in all releases.\n */\nconst DeprecatedViewStylePropTypes = {\n ...DeprecatedLayoutPropTypes,\n ...DeprecatedShadowPropTypesIOS,\n ...DeprecatedTransformPropTypes,\n backfaceVisibility: (ReactPropTypes.oneOf([\n 'visible',\n 'hidden',\n ]): React$PropType$Primitive<'visible' | 'hidden'>),\n backgroundColor: DeprecatedColorPropType,\n borderColor: DeprecatedColorPropType,\n borderTopColor: DeprecatedColorPropType,\n borderRightColor: DeprecatedColorPropType,\n borderBottomColor: DeprecatedColorPropType,\n borderLeftColor: DeprecatedColorPropType,\n borderStartColor: DeprecatedColorPropType,\n borderEndColor: DeprecatedColorPropType,\n borderRadius: ReactPropTypes.number,\n borderTopLeftRadius: ReactPropTypes.number,\n borderTopRightRadius: ReactPropTypes.number,\n borderTopStartRadius: ReactPropTypes.number,\n borderTopEndRadius: ReactPropTypes.number,\n borderBottomLeftRadius: ReactPropTypes.number,\n borderBottomRightRadius: ReactPropTypes.number,\n borderBottomStartRadius: ReactPropTypes.number,\n borderBottomEndRadius: ReactPropTypes.number,\n borderStyle: (ReactPropTypes.oneOf([\n 'solid',\n 'dotted',\n 'dashed',\n ]): React$PropType$Primitive<'solid' | 'dotted' | 'dashed'>),\n borderWidth: ReactPropTypes.number,\n borderTopWidth: ReactPropTypes.number,\n borderRightWidth: ReactPropTypes.number,\n borderBottomWidth: ReactPropTypes.number,\n borderLeftWidth: ReactPropTypes.number,\n opacity: ReactPropTypes.number,\n /**\n * (Android-only) Sets the elevation of a view, using Android's underlying\n * [elevation API](https://developer.android.com/training/material/shadows-clipping.html#Elevation).\n * This adds a drop shadow to the item and affects z-order for overlapping views.\n * Only supported on Android 5.0+, has no effect on earlier versions.\n * @platform android\n */\n elevation: ReactPropTypes.number,\n};\n\nmodule.exports = DeprecatedViewStylePropTypes;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst ReactPropTypes = require('prop-types');\n\nconst LayoutPropTypes = {\n display: (ReactPropTypes.oneOf(['none', 'flex']): React$PropType$Primitive<\n 'none' | 'flex',\n >),\n width: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n height: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n start: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n end: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n top: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n left: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n right: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n bottom: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n minWidth: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n maxWidth: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n minHeight: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n maxHeight: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n margin: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n marginVertical: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n marginHorizontal: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n marginTop: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n marginBottom: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n marginLeft: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n marginRight: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n marginStart: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n marginEnd: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n padding: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n paddingVertical: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n paddingHorizontal: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n paddingTop: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n paddingBottom: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n paddingLeft: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n paddingRight: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n paddingStart: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n paddingEnd: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n borderWidth: ReactPropTypes.number,\n borderTopWidth: ReactPropTypes.number,\n borderStartWidth: ReactPropTypes.number,\n borderEndWidth: ReactPropTypes.number,\n borderRightWidth: ReactPropTypes.number,\n borderBottomWidth: ReactPropTypes.number,\n borderLeftWidth: ReactPropTypes.number,\n position: (ReactPropTypes.oneOf([\n 'absolute',\n 'relative',\n ]): React$PropType$Primitive<'absolute' | 'relative'>),\n flexDirection: (ReactPropTypes.oneOf([\n 'row',\n 'row-reverse',\n 'column',\n 'column-reverse',\n ]): React$PropType$Primitive<\n 'row' | 'row-reverse' | 'column' | 'column-reverse',\n >),\n flexWrap: (ReactPropTypes.oneOf([\n 'wrap',\n 'nowrap',\n 'wrap-reverse',\n ]): React$PropType$Primitive<'wrap' | 'nowrap' | 'wrap-reverse'>),\n justifyContent: (ReactPropTypes.oneOf([\n 'flex-start',\n 'flex-end',\n 'center',\n 'space-between',\n 'space-around',\n 'space-evenly',\n ]): React$PropType$Primitive<\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'space-between'\n | 'space-around'\n | 'space-evenly',\n >),\n alignItems: (ReactPropTypes.oneOf([\n 'flex-start',\n 'flex-end',\n 'center',\n 'stretch',\n 'baseline',\n ]): React$PropType$Primitive<\n 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline',\n >),\n alignSelf: (ReactPropTypes.oneOf([\n 'auto',\n 'flex-start',\n 'flex-end',\n 'center',\n 'stretch',\n 'baseline',\n ]): React$PropType$Primitive<\n 'auto' | 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline',\n >),\n alignContent: (ReactPropTypes.oneOf([\n 'flex-start',\n 'flex-end',\n 'center',\n 'stretch',\n 'space-between',\n 'space-around',\n ]): React$PropType$Primitive<\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'stretch'\n | 'space-between'\n | 'space-around',\n >),\n overflow: (ReactPropTypes.oneOf([\n 'visible',\n 'hidden',\n 'scroll',\n ]): React$PropType$Primitive<'visible' | 'hidden' | 'scroll'>),\n flex: ReactPropTypes.number,\n flexGrow: ReactPropTypes.number,\n flexShrink: ReactPropTypes.number,\n flexBasis: (ReactPropTypes.oneOfType([\n ReactPropTypes.number,\n ReactPropTypes.string,\n ]): React$PropType$Primitive),\n aspectRatio: ReactPropTypes.number,\n zIndex: ReactPropTypes.number,\n direction: (ReactPropTypes.oneOf([\n 'inherit',\n 'ltr',\n 'rtl',\n ]): React$PropType$Primitive<'inherit' | 'ltr' | 'rtl'>),\n};\n\nmodule.exports = LayoutPropTypes;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst DeprecatedColorPropType = require('./DeprecatedColorPropType');\nconst ReactPropTypes = require('prop-types');\n\nconst DeprecatedShadowPropTypesIOS = {\n shadowColor: DeprecatedColorPropType,\n shadowOffset: (ReactPropTypes.shape({\n width: ReactPropTypes.number,\n height: ReactPropTypes.number,\n }): React$PropType$Primitive<{\n height?: number,\n width?: number,\n ...\n }>),\n shadowOpacity: ReactPropTypes.number,\n shadowRadius: ReactPropTypes.number,\n};\n\nmodule.exports = DeprecatedShadowPropTypesIOS;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nconst ReactPropTypes = require('prop-types');\n\nconst deprecatedPropType = require('../Utilities/deprecatedPropType');\n\nconst TransformMatrixPropType = function(\n props: Object,\n propName: string,\n componentName: string,\n): ?Error {\n if (props[propName]) {\n return new Error(\n 'The transformMatrix style property is deprecated. ' +\n 'Use `transform: [{ matrix: ... }]` instead.',\n );\n }\n};\n\nconst DecomposedMatrixPropType = function(\n props: Object,\n propName: string,\n componentName: string,\n): ?Error {\n if (props[propName]) {\n return new Error(\n 'The decomposedMatrix style property is deprecated. ' +\n 'Use `transform: [...]` instead.',\n );\n }\n};\n\nconst DeprecatedTransformPropTypes = {\n transform: (ReactPropTypes.arrayOf(\n ReactPropTypes.oneOfType([\n ReactPropTypes.shape({perspective: ReactPropTypes.number}),\n ReactPropTypes.shape({rotate: ReactPropTypes.string}),\n ReactPropTypes.shape({rotateX: ReactPropTypes.string}),\n ReactPropTypes.shape({rotateY: ReactPropTypes.string}),\n ReactPropTypes.shape({rotateZ: ReactPropTypes.string}),\n ReactPropTypes.shape({scale: ReactPropTypes.number}),\n ReactPropTypes.shape({scaleX: ReactPropTypes.number}),\n ReactPropTypes.shape({scaleY: ReactPropTypes.number}),\n ReactPropTypes.shape({translateX: ReactPropTypes.number}),\n ReactPropTypes.shape({translateY: ReactPropTypes.number}),\n ReactPropTypes.shape({skewX: ReactPropTypes.string}),\n ReactPropTypes.shape({skewY: ReactPropTypes.string}),\n ]),\n ): React$PropType$Primitive<\n Array<\n | {perspective?: number, ...}\n | {rotate?: string, ...}\n | {rotateX?: string, ...}\n | {rotateY?: string, ...}\n | {rotateZ?: string, ...}\n | {scale?: number, ...}\n | {scaleX?: number, ...}\n | {scaleY?: number, ...}\n | {translateX?: number, ...}\n | {translateY?: number, ...}\n | {skewX?: string, ...}\n | {skewY?: string, ...},\n >,\n >),\n transformMatrix: TransformMatrixPropType,\n decomposedMatrix: DecomposedMatrixPropType,\n scaleX: (deprecatedPropType(\n ReactPropTypes.number,\n 'Use the transform prop instead.',\n ): ReactPropsCheckType),\n scaleY: (deprecatedPropType(\n ReactPropTypes.number,\n 'Use the transform prop instead.',\n ): ReactPropsCheckType),\n rotation: (deprecatedPropType(\n ReactPropTypes.number,\n 'Use the transform prop instead.',\n ): ReactPropsCheckType),\n translateX: (deprecatedPropType(\n ReactPropTypes.number,\n 'Use the transform prop instead.',\n ): ReactPropsCheckType),\n translateY: (deprecatedPropType(\n ReactPropTypes.number,\n 'Use the transform prop instead.',\n ): ReactPropsCheckType),\n};\n\nmodule.exports = DeprecatedTransformPropTypes;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport UIManager from '../ReactNative/UIManager';\n\n/**\n * Adds a deprecation warning when the prop is used.\n */\nfunction deprecatedPropType(\n propType: ReactPropsCheckType,\n explanation: string,\n): ReactPropsCheckType {\n return function validate(props, propName, componentName, ...rest) {\n // Don't warn for native components.\n if (\n global.RN$Bridgeless !== true &&\n !UIManager.hasViewManagerConfig(componentName) &&\n props[propName] !== undefined\n ) {\n console.warn(\n `\\`${propName}\\` supplied to \\`${componentName}\\` has been deprecated. ${explanation}`,\n );\n }\n\n return propType(props, propName, componentName, ...rest);\n };\n}\n\nmodule.exports = deprecatedPropType;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport normalizeColor from '../StyleSheet/normalizeColor';\nimport type {ColorValue} from '../StyleSheet/StyleSheet';\n\nimport View from '../Components/View/View';\nimport * as React from 'react';\n\ntype Props = $ReadOnly<{|\n color: ColorValue,\n hitSlop: ?$ReadOnly<{|\n bottom?: ?number,\n left?: ?number,\n right?: ?number,\n top?: ?number,\n |}>,\n|}>;\n\n/**\n * Displays a debug overlay to visualize press targets when enabled via the\n * React Native Inspector. Calls to this module should be guarded by `__DEV__`,\n * for example:\n *\n * return (\n * \n * {children}\n * {__DEV__ ? (\n * \n * ) : null}\n * \n * );\n *\n */\nexport function PressabilityDebugView({color, hitSlop}: Props): React.Node {\n if (__DEV__) {\n if (isEnabled()) {\n const normalizedColor = normalizeColor(color);\n if (typeof normalizedColor !== 'number') {\n return null;\n }\n const baseColor =\n '#' + (normalizedColor ?? 0).toString(16).padStart(8, '0');\n\n return (\n \n );\n }\n }\n return null;\n}\n\nlet isDebugEnabled = false;\n\nexport function isEnabled(): boolean {\n if (__DEV__) {\n return isDebugEnabled;\n }\n return false;\n}\n\nexport function setEnabled(value: boolean): void {\n if (__DEV__) {\n isDebugEnabled = value;\n }\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport Pressability, {\n type EventHandlers,\n type PressabilityConfig,\n} from './Pressability';\nimport {useEffect, useRef} from 'react';\n\n/**\n * Creates a persistent instance of `Pressability` that automatically configures\n * itself and resets. Accepts null `config` to support lazy initialization. Once\n * initialized, will not un-initialize until the component has been unmounted.\n */\nexport default function usePressability(\n config: ?PressabilityConfig,\n): ?EventHandlers {\n const pressabilityRef = useRef(null);\n if (config != null && pressabilityRef.current == null) {\n pressabilityRef.current = new Pressability(config);\n }\n const pressability = pressabilityRef.current;\n\n // On the initial mount, this is a no-op. On updates, `pressability` will be\n // re-configured to use the new configuration.\n useEffect(() => {\n if (config != null && pressability != null) {\n pressability.configure(config);\n }\n }, [config, pressability]);\n\n // On unmount, reset pending state and timers inside `pressability`. This is\n // a separate effect because we do not want to reset when `config` changes.\n useEffect(() => {\n if (pressability != null) {\n return () => {\n pressability.reset();\n };\n }\n }, [pressability]);\n\n return pressability == null ? null : pressability.getEventHandlers();\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport {isHoverEnabled} from './HoverState';\nimport invariant from 'invariant';\nimport SoundManager from '../Components/Sound/SoundManager';\nimport {normalizeRect, type RectOrSize} from '../StyleSheet/Rect';\nimport type {\n BlurEvent,\n FocusEvent,\n PressEvent,\n MouseEvent,\n} from '../Types/CoreEventTypes';\nimport PressabilityPerformanceEventEmitter from './PressabilityPerformanceEventEmitter.js';\nimport {type PressabilityTouchSignal as TouchSignal} from './PressabilityTypes.js';\nimport Platform from '../Utilities/Platform';\nimport UIManager from '../ReactNative/UIManager';\nimport type {HostComponent} from '../Renderer/shims/ReactNativeTypes';\nimport * as React from 'react';\n\nexport type PressabilityConfig = $ReadOnly<{|\n /**\n * Whether a press gesture can be interrupted by a parent gesture such as a\n * scroll event. Defaults to true.\n */\n cancelable?: ?boolean,\n\n /**\n * Whether to disable initialization of the press gesture.\n */\n disabled?: ?boolean,\n\n /**\n * Amount to extend the `VisualRect` by to create `HitRect`.\n */\n hitSlop?: ?RectOrSize,\n\n /**\n * Amount to extend the `HitRect` by to create `PressRect`.\n */\n pressRectOffset?: ?RectOrSize,\n\n /**\n * Whether to disable the systemm sound when `onPress` fires on Android.\n **/\n android_disableSound?: ?boolean,\n\n /**\n * Duration to wait after hover in before calling `onHoverIn`.\n */\n delayHoverIn?: ?number,\n\n /**\n * Duration to wait after hover out before calling `onHoverOut`.\n */\n delayHoverOut?: ?number,\n\n /**\n * Duration (in addition to `delayPressIn`) after which a press gesture is\n * considered a long press gesture. Defaults to 500 (milliseconds).\n */\n delayLongPress?: ?number,\n\n /**\n * Duration to wait after press down before calling `onPressIn`.\n */\n delayPressIn?: ?number,\n\n /**\n * Duration to wait after letting up before calling `onPressOut`.\n */\n delayPressOut?: ?number,\n\n /**\n * Minimum duration to wait between calling `onPressIn` and `onPressOut`.\n */\n minPressDuration?: ?number,\n\n /**\n * Called after the element loses focus.\n */\n onBlur?: ?(event: BlurEvent) => mixed,\n\n /**\n * Called after the element is focused.\n */\n onFocus?: ?(event: FocusEvent) => mixed,\n\n /**\n * Called when the hover is activated to provide visual feedback.\n */\n onHoverIn?: ?(event: MouseEvent) => mixed,\n\n /**\n * Called when the hover is deactivated to undo visual feedback.\n */\n onHoverOut?: ?(event: MouseEvent) => mixed,\n\n /**\n * Called when a long press gesture has been triggered.\n */\n onLongPress?: ?(event: PressEvent) => mixed,\n\n /**\n * Called when a press gestute has been triggered.\n */\n onPress?: ?(event: PressEvent) => mixed,\n\n /**\n * Called when the press is activated to provide visual feedback.\n */\n onPressIn?: ?(event: PressEvent) => mixed,\n\n /**\n * Called when the press location moves. (This should rarely be used.)\n */\n onPressMove?: ?(event: PressEvent) => mixed,\n\n /**\n * Called when the press is deactivated to undo visual feedback.\n */\n onPressOut?: ?(event: PressEvent) => mixed,\n\n /**\n * Returns whether a long press gesture should cancel the press gesture.\n * Defaults to true.\n */\n onLongPressShouldCancelPress_DEPRECATED?: ?() => boolean,\n\n /**\n * If `cancelable` is set, this will be ignored.\n *\n * Returns whether to yield to a lock termination request (e.g. if a native\n * scroll gesture attempts to steal the responder lock).\n */\n onResponderTerminationRequest_DEPRECATED?: ?() => boolean,\n\n /**\n * If `disabled` is set, this will be ignored.\n *\n * Returns whether to start a press gesture.\n *\n * @deprecated\n */\n onStartShouldSetResponder_DEPRECATED?: ?() => boolean,\n|}>;\n\nexport type EventHandlers = $ReadOnly<{|\n onBlur: (event: BlurEvent) => void,\n onClick: (event: PressEvent) => void,\n onFocus: (event: FocusEvent) => void,\n onMouseEnter?: (event: MouseEvent) => void,\n onMouseLeave?: (event: MouseEvent) => void,\n onResponderGrant: (event: PressEvent) => void,\n onResponderMove: (event: PressEvent) => void,\n onResponderRelease: (event: PressEvent) => void,\n onResponderTerminate: (event: PressEvent) => void,\n onResponderTerminationRequest: () => boolean,\n onStartShouldSetResponder: () => boolean,\n|}>;\n\ntype TouchState =\n | 'NOT_RESPONDER'\n | 'RESPONDER_INACTIVE_PRESS_IN'\n | 'RESPONDER_INACTIVE_PRESS_OUT'\n | 'RESPONDER_ACTIVE_PRESS_IN'\n | 'RESPONDER_ACTIVE_PRESS_OUT'\n | 'RESPONDER_ACTIVE_LONG_PRESS_IN'\n | 'RESPONDER_ACTIVE_LONG_PRESS_OUT'\n | 'ERROR';\n\nconst Transitions = Object.freeze({\n NOT_RESPONDER: {\n DELAY: 'ERROR',\n RESPONDER_GRANT: 'RESPONDER_INACTIVE_PRESS_IN',\n RESPONDER_RELEASE: 'ERROR',\n RESPONDER_TERMINATED: 'ERROR',\n ENTER_PRESS_RECT: 'ERROR',\n LEAVE_PRESS_RECT: 'ERROR',\n LONG_PRESS_DETECTED: 'ERROR',\n },\n RESPONDER_INACTIVE_PRESS_IN: {\n DELAY: 'RESPONDER_ACTIVE_PRESS_IN',\n RESPONDER_GRANT: 'ERROR',\n RESPONDER_RELEASE: 'NOT_RESPONDER',\n RESPONDER_TERMINATED: 'NOT_RESPONDER',\n ENTER_PRESS_RECT: 'RESPONDER_INACTIVE_PRESS_IN',\n LEAVE_PRESS_RECT: 'RESPONDER_INACTIVE_PRESS_OUT',\n LONG_PRESS_DETECTED: 'ERROR',\n },\n RESPONDER_INACTIVE_PRESS_OUT: {\n DELAY: 'RESPONDER_ACTIVE_PRESS_OUT',\n RESPONDER_GRANT: 'ERROR',\n RESPONDER_RELEASE: 'NOT_RESPONDER',\n RESPONDER_TERMINATED: 'NOT_RESPONDER',\n ENTER_PRESS_RECT: 'RESPONDER_INACTIVE_PRESS_IN',\n LEAVE_PRESS_RECT: 'RESPONDER_INACTIVE_PRESS_OUT',\n LONG_PRESS_DETECTED: 'ERROR',\n },\n RESPONDER_ACTIVE_PRESS_IN: {\n DELAY: 'ERROR',\n RESPONDER_GRANT: 'ERROR',\n RESPONDER_RELEASE: 'NOT_RESPONDER',\n RESPONDER_TERMINATED: 'NOT_RESPONDER',\n ENTER_PRESS_RECT: 'RESPONDER_ACTIVE_PRESS_IN',\n LEAVE_PRESS_RECT: 'RESPONDER_ACTIVE_PRESS_OUT',\n LONG_PRESS_DETECTED: 'RESPONDER_ACTIVE_LONG_PRESS_IN',\n },\n RESPONDER_ACTIVE_PRESS_OUT: {\n DELAY: 'ERROR',\n RESPONDER_GRANT: 'ERROR',\n RESPONDER_RELEASE: 'NOT_RESPONDER',\n RESPONDER_TERMINATED: 'NOT_RESPONDER',\n ENTER_PRESS_RECT: 'RESPONDER_ACTIVE_PRESS_IN',\n LEAVE_PRESS_RECT: 'RESPONDER_ACTIVE_PRESS_OUT',\n LONG_PRESS_DETECTED: 'ERROR',\n },\n RESPONDER_ACTIVE_LONG_PRESS_IN: {\n DELAY: 'ERROR',\n RESPONDER_GRANT: 'ERROR',\n RESPONDER_RELEASE: 'NOT_RESPONDER',\n RESPONDER_TERMINATED: 'NOT_RESPONDER',\n ENTER_PRESS_RECT: 'RESPONDER_ACTIVE_LONG_PRESS_IN',\n LEAVE_PRESS_RECT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT',\n LONG_PRESS_DETECTED: 'RESPONDER_ACTIVE_LONG_PRESS_IN',\n },\n RESPONDER_ACTIVE_LONG_PRESS_OUT: {\n DELAY: 'ERROR',\n RESPONDER_GRANT: 'ERROR',\n RESPONDER_RELEASE: 'NOT_RESPONDER',\n RESPONDER_TERMINATED: 'NOT_RESPONDER',\n ENTER_PRESS_RECT: 'RESPONDER_ACTIVE_LONG_PRESS_IN',\n LEAVE_PRESS_RECT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT',\n LONG_PRESS_DETECTED: 'ERROR',\n },\n ERROR: {\n DELAY: 'NOT_RESPONDER',\n RESPONDER_GRANT: 'RESPONDER_INACTIVE_PRESS_IN',\n RESPONDER_RELEASE: 'NOT_RESPONDER',\n RESPONDER_TERMINATED: 'NOT_RESPONDER',\n ENTER_PRESS_RECT: 'NOT_RESPONDER',\n LEAVE_PRESS_RECT: 'NOT_RESPONDER',\n LONG_PRESS_DETECTED: 'NOT_RESPONDER',\n },\n});\n\nconst isActiveSignal = signal =>\n signal === 'RESPONDER_ACTIVE_PRESS_IN' ||\n signal === 'RESPONDER_ACTIVE_LONG_PRESS_IN';\n\nconst isActivationSignal = signal =>\n signal === 'RESPONDER_ACTIVE_PRESS_OUT' ||\n signal === 'RESPONDER_ACTIVE_PRESS_IN';\n\nconst isPressInSignal = signal =>\n signal === 'RESPONDER_INACTIVE_PRESS_IN' ||\n signal === 'RESPONDER_ACTIVE_PRESS_IN' ||\n signal === 'RESPONDER_ACTIVE_LONG_PRESS_IN';\n\nconst isTerminalSignal = signal =>\n signal === 'RESPONDER_TERMINATED' || signal === 'RESPONDER_RELEASE';\n\nconst DEFAULT_LONG_PRESS_DELAY_MS = 500;\nconst DEFAULT_PRESS_RECT_OFFSETS = {\n bottom: 30,\n left: 20,\n right: 20,\n top: 20,\n};\nconst DEFAULT_MIN_PRESS_DURATION = 130;\n\n/**\n * Pressability implements press handling capabilities.\n *\n * =========================== Pressability Tutorial ===========================\n *\n * The `Pressability` class helps you create press interactions by analyzing the\n * geometry of elements and observing when another responder (e.g. ScrollView)\n * has stolen the touch lock. It offers hooks for your component to provide\n * interaction feedback to the user:\n *\n * - When a press has activated (e.g. highlight an element)\n * - When a press has deactivated (e.g. un-highlight an element)\n * - When a press sould trigger an action, meaning it activated and deactivated\n * while within the geometry of the element without the lock being stolen.\n *\n * A high quality interaction isn't as simple as you might think. There should\n * be a slight delay before activation. Moving your finger beyond an element's\n * bounds should trigger deactivation, but moving the same finger back within an\n * element's bounds should trigger reactivation.\n *\n * In order to use `Pressability`, do the following:\n *\n * 1. Instantiate `Pressability` and store it on your component's state.\n *\n * state = {\n * pressability: new Pressability({\n * // ...\n * }),\n * };\n *\n * 2. Choose the rendered component who should collect the press events. On that\n * element, spread `pressability.getEventHandlers()` into its props.\n *\n * return (\n * \n * );\n *\n * 3. Reset `Pressability` when your component unmounts.\n *\n * componentWillUnmount() {\n * this.state.pressability.reset();\n * }\n *\n * ==================== Pressability Implementation Details ====================\n *\n * `Pressability` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n * # Geometry\n *\n * ┌────────────────────────┐\n * │ ┌──────────────────┐ │ - Presses start anywhere within `HitRect`, which\n * │ │ ┌────────────┐ │ │ is expanded via the prop `hitSlop`.\n * │ │ │ VisualRect │ │ │\n * │ │ └────────────┘ │ │ - When pressed down for sufficient amount of time\n * │ │ HitRect │ │ before letting up, `VisualRect` activates for\n * │ └──────────────────┘ │ as long as the press stays within `PressRect`.\n * │ PressRect o │\n * └────────────────────│───┘\n * Out Region └────── `PressRect`, which is expanded via the prop\n * `pressRectOffset`, allows presses to move\n * beyond `HitRect` while maintaining activation\n * and being eligible for a \"press\".\n *\n * # State Machine\n *\n * ┌───────────────┐ ◀──── RESPONDER_RELEASE\n * │ NOT_RESPONDER │\n * └───┬───────────┘ ◀──── RESPONDER_TERMINATED\n * │\n * │ RESPONDER_GRANT (HitRect)\n * │\n * ▼\n * ┌─────────────────────┐ ┌───────────────────┐ ┌───────────────────┐\n * │ RESPONDER_INACTIVE_ │ DELAY │ RESPONDER_ACTIVE_ │ T + DELAY │ RESPONDER_ACTIVE_ │\n * │ PRESS_IN ├────────▶ │ PRESS_IN ├────────────▶ │ LONG_PRESS_IN │\n * └─┬───────────────────┘ └─┬─────────────────┘ └─┬─────────────────┘\n * │ ▲ │ ▲ │ ▲\n * │LEAVE_ │ │LEAVE_ │ │LEAVE_ │\n * │PRESS_RECT │ENTER_ │PRESS_RECT │ENTER_ │PRESS_RECT │ENTER_\n * │ │PRESS_RECT │ │PRESS_RECT │ │PRESS_RECT\n * ▼ │ ▼ │ ▼ │\n * ┌─────────────┴───────┐ ┌─────────────┴─────┐ ┌─────────────┴─────┐\n * │ RESPONDER_INACTIVE_ │ DELAY │ RESPONDER_ACTIVE_ │ │ RESPONDER_ACTIVE_ │\n * │ PRESS_OUT ├────────▶ │ PRESS_OUT │ │ LONG_PRESS_OUT │\n * └─────────────────────┘ └───────────────────┘ └───────────────────┘\n *\n * T + DELAY => LONG_PRESS_DELAY + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the invocation of `onPress` and `onLongPress` that occur when a\n * responder is release while in the \"press in\" states.\n */\nexport default class Pressability {\n _config: PressabilityConfig;\n _eventHandlers: ?EventHandlers = null;\n _hoverInDelayTimeout: ?TimeoutID = null;\n _hoverOutDelayTimeout: ?TimeoutID = null;\n _isHovered: boolean = false;\n _longPressDelayTimeout: ?TimeoutID = null;\n _pressDelayTimeout: ?TimeoutID = null;\n _pressOutDelayTimeout: ?TimeoutID = null;\n _responderID: ?number | React.ElementRef> = null;\n _responderRegion: ?$ReadOnly<{|\n bottom: number,\n left: number,\n right: number,\n top: number,\n |}> = null;\n _touchActivatePosition: ?$ReadOnly<{|\n pageX: number,\n pageY: number,\n |}>;\n _touchActivateTime: ?number;\n _touchState: TouchState = 'NOT_RESPONDER';\n\n constructor(config: PressabilityConfig) {\n this.configure(config);\n }\n\n configure(config: PressabilityConfig): void {\n this._config = config;\n }\n\n /**\n * Resets any pending timers. This should be called on unmount.\n */\n reset(): void {\n this._cancelHoverInDelayTimeout();\n this._cancelHoverOutDelayTimeout();\n this._cancelLongPressDelayTimeout();\n this._cancelPressDelayTimeout();\n this._cancelPressOutDelayTimeout();\n\n // Ensure that, if any async event handlers are fired after unmount\n // due to a race, we don't call any configured callbacks.\n this._config = Object.freeze({});\n }\n\n /**\n * Returns a set of props to spread into the interactive element.\n */\n getEventHandlers(): EventHandlers {\n if (this._eventHandlers == null) {\n this._eventHandlers = this._createEventHandlers();\n }\n return this._eventHandlers;\n }\n\n _createEventHandlers(): EventHandlers {\n const focusEventHandlers = {\n onBlur: (event: BlurEvent): void => {\n const {onBlur} = this._config;\n if (onBlur != null) {\n onBlur(event);\n }\n },\n onFocus: (event: FocusEvent): void => {\n const {onFocus} = this._config;\n if (onFocus != null) {\n onFocus(event);\n }\n },\n };\n\n const responderEventHandlers = {\n onStartShouldSetResponder: (): boolean => {\n const {disabled} = this._config;\n if (disabled == null) {\n const {onStartShouldSetResponder_DEPRECATED} = this._config;\n return onStartShouldSetResponder_DEPRECATED == null\n ? true\n : onStartShouldSetResponder_DEPRECATED();\n }\n return !disabled;\n },\n\n onResponderGrant: (event: PressEvent): void => {\n event.persist();\n\n this._cancelPressOutDelayTimeout();\n\n this._responderID = event.currentTarget;\n this._touchState = 'NOT_RESPONDER';\n this._receiveSignal('RESPONDER_GRANT', event);\n\n const delayPressIn = normalizeDelay(this._config.delayPressIn);\n if (delayPressIn > 0) {\n this._pressDelayTimeout = setTimeout(() => {\n this._receiveSignal('DELAY', event);\n }, delayPressIn);\n } else {\n this._receiveSignal('DELAY', event);\n }\n\n const delayLongPress = normalizeDelay(\n this._config.delayLongPress,\n 10,\n DEFAULT_LONG_PRESS_DELAY_MS - delayPressIn,\n );\n this._longPressDelayTimeout = setTimeout(() => {\n this._handleLongPress(event);\n }, delayLongPress + delayPressIn);\n },\n\n onResponderMove: (event: PressEvent): void => {\n const {onPressMove} = this._config;\n if (onPressMove != null) {\n onPressMove(event);\n }\n\n // Region may not have finished being measured, yet.\n const responderRegion = this._responderRegion;\n if (responderRegion == null) {\n return;\n }\n\n const touch = getTouchFromPressEvent(event);\n if (touch == null) {\n this._cancelLongPressDelayTimeout();\n this._receiveSignal('LEAVE_PRESS_RECT', event);\n return;\n }\n\n if (this._touchActivatePosition != null) {\n const deltaX = this._touchActivatePosition.pageX - touch.pageX;\n const deltaY = this._touchActivatePosition.pageY - touch.pageY;\n if (Math.hypot(deltaX, deltaY) > 10) {\n this._cancelLongPressDelayTimeout();\n }\n }\n\n if (this._isTouchWithinResponderRegion(touch, responderRegion)) {\n this._receiveSignal('ENTER_PRESS_RECT', event);\n } else {\n this._cancelLongPressDelayTimeout();\n this._receiveSignal('LEAVE_PRESS_RECT', event);\n }\n },\n\n onResponderRelease: (event: PressEvent): void => {\n this._receiveSignal('RESPONDER_RELEASE', event);\n },\n\n onResponderTerminate: (event: PressEvent): void => {\n this._receiveSignal('RESPONDER_TERMINATED', event);\n },\n\n onResponderTerminationRequest: (): boolean => {\n const {cancelable} = this._config;\n if (cancelable == null) {\n const {onResponderTerminationRequest_DEPRECATED} = this._config;\n return onResponderTerminationRequest_DEPRECATED == null\n ? true\n : onResponderTerminationRequest_DEPRECATED();\n }\n return cancelable;\n },\n\n onClick: (event: PressEvent): void => {\n const {onPress, disabled} = this._config;\n if (onPress != null && disabled !== true) {\n onPress(event);\n }\n },\n };\n\n if (process.env.NODE_ENV === 'test') {\n // We are setting this in order to find this node in ReactNativeTestTools\n responderEventHandlers.onStartShouldSetResponder.testOnly_pressabilityConfig = () =>\n this._config;\n }\n\n const mouseEventHandlers =\n Platform.OS === 'ios' || Platform.OS === 'android'\n ? null\n : {\n onMouseEnter: (event: MouseEvent): void => {\n if (isHoverEnabled()) {\n this._isHovered = true;\n this._cancelHoverOutDelayTimeout();\n const {onHoverIn} = this._config;\n if (onHoverIn != null) {\n const delayHoverIn = normalizeDelay(\n this._config.delayHoverIn,\n );\n if (delayHoverIn > 0) {\n event.persist();\n this._hoverInDelayTimeout = setTimeout(() => {\n onHoverIn(event);\n }, delayHoverIn);\n } else {\n onHoverIn(event);\n }\n }\n }\n },\n\n onMouseLeave: (event: MouseEvent): void => {\n if (this._isHovered) {\n this._isHovered = false;\n this._cancelHoverInDelayTimeout();\n const {onHoverOut} = this._config;\n if (onHoverOut != null) {\n const delayHoverOut = normalizeDelay(\n this._config.delayHoverOut,\n );\n if (delayHoverOut > 0) {\n event.persist();\n this._hoverInDelayTimeout = setTimeout(() => {\n onHoverOut(event);\n }, delayHoverOut);\n } else {\n onHoverOut(event);\n }\n }\n }\n },\n };\n\n return {\n ...focusEventHandlers,\n ...responderEventHandlers,\n ...mouseEventHandlers,\n };\n }\n\n /**\n * Receives a state machine signal, performs side effects of the transition\n * and stores the new state. Validates the transition as well.\n */\n _receiveSignal(signal: TouchSignal, event: PressEvent): void {\n const prevState = this._touchState;\n const nextState = Transitions[prevState]?.[signal];\n if (this._responderID == null && signal === 'RESPONDER_RELEASE') {\n return;\n }\n invariant(\n nextState != null && nextState !== 'ERROR',\n 'Pressability: Invalid signal `%s` for state `%s` on responder: %s',\n signal,\n prevState,\n typeof this._responderID === 'number'\n ? this._responderID\n : '<>',\n );\n if (prevState !== nextState) {\n // Especially on iOS, not all events have timestamps associated.\n // For telemetry purposes, this doesn't matter too much, as long as *some* do.\n // Since the native timestamp is integral for logging telemetry, just skip\n // events if they don't have a timestamp attached.\n if (event.nativeEvent.timestamp != null) {\n PressabilityPerformanceEventEmitter.emitEvent(() => {\n return {\n signal,\n touchDelayMs: Date.now() - event.nativeEvent.timestamp,\n };\n });\n }\n\n this._performTransitionSideEffects(prevState, nextState, signal, event);\n this._touchState = nextState;\n }\n }\n\n /**\n * Performs a transition between touchable states and identify any activations\n * or deactivations (and callback invocations).\n */\n _performTransitionSideEffects(\n prevState: TouchState,\n nextState: TouchState,\n signal: TouchSignal,\n event: PressEvent,\n ): void {\n if (isTerminalSignal(signal)) {\n this._touchActivatePosition = null;\n this._cancelLongPressDelayTimeout();\n }\n\n const isInitialTransition =\n prevState === 'NOT_RESPONDER' &&\n nextState === 'RESPONDER_INACTIVE_PRESS_IN';\n\n const isActivationTransition =\n !isActivationSignal(prevState) && isActivationSignal(nextState);\n\n if (isInitialTransition || isActivationTransition) {\n this._measureResponderRegion();\n }\n\n if (isPressInSignal(prevState) && signal === 'LONG_PRESS_DETECTED') {\n const {onLongPress} = this._config;\n if (onLongPress != null) {\n onLongPress(event);\n }\n }\n\n const isPrevActive = isActiveSignal(prevState);\n const isNextActive = isActiveSignal(nextState);\n\n if (!isPrevActive && isNextActive) {\n this._activate(event);\n } else if (isPrevActive && !isNextActive) {\n this._deactivate(event);\n }\n\n if (isPressInSignal(prevState) && signal === 'RESPONDER_RELEASE') {\n // If we never activated (due to delays), activate and deactivate now.\n if (!isNextActive && !isPrevActive) {\n this._activate(event);\n this._deactivate(event);\n }\n const {onLongPress, onPress, android_disableSound} = this._config;\n if (onPress != null) {\n const isPressCanceledByLongPress =\n onLongPress != null &&\n prevState === 'RESPONDER_ACTIVE_LONG_PRESS_IN' &&\n this._shouldLongPressCancelPress();\n if (!isPressCanceledByLongPress) {\n if (Platform.OS === 'android' && android_disableSound !== true) {\n SoundManager.playTouchSound();\n }\n onPress(event);\n }\n }\n }\n\n this._cancelPressDelayTimeout();\n }\n\n _activate(event: PressEvent): void {\n const {onPressIn} = this._config;\n const {pageX, pageY} = getTouchFromPressEvent(event);\n this._touchActivatePosition = {pageX, pageY};\n this._touchActivateTime = Date.now();\n if (onPressIn != null) {\n onPressIn(event);\n }\n }\n\n _deactivate(event: PressEvent): void {\n const {onPressOut} = this._config;\n if (onPressOut != null) {\n const minPressDuration = normalizeDelay(\n this._config.minPressDuration,\n 0,\n DEFAULT_MIN_PRESS_DURATION,\n );\n const pressDuration = Date.now() - (this._touchActivateTime ?? 0);\n const delayPressOut = Math.max(\n minPressDuration - pressDuration,\n normalizeDelay(this._config.delayPressOut),\n );\n if (delayPressOut > 0) {\n event.persist();\n this._pressOutDelayTimeout = setTimeout(() => {\n onPressOut(event);\n }, delayPressOut);\n } else {\n onPressOut(event);\n }\n }\n this._touchActivateTime = null;\n }\n\n _measureResponderRegion(): void {\n if (this._responderID == null) {\n return;\n }\n\n if (typeof this._responderID === 'number') {\n UIManager.measure(this._responderID, this._measureCallback);\n } else {\n this._responderID.measure(this._measureCallback);\n }\n }\n\n _measureCallback = (left, top, width, height, pageX, pageY) => {\n if (!left && !top && !width && !height && !pageX && !pageY) {\n return;\n }\n this._responderRegion = {\n bottom: pageY + height,\n left: pageX,\n right: pageX + width,\n top: pageY,\n };\n };\n\n _isTouchWithinResponderRegion(\n touch: $PropertyType,\n responderRegion: $ReadOnly<{|\n bottom: number,\n left: number,\n right: number,\n top: number,\n |}>,\n ): boolean {\n const hitSlop = normalizeRect(this._config.hitSlop);\n const pressRectOffset = normalizeRect(this._config.pressRectOffset);\n\n let regionBottom = responderRegion.bottom;\n let regionLeft = responderRegion.left;\n let regionRight = responderRegion.right;\n let regionTop = responderRegion.top;\n\n if (hitSlop != null) {\n if (hitSlop.bottom != null) {\n regionBottom += hitSlop.bottom;\n }\n if (hitSlop.left != null) {\n regionLeft -= hitSlop.left;\n }\n if (hitSlop.right != null) {\n regionRight += hitSlop.right;\n }\n if (hitSlop.top != null) {\n regionTop -= hitSlop.top;\n }\n }\n\n regionBottom +=\n pressRectOffset?.bottom ?? DEFAULT_PRESS_RECT_OFFSETS.bottom;\n regionLeft -= pressRectOffset?.left ?? DEFAULT_PRESS_RECT_OFFSETS.left;\n regionRight += pressRectOffset?.right ?? DEFAULT_PRESS_RECT_OFFSETS.right;\n regionTop -= pressRectOffset?.top ?? DEFAULT_PRESS_RECT_OFFSETS.top;\n\n return (\n touch.pageX > regionLeft &&\n touch.pageX < regionRight &&\n touch.pageY > regionTop &&\n touch.pageY < regionBottom\n );\n }\n\n _handleLongPress(event: PressEvent): void {\n if (\n this._touchState === 'RESPONDER_ACTIVE_PRESS_IN' ||\n this._touchState === 'RESPONDER_ACTIVE_LONG_PRESS_IN'\n ) {\n this._receiveSignal('LONG_PRESS_DETECTED', event);\n }\n }\n\n _shouldLongPressCancelPress(): boolean {\n return (\n this._config.onLongPressShouldCancelPress_DEPRECATED == null ||\n this._config.onLongPressShouldCancelPress_DEPRECATED()\n );\n }\n\n _cancelHoverInDelayTimeout(): void {\n if (this._hoverInDelayTimeout != null) {\n clearTimeout(this._hoverInDelayTimeout);\n this._hoverInDelayTimeout = null;\n }\n }\n\n _cancelHoverOutDelayTimeout(): void {\n if (this._hoverOutDelayTimeout != null) {\n clearTimeout(this._hoverOutDelayTimeout);\n this._hoverOutDelayTimeout = null;\n }\n }\n\n _cancelLongPressDelayTimeout(): void {\n if (this._longPressDelayTimeout != null) {\n clearTimeout(this._longPressDelayTimeout);\n this._longPressDelayTimeout = null;\n }\n }\n\n _cancelPressDelayTimeout(): void {\n if (this._pressDelayTimeout != null) {\n clearTimeout(this._pressDelayTimeout);\n this._pressDelayTimeout = null;\n }\n }\n\n _cancelPressOutDelayTimeout(): void {\n if (this._pressOutDelayTimeout != null) {\n clearTimeout(this._pressOutDelayTimeout);\n this._pressOutDelayTimeout = null;\n }\n }\n}\n\nfunction normalizeDelay(delay: ?number, min = 0, fallback = 0): number {\n return Math.max(min, delay ?? fallback);\n}\n\nconst getTouchFromPressEvent = (event: PressEvent) => {\n const {changedTouches, touches} = event.nativeEvent;\n\n if (touches != null && touches.length > 0) {\n return touches[0];\n }\n if (changedTouches != null && changedTouches.length > 0) {\n return changedTouches[0];\n }\n return event.nativeEvent;\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport Platform from '../Utilities/Platform';\n\nlet isEnabled = false;\n\nif (Platform.OS === 'web') {\n const canUseDOM = Boolean(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement,\n );\n\n if (canUseDOM) {\n /**\n * Web browsers emulate mouse events (and hover states) after touch events.\n * This code infers when the currently-in-use modality supports hover\n * (including for multi-modality devices) and considers \"hover\" to be enabled\n * if a mouse movement occurs more than 1 second after the last touch event.\n * This threshold is long enough to account for longer delays between the\n * browser firing touch and mouse events on low-powered devices.\n */\n const HOVER_THRESHOLD_MS = 1000;\n let lastTouchTimestamp = 0;\n\n const enableHover = () => {\n if (isEnabled || Date.now() - lastTouchTimestamp < HOVER_THRESHOLD_MS) {\n return;\n }\n isEnabled = true;\n };\n\n const disableHover = () => {\n lastTouchTimestamp = Date.now();\n if (isEnabled) {\n isEnabled = false;\n }\n };\n\n document.addEventListener('touchstart', disableHover, true);\n document.addEventListener('touchmove', disableHover, true);\n document.addEventListener('mousemove', enableHover, true);\n }\n}\n\nexport function isHoverEnabled(): boolean {\n return isEnabled;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nimport NativeSoundManager from './NativeSoundManager';\n\nconst SoundManager = {\n playTouchSound: function(): void {\n if (NativeSoundManager) {\n NativeSoundManager.playTouchSound();\n }\n },\n};\n\nmodule.exports = SoundManager;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\n/**\n * Native Module used for playing sounds in native platform.\n */\nexport interface Spec extends TurboModule {\n +playTouchSound: () => void;\n}\n\nexport default (TurboModuleRegistry.get('SoundManager'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nexport type Rect = $ReadOnly<{|\n bottom?: ?number,\n left?: ?number,\n right?: ?number,\n top?: ?number,\n|}>;\n\nexport type RectOrSize = Rect | number;\n\nexport function createSquare(size: number): Rect {\n return {bottom: size, left: size, right: size, top: size};\n}\n\nexport function normalizeRect(rectOrSize: ?RectOrSize): ?Rect {\n return typeof rectOrSize === 'number' ? createSquare(rectOrSize) : rectOrSize;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport {type PressabilityTouchSignal as TouchSignal} from './PressabilityTypes.js';\n\nexport type PressabilityPerformanceEvent = $ReadOnly<{|\n signal: TouchSignal,\n touchDelayMs: number,\n|}>;\nexport type PressabilityPerformanceEventListener = PressabilityPerformanceEvent => void;\n\nclass PressabilityPerformanceEventEmitter {\n _listeners: Array = [];\n\n constructor() {}\n\n addListener(listener: PressabilityPerformanceEventListener): void {\n this._listeners.push(listener);\n }\n\n removeListener(listener: PressabilityPerformanceEventListener): void {\n const index = this._listeners.indexOf(listener);\n if (index > -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n emitEvent(constructEvent: () => PressabilityPerformanceEvent): void {\n if (this._listeners.length === 0) {\n return;\n }\n\n const event = constructEvent();\n this._listeners.forEach(listener => listener(event));\n }\n}\n\nconst PressabilityPerformanceEventEmitterSingleton: PressabilityPerformanceEventEmitter = new PressabilityPerformanceEventEmitter();\n\nexport default PressabilityPerformanceEventEmitterSingleton;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport ReactNativeViewAttributes from '../Components/View/ReactNativeViewAttributes';\nimport UIManager from '../ReactNative/UIManager';\nimport {type HostComponent} from '../Renderer/shims/ReactNativeTypes';\nimport createReactNativeComponentClass from '../Renderer/shims/createReactNativeComponentClass';\nimport {type ProcessedColorValue} from '../StyleSheet/processColor';\nimport {type TextProps} from './TextProps';\n\ntype NativeTextProps = $ReadOnly<{\n ...TextProps,\n isHighlighted?: ?boolean,\n selectionColor?: ?ProcessedColorValue,\n}>;\n\nexport const NativeText: HostComponent = (createReactNativeComponentClass(\n 'RCTText',\n () => ({\n // $FlowFixMe[incompatible-call]\n validAttributes: {\n ...ReactNativeViewAttributes.UIView,\n isHighlighted: true,\n numberOfLines: true,\n ellipsizeMode: true,\n allowFontScaling: true,\n maxFontSizeMultiplier: true,\n disabled: true,\n selectable: true,\n selectionColor: true,\n adjustsFontSizeToFit: true,\n minimumFontScale: true,\n textBreakStrategy: true,\n onTextLayout: true,\n onInlineViewLayout: true,\n dataDetectorType: true,\n android_hyphenationFrequency: true,\n },\n directEventTypes: {\n topTextLayout: {\n registrationName: 'onTextLayout',\n },\n topInlineViewLayout: {\n registrationName: 'onInlineViewLayout',\n },\n },\n uiViewClassName: 'RCTText',\n }),\n): any);\n\nexport const NativeVirtualText: HostComponent =\n !global.RN$Bridgeless && !UIManager.hasViewManagerConfig('RCTVirtualText')\n ? NativeText\n : (createReactNativeComponentClass('RCTVirtualText', () => ({\n // $FlowFixMe[incompatible-call]\n validAttributes: {\n ...ReactNativeViewAttributes.UIView,\n isHighlighted: true,\n maxFontSizeMultiplier: true,\n },\n uiViewClassName: 'RCTVirtualText',\n })): any);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\nimport ReactNativeStyleAttributes from './ReactNativeStyleAttributes';\n\nconst UIView = {\n pointerEvents: true,\n accessible: true,\n accessibilityActions: true,\n accessibilityLabel: true,\n accessibilityLiveRegion: true,\n accessibilityRole: true,\n accessibilityState: true,\n accessibilityValue: true,\n accessibilityHint: true,\n importantForAccessibility: true,\n nativeID: true,\n testID: true,\n renderToHardwareTextureAndroid: true,\n shouldRasterizeIOS: true,\n onLayout: true,\n onAccessibilityAction: true,\n onAccessibilityTap: true,\n onMagicTap: true,\n onAccessibilityEscape: true,\n collapsable: true,\n needsOffscreenAlphaCompositing: true,\n style: ReactNativeStyleAttributes,\n};\n\nconst RCTView = {\n ...UIView,\n\n // This is a special performance property exposed by RCTView and useful for\n // scrolling content when there are many subviews, most of which are offscreen.\n // For this property to be effective, it must be applied to a view that contains\n // many subviews that extend outside its bound. The subviews must also have\n // overflow: hidden, as should the containing view (or one of its superviews).\n removeClippedSubviews: true,\n};\n\nconst ReactNativeViewAttributes = {\n UIView: UIView,\n RCTView: RCTView,\n};\n\nmodule.exports = ReactNativeViewAttributes;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport Pressability, {\n type PressabilityConfig,\n} from '../../Pressability/Pressability';\nimport {PressabilityDebugView} from '../../Pressability/PressabilityDebug';\nimport typeof TouchableWithoutFeedback from './TouchableWithoutFeedback';\nimport {Commands} from 'react-native/Libraries/Components/View/ViewNativeComponent';\nimport ReactNative from 'react-native/Libraries/Renderer/shims/ReactNative';\nimport type {PressEvent} from 'react-native/Libraries/Types/CoreEventTypes';\nimport Platform from '../../Utilities/Platform';\nimport View from '../../Components/View/View';\nimport processColor from '../../StyleSheet/processColor';\nimport * as React from 'react';\nimport invariant from 'invariant';\n\ntype Props = $ReadOnly<{|\n ...React.ElementConfig,\n\n /**\n * Determines the type of background drawable that's going to be used to\n * display feedback. It takes an object with `type` property and extra data\n * depending on the `type`. It's recommended to use one of the static\n * methods to generate that dictionary.\n */\n background?: ?(\n | $ReadOnly<{|\n type: 'ThemeAttrAndroid',\n attribute:\n | 'selectableItemBackground'\n | 'selectableItemBackgroundBorderless',\n rippleRadius: ?number,\n |}>\n | $ReadOnly<{|\n type: 'RippleAndroid',\n color: ?number,\n borderless: boolean,\n rippleRadius: ?number,\n |}>\n ),\n\n /**\n * TV preferred focus (see documentation for the View component).\n */\n hasTVPreferredFocus?: ?boolean,\n\n /**\n * TV next focus down (see documentation for the View component).\n */\n nextFocusDown?: ?number,\n\n /**\n * TV next focus forward (see documentation for the View component).\n */\n nextFocusForward?: ?number,\n\n /**\n * TV next focus left (see documentation for the View component).\n */\n nextFocusLeft?: ?number,\n\n /**\n * TV next focus right (see documentation for the View component).\n */\n nextFocusRight?: ?number,\n\n /**\n * TV next focus up (see documentation for the View component).\n */\n nextFocusUp?: ?number,\n\n /**\n * Set to true to add the ripple effect to the foreground of the view, instead\n * of the background. This is useful if one of your child views has a\n * background of its own, or you're e.g. displaying images, and you don't want\n * the ripple to be covered by them.\n *\n * Check TouchableNativeFeedback.canUseNativeForeground() first, as this is\n * only available on Android 6.0 and above. If you try to use this on older\n * versions, this will fallback to background.\n */\n useForeground?: ?boolean,\n|}>;\n\ntype State = $ReadOnly<{|\n pressability: Pressability,\n|}>;\n\nclass TouchableNativeFeedback extends React.Component {\n /**\n * Creates a value for the `background` prop that uses the Android theme's\n * default background for selectable elements.\n */\n static SelectableBackground: (\n rippleRadius: ?number,\n ) => $ReadOnly<{|\n attribute: 'selectableItemBackground',\n type: 'ThemeAttrAndroid',\n rippleRadius: ?number,\n |}> = (rippleRadius: ?number) => ({\n type: 'ThemeAttrAndroid',\n attribute: 'selectableItemBackground',\n rippleRadius,\n });\n\n /**\n * Creates a value for the `background` prop that uses the Android theme's\n * default background for borderless selectable elements. Requires API 21+.\n */\n static SelectableBackgroundBorderless: (\n rippleRadius: ?number,\n ) => $ReadOnly<{|\n attribute: 'selectableItemBackgroundBorderless',\n type: 'ThemeAttrAndroid',\n rippleRadius: ?number,\n |}> = (rippleRadius: ?number) => ({\n type: 'ThemeAttrAndroid',\n attribute: 'selectableItemBackgroundBorderless',\n rippleRadius,\n });\n\n /**\n * Creates a value for the `background` prop that uses the Android ripple with\n * the supplied color. If `borderless` is true, the ripple will render outside\n * of the view bounds. Requires API 21+.\n */\n static Ripple: (\n color: string,\n borderless: boolean,\n rippleRadius: ?number,\n ) => $ReadOnly<{|\n borderless: boolean,\n color: ?number,\n rippleRadius: ?number,\n type: 'RippleAndroid',\n |}> = (color: string, borderless: boolean, rippleRadius: ?number) => {\n const processedColor = processColor(color);\n invariant(\n processedColor == null || typeof processedColor === 'number',\n 'Unexpected color given for Ripple color',\n );\n return {\n type: 'RippleAndroid',\n color: processedColor,\n borderless,\n rippleRadius,\n };\n };\n\n /**\n * Whether `useForeground` is supported.\n */\n static canUseNativeForeground: () => boolean = () =>\n Platform.OS === 'android' && Platform.Version >= 23;\n\n state: State = {\n pressability: new Pressability(this._createPressabilityConfig()),\n };\n\n _createPressabilityConfig(): PressabilityConfig {\n return {\n cancelable: !this.props.rejectResponderTermination,\n disabled:\n this.props.disabled != null\n ? this.props.disabled\n : this.props.accessibilityState?.disabled,\n hitSlop: this.props.hitSlop,\n delayLongPress: this.props.delayLongPress,\n delayPressIn: this.props.delayPressIn,\n delayPressOut: this.props.delayPressOut,\n minPressDuration: 0,\n pressRectOffset: this.props.pressRetentionOffset,\n android_disableSound: this.props.touchSoundDisabled,\n onLongPress: this.props.onLongPress,\n onPress: this.props.onPress,\n onPressIn: event => {\n if (Platform.OS === 'android') {\n this._dispatchHotspotUpdate(event);\n this._dispatchPressedStateChange(true);\n }\n if (this.props.onPressIn != null) {\n this.props.onPressIn(event);\n }\n },\n onPressMove: event => {\n if (Platform.OS === 'android') {\n this._dispatchHotspotUpdate(event);\n }\n },\n onPressOut: event => {\n if (Platform.OS === 'android') {\n this._dispatchPressedStateChange(false);\n }\n if (this.props.onPressOut != null) {\n this.props.onPressOut(event);\n }\n },\n };\n }\n\n _dispatchPressedStateChange(pressed: boolean): void {\n if (Platform.OS === 'android') {\n const hostComponentRef = ReactNative.findHostInstance_DEPRECATED(this);\n if (hostComponentRef == null) {\n console.warn(\n 'Touchable: Unable to find HostComponent instance. ' +\n 'Has your Touchable component been unmounted?',\n );\n } else {\n Commands.setPressed(hostComponentRef, pressed);\n }\n }\n }\n\n _dispatchHotspotUpdate(event: PressEvent): void {\n if (Platform.OS === 'android') {\n const {locationX, locationY} = event.nativeEvent;\n const hostComponentRef = ReactNative.findHostInstance_DEPRECATED(this);\n if (hostComponentRef == null) {\n console.warn(\n 'Touchable: Unable to find HostComponent instance. ' +\n 'Has your Touchable component been unmounted?',\n );\n } else {\n Commands.hotspotUpdate(\n hostComponentRef,\n locationX ?? 0,\n locationY ?? 0,\n );\n }\n }\n }\n\n render(): React.Node {\n const element = React.Children.only(this.props.children);\n const children = [element.props.children];\n if (__DEV__) {\n if (element.type === View) {\n children.push(\n ,\n );\n }\n }\n\n // BACKWARD-COMPATIBILITY: Focus and blur events were never supported before\n // adopting `Pressability`, so preserve that behavior.\n const {\n onBlur,\n onFocus,\n ...eventHandlersWithoutBlurAndFocus\n } = this.state.pressability.getEventHandlers();\n\n const accessibilityState =\n this.props.disabled != null\n ? {\n ...this.props.accessibilityState,\n disabled: this.props.disabled,\n }\n : this.props.accessibilityState;\n\n return React.cloneElement(\n element,\n {\n ...eventHandlersWithoutBlurAndFocus,\n ...getBackgroundProp(\n this.props.background === undefined\n ? TouchableNativeFeedback.SelectableBackground()\n : this.props.background,\n this.props.useForeground === true,\n ),\n accessible: this.props.accessible !== false,\n accessibilityHint: this.props.accessibilityHint,\n accessibilityLabel: this.props.accessibilityLabel,\n accessibilityRole: this.props.accessibilityRole,\n accessibilityState: accessibilityState,\n accessibilityActions: this.props.accessibilityActions,\n onAccessibilityAction: this.props.onAccessibilityAction,\n accessibilityValue: this.props.accessibilityValue,\n importantForAccessibility: this.props.importantForAccessibility,\n accessibilityLiveRegion: this.props.accessibilityLiveRegion,\n accessibilityViewIsModal: this.props.accessibilityViewIsModal,\n accessibilityElementsHidden: this.props.accessibilityElementsHidden,\n hasTVPreferredFocus: this.props.hasTVPreferredFocus,\n hitSlop: this.props.hitSlop,\n focusable:\n this.props.focusable !== false &&\n this.props.onPress !== undefined &&\n !this.props.disabled,\n nativeID: this.props.nativeID,\n nextFocusDown: this.props.nextFocusDown,\n nextFocusForward: this.props.nextFocusForward,\n nextFocusLeft: this.props.nextFocusLeft,\n nextFocusRight: this.props.nextFocusRight,\n nextFocusUp: this.props.nextFocusUp,\n onLayout: this.props.onLayout,\n testID: this.props.testID,\n },\n ...children,\n );\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n this.state.pressability.configure(this._createPressabilityConfig());\n }\n\n componentWillUnmount(): void {\n this.state.pressability.reset();\n }\n}\n\nconst getBackgroundProp =\n Platform.OS === 'android'\n ? (background, useForeground) =>\n useForeground && TouchableNativeFeedback.canUseNativeForeground()\n ? {nativeForegroundAndroid: background}\n : {nativeBackgroundAndroid: background}\n : (background, useForeground) => null;\n\nTouchableNativeFeedback.displayName = 'TouchableNativeFeedback';\n\nmodule.exports = TouchableNativeFeedback;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport Pressability, {\n type PressabilityConfig,\n} from '../../Pressability/Pressability';\nimport {PressabilityDebugView} from '../../Pressability/PressabilityDebug';\nimport typeof TouchableWithoutFeedback from './TouchableWithoutFeedback';\nimport Animated from 'react-native/Libraries/Animated/Animated';\nimport Easing from 'react-native/Libraries/Animated/Easing';\nimport type {ViewStyleProp} from 'react-native/Libraries/StyleSheet/StyleSheet';\nimport flattenStyle from 'react-native/Libraries/StyleSheet/flattenStyle';\nimport Platform from '../../Utilities/Platform';\nimport * as React from 'react';\n\ntype TVProps = $ReadOnly<{|\n hasTVPreferredFocus?: ?boolean,\n nextFocusDown?: ?number,\n nextFocusForward?: ?number,\n nextFocusLeft?: ?number,\n nextFocusRight?: ?number,\n nextFocusUp?: ?number,\n|}>;\n\ntype Props = $ReadOnly<{|\n ...React.ElementConfig,\n ...TVProps,\n\n activeOpacity?: ?number,\n style?: ?ViewStyleProp,\n\n hostRef?: ?React.Ref,\n|}>;\n\ntype State = $ReadOnly<{|\n anim: Animated.Value,\n pressability: Pressability,\n|}>;\n\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, dimming it.\n *\n * Opacity is controlled by wrapping the children in an Animated.View, which is\n * added to the view hierarchy. Be aware that this can affect layout.\n *\n * Example:\n *\n * ```\n * renderButton: function() {\n * return (\n * \n * \n * \n * );\n * },\n * ```\n * ### Example\n *\n * ```ReactNativeWebPlayer\n * import React, { Component } from 'react'\n * import {\n * AppRegistry,\n * StyleSheet,\n * TouchableOpacity,\n * Text,\n * View,\n * } from 'react-native'\n *\n * class App extends Component {\n * state = { count: 0 }\n *\n * onPress = () => {\n * this.setState(state => ({\n * count: state.count + 1\n * }));\n * };\n *\n * render() {\n * return (\n * \n * \n * Touch Here \n * \n * \n * \n * { this.state.count !== 0 ? this.state.count: null}\n * \n * \n * \n * )\n * }\n * }\n *\n * const styles = StyleSheet.create({\n * container: {\n * flex: 1,\n * justifyContent: 'center',\n * paddingHorizontal: 10\n * },\n * button: {\n * alignItems: 'center',\n * backgroundColor: '#DDDDDD',\n * padding: 10\n * },\n * countContainer: {\n * alignItems: 'center',\n * padding: 10\n * },\n * countText: {\n * color: '#FF00FF'\n * }\n * })\n *\n * AppRegistry.registerComponent('App', () => App)\n * ```\n *\n */\nclass TouchableOpacity extends React.Component {\n state: State = {\n anim: new Animated.Value(this._getChildStyleOpacityWithDefault()),\n pressability: new Pressability(this._createPressabilityConfig()),\n };\n\n _createPressabilityConfig(): PressabilityConfig {\n return {\n cancelable: !this.props.rejectResponderTermination,\n disabled: this.props.disabled ?? this.props.accessibilityState?.disabled,\n hitSlop: this.props.hitSlop,\n delayLongPress: this.props.delayLongPress,\n delayPressIn: this.props.delayPressIn,\n delayPressOut: this.props.delayPressOut,\n minPressDuration: 0,\n pressRectOffset: this.props.pressRetentionOffset,\n onBlur: event => {\n if (Platform.isTV) {\n this._opacityInactive(250);\n }\n if (this.props.onBlur != null) {\n this.props.onBlur(event);\n }\n },\n onFocus: event => {\n if (Platform.isTV) {\n this._opacityActive(150);\n }\n if (this.props.onFocus != null) {\n this.props.onFocus(event);\n }\n },\n onLongPress: this.props.onLongPress,\n onPress: this.props.onPress,\n onPressIn: event => {\n this._opacityActive(\n event.dispatchConfig.registrationName === 'onResponderGrant'\n ? 0\n : 150,\n );\n if (this.props.onPressIn != null) {\n this.props.onPressIn(event);\n }\n },\n onPressOut: event => {\n this._opacityInactive(250);\n if (this.props.onPressOut != null) {\n this.props.onPressOut(event);\n }\n },\n };\n }\n\n /**\n * Animate the touchable to a new opacity.\n */\n _setOpacityTo(toValue: number, duration: number): void {\n Animated.timing(this.state.anim, {\n toValue,\n duration,\n // $FlowFixMe[method-unbinding]\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }).start();\n }\n\n _opacityActive(duration: number): void {\n this._setOpacityTo(this.props.activeOpacity ?? 0.2, duration);\n }\n\n _opacityInactive(duration: number): void {\n this._setOpacityTo(this._getChildStyleOpacityWithDefault(), duration);\n }\n\n _getChildStyleOpacityWithDefault(): number {\n const opacity = flattenStyle(this.props.style)?.opacity;\n return typeof opacity === 'number' ? opacity : 1;\n }\n\n render(): React.Node {\n // BACKWARD-COMPATIBILITY: Focus and blur events were never supported before\n // adopting `Pressability`, so preserve that behavior.\n const {\n onBlur,\n onFocus,\n ...eventHandlersWithoutBlurAndFocus\n } = this.state.pressability.getEventHandlers();\n\n const accessibilityState =\n this.props.disabled != null\n ? {\n ...this.props.accessibilityState,\n disabled: this.props.disabled,\n }\n : this.props.accessibilityState;\n\n return (\n \n {this.props.children}\n {__DEV__ ? (\n \n ) : null}\n \n );\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n this.state.pressability.configure(this._createPressabilityConfig());\n if (this.props.disabled !== prevProps.disabled) {\n this._opacityInactive(250);\n }\n }\n\n componentWillUnmount(): void {\n this.state.pressability.reset();\n }\n}\n\nconst Touchable = (React.forwardRef((props, ref) => (\n \n)): React.AbstractComponent>);\n\nTouchable.displayName = 'TouchableOpacity';\n\nmodule.exports = Touchable;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport Platform from '../Utilities/Platform';\nimport typeof AnimatedFlatList from './components/AnimatedFlatList';\nimport typeof AnimatedImage from './components/AnimatedImage';\nimport typeof AnimatedScrollView from './components/AnimatedScrollView';\nimport typeof AnimatedSectionList from './components/AnimatedSectionList';\nimport typeof AnimatedText from './components/AnimatedText';\nimport typeof AnimatedView from './components/AnimatedView';\n\nconst AnimatedMock = require('./AnimatedMock');\nconst AnimatedImplementation = require('./AnimatedImplementation');\n\nconst Animated = ((Platform.isTesting\n ? AnimatedMock\n : AnimatedImplementation): typeof AnimatedMock);\n\nmodule.exports = {\n get FlatList(): AnimatedFlatList {\n return require('./components/AnimatedFlatList');\n },\n get Image(): AnimatedImage {\n return require('./components/AnimatedImage');\n },\n get ScrollView(): AnimatedScrollView {\n return require('./components/AnimatedScrollView');\n },\n get SectionList(): AnimatedSectionList {\n return require('./components/AnimatedSectionList');\n },\n get Text(): AnimatedText {\n return require('./components/AnimatedText');\n },\n get View(): AnimatedView {\n return require('./components/AnimatedView');\n },\n ...Animated,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst {AnimatedEvent, attachNativeEvent} = require('./AnimatedEvent');\nconst AnimatedImplementation = require('./AnimatedImplementation');\nconst AnimatedInterpolation = require('./nodes/AnimatedInterpolation');\nconst AnimatedNode = require('./nodes/AnimatedNode');\nconst AnimatedValue = require('./nodes/AnimatedValue');\nconst AnimatedValueXY = require('./nodes/AnimatedValueXY');\n\nconst createAnimatedComponent = require('./createAnimatedComponent');\n\nimport type {EndCallback} from './animations/Animation';\nimport type {TimingAnimationConfig} from './animations/TimingAnimation';\nimport type {DecayAnimationConfig} from './animations/DecayAnimation';\nimport type {SpringAnimationConfig} from './animations/SpringAnimation';\n\n/**\n * Animations are a source of flakiness in snapshot testing. This mock replaces\n * animation functions from AnimatedImplementation with empty animations for\n * predictability in tests.\n */\nexport type CompositeAnimation = {\n start: (callback?: ?EndCallback) => void,\n stop: () => void,\n reset: () => void,\n _startNativeLoop: (iterations?: number) => void,\n _isUsingNativeDriver: () => boolean,\n ...\n};\n\nconst emptyAnimation = {\n start: () => {},\n stop: () => {},\n reset: () => {},\n _startNativeLoop: () => {},\n _isUsingNativeDriver: () => {\n return false;\n },\n};\n\nconst spring = function(\n value: AnimatedValue | AnimatedValueXY,\n config: SpringAnimationConfig,\n): CompositeAnimation {\n const anyValue: any = value;\n return {\n ...emptyAnimation,\n start: (callback?: ?EndCallback): void => {\n anyValue.setValue(config.toValue);\n callback && callback({finished: true});\n },\n };\n};\n\nconst timing = function(\n value: AnimatedValue | AnimatedValueXY,\n config: TimingAnimationConfig,\n): CompositeAnimation {\n const anyValue: any = value;\n return {\n ...emptyAnimation,\n start: (callback?: ?EndCallback): void => {\n anyValue.setValue(config.toValue);\n callback && callback({finished: true});\n },\n };\n};\n\nconst decay = function(\n value: AnimatedValue | AnimatedValueXY,\n config: DecayAnimationConfig,\n): CompositeAnimation {\n return emptyAnimation;\n};\n\nconst sequence = function(\n animations: Array,\n): CompositeAnimation {\n return emptyAnimation;\n};\n\ntype ParallelConfig = {stopTogether?: boolean, ...};\nconst parallel = function(\n animations: Array,\n config?: ?ParallelConfig,\n): CompositeAnimation {\n return emptyAnimation;\n};\n\nconst delay = function(time: number): CompositeAnimation {\n return emptyAnimation;\n};\n\nconst stagger = function(\n time: number,\n animations: Array,\n): CompositeAnimation {\n return emptyAnimation;\n};\n\ntype LoopAnimationConfig = {\n iterations: number,\n resetBeforeIteration?: boolean,\n ...\n};\n\nconst loop = function(\n animation: CompositeAnimation,\n {iterations = -1}: LoopAnimationConfig = {},\n): CompositeAnimation {\n return emptyAnimation;\n};\n\nmodule.exports = {\n Value: AnimatedValue,\n ValueXY: AnimatedValueXY,\n Interpolation: AnimatedInterpolation,\n Node: AnimatedNode,\n decay,\n timing,\n spring,\n add: AnimatedImplementation.add,\n subtract: AnimatedImplementation.subtract,\n divide: AnimatedImplementation.divide,\n multiply: AnimatedImplementation.multiply,\n modulo: AnimatedImplementation.modulo,\n diffClamp: AnimatedImplementation.diffClamp,\n delay,\n sequence,\n parallel,\n stagger,\n loop,\n event: AnimatedImplementation.event,\n createAnimatedComponent,\n attachNativeEvent,\n forkEvent: AnimatedImplementation.forkEvent,\n unforkEvent: AnimatedImplementation.unforkEvent,\n Event: AnimatedEvent,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedValue = require('./nodes/AnimatedValue');\nconst NativeAnimatedHelper = require('./NativeAnimatedHelper');\nconst ReactNative = require('../Renderer/shims/ReactNative');\n\nconst invariant = require('invariant');\n\nconst {shouldUseNativeDriver} = require('./NativeAnimatedHelper');\n\nexport type Mapping = {[key: string]: Mapping, ...} | AnimatedValue;\nexport type EventConfig = {\n listener?: ?Function,\n useNativeDriver: boolean,\n};\n\nfunction attachNativeEvent(\n viewRef: any,\n eventName: string,\n argMapping: $ReadOnlyArray,\n): {detach: () => void} {\n // Find animated values in `argMapping` and create an array representing their\n // key path inside the `nativeEvent` object. Ex.: ['contentOffset', 'x'].\n const eventMappings = [];\n\n const traverse = (value, path) => {\n if (value instanceof AnimatedValue) {\n value.__makeNative();\n\n eventMappings.push({\n nativeEventPath: path,\n animatedValueTag: value.__getNativeTag(),\n });\n } else if (typeof value === 'object') {\n for (const key in value) {\n traverse(value[key], path.concat(key));\n }\n }\n };\n\n invariant(\n argMapping[0] && argMapping[0].nativeEvent,\n 'Native driven events only support animated values contained inside `nativeEvent`.',\n );\n\n // Assume that the event containing `nativeEvent` is always the first argument.\n traverse(argMapping[0].nativeEvent, []);\n\n const viewTag = ReactNative.findNodeHandle(viewRef);\n if (viewTag != null) {\n eventMappings.forEach(mapping => {\n NativeAnimatedHelper.API.addAnimatedEventToView(\n viewTag,\n eventName,\n mapping,\n );\n });\n }\n\n return {\n detach() {\n if (viewTag != null) {\n eventMappings.forEach(mapping => {\n NativeAnimatedHelper.API.removeAnimatedEventFromView(\n viewTag,\n eventName,\n // $FlowFixMe[incompatible-call]\n mapping.animatedValueTag,\n );\n });\n }\n },\n };\n}\n\nfunction validateMapping(argMapping, args) {\n const validate = (recMapping, recEvt, key) => {\n if (recMapping instanceof AnimatedValue) {\n invariant(\n typeof recEvt === 'number',\n 'Bad mapping of event key ' +\n key +\n ', should be number but got ' +\n typeof recEvt,\n );\n return;\n }\n if (typeof recEvt === 'number') {\n invariant(\n recMapping instanceof AnimatedValue,\n 'Bad mapping of type ' +\n typeof recMapping +\n ' for key ' +\n key +\n ', event value must map to AnimatedValue',\n );\n return;\n }\n invariant(\n typeof recMapping === 'object',\n 'Bad mapping of type ' + typeof recMapping + ' for key ' + key,\n );\n invariant(\n typeof recEvt === 'object',\n 'Bad event of type ' + typeof recEvt + ' for key ' + key,\n );\n for (const mappingKey in recMapping) {\n validate(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n }\n };\n\n invariant(\n args.length >= argMapping.length,\n 'Event has less arguments than mapping',\n );\n argMapping.forEach((mapping, idx) => {\n validate(mapping, args[idx], 'arg' + idx);\n });\n}\n\nclass AnimatedEvent {\n _argMapping: $ReadOnlyArray;\n _listeners: Array = [];\n _callListeners: Function;\n _attachedEvent: ?{detach: () => void, ...};\n __isNative: boolean;\n\n constructor(argMapping: $ReadOnlyArray, config: EventConfig) {\n this._argMapping = argMapping;\n\n if (config == null) {\n console.warn('Animated.event now requires a second argument for options');\n config = {useNativeDriver: false};\n }\n\n if (config.listener) {\n this.__addListener(config.listener);\n }\n this._callListeners = this._callListeners.bind(this);\n this._attachedEvent = null;\n this.__isNative = shouldUseNativeDriver(config);\n }\n\n __addListener(callback: Function): void {\n this._listeners.push(callback);\n }\n\n __removeListener(callback: Function): void {\n this._listeners = this._listeners.filter(listener => listener !== callback);\n }\n\n __attach(viewRef: any, eventName: string) {\n invariant(\n this.__isNative,\n 'Only native driven events need to be attached.',\n );\n\n this._attachedEvent = attachNativeEvent(\n viewRef,\n eventName,\n this._argMapping,\n );\n }\n\n __detach(viewTag: any, eventName: string) {\n invariant(\n this.__isNative,\n 'Only native driven events need to be detached.',\n );\n\n this._attachedEvent && this._attachedEvent.detach();\n }\n\n __getHandler(): any | ((...args: any) => void) {\n if (this.__isNative) {\n if (__DEV__) {\n let validatedMapping = false;\n return (...args: any) => {\n if (!validatedMapping) {\n validateMapping(this._argMapping, args);\n validatedMapping = true;\n }\n this._callListeners(...args);\n };\n } else {\n return this._callListeners;\n }\n }\n\n let validatedMapping = false;\n return (...args: any) => {\n if (__DEV__ && !validatedMapping) {\n validateMapping(this._argMapping, args);\n validatedMapping = true;\n }\n\n const traverse = (recMapping, recEvt, key) => {\n if (recMapping instanceof AnimatedValue) {\n if (typeof recEvt === 'number') {\n recMapping.setValue(recEvt);\n }\n } else if (typeof recMapping === 'object') {\n for (const mappingKey in recMapping) {\n /* $FlowFixMe[prop-missing] (>=0.120.0) This comment suppresses an\n * error found when Flow v0.120 was deployed. To see the error,\n * delete this comment and run Flow. */\n traverse(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n }\n }\n };\n this._argMapping.forEach((mapping, idx) => {\n traverse(mapping, args[idx], 'arg' + idx);\n });\n\n this._callListeners(...args);\n };\n }\n\n _callListeners(...args: any) {\n this._listeners.forEach(listener => listener(...args));\n }\n}\n\nmodule.exports = {AnimatedEvent, attachNativeEvent};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedInterpolation = require('./AnimatedInterpolation');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\nconst InteractionManager = require('../../Interaction/InteractionManager');\nconst NativeAnimatedHelper = require('../NativeAnimatedHelper');\n\nimport type Animation, {EndCallback} from '../animations/Animation';\nimport type {InterpolationConfigType} from './AnimatedInterpolation';\nimport type AnimatedTracking from './AnimatedTracking';\n\nconst NativeAnimatedAPI = NativeAnimatedHelper.API;\n\n/**\n * Animated works by building a directed acyclic graph of dependencies\n * transparently when you render your Animated components.\n *\n * new Animated.Value(0)\n * .interpolate() .interpolate() new Animated.Value(1)\n * opacity translateY scale\n * style transform\n * View#234 style\n * View#123\n *\n * A) Top Down phase\n * When an Animated.Value is updated, we recursively go down through this\n * graph in order to find leaf nodes: the views that we flag as needing\n * an update.\n *\n * B) Bottom Up phase\n * When a view is flagged as needing an update, we recursively go back up\n * in order to build the new value that it needs. The reason why we need\n * this two-phases process is to deal with composite props such as\n * transform which can receive values from multiple parents.\n */\nfunction _flush(rootNode: AnimatedValue): void {\n const animatedStyles = new Set();\n function findAnimatedStyles(node) {\n /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.68 was deployed. To see the error\n * delete this comment and run Flow. */\n if (typeof node.update === 'function') {\n animatedStyles.add(node);\n } else {\n node.__getChildren().forEach(findAnimatedStyles);\n }\n }\n findAnimatedStyles(rootNode);\n // $FlowFixMe[prop-missing]\n animatedStyles.forEach(animatedStyle => animatedStyle.update());\n}\n\n/**\n * Some operations are executed only on batch end, which is _mostly_ scheduled when\n * Animated component props change. For some of the changes which require immediate execution\n * (e.g. setValue), we create a separate batch in case none is scheduled.\n */\nfunction _executeAsAnimatedBatch(id: string, operation: () => void) {\n NativeAnimatedAPI.setWaitingForIdentifier(id);\n operation();\n NativeAnimatedAPI.unsetWaitingForIdentifier(id);\n}\n\n/**\n * Standard value for driving animations. One `Animated.Value` can drive\n * multiple properties in a synchronized fashion, but can only be driven by one\n * mechanism at a time. Using a new mechanism (e.g. starting a new animation,\n * or calling `setValue`) will stop any previous ones.\n *\n * See https://reactnative.dev/docs/animatedvalue.html\n */\nclass AnimatedValue extends AnimatedWithChildren {\n _value: number;\n _startingValue: number;\n _offset: number;\n _animation: ?Animation;\n _tracking: ?AnimatedTracking;\n\n constructor(value: number) {\n super();\n if (typeof value !== 'number') {\n throw new Error('AnimatedValue: Attempting to set value to undefined');\n }\n this._startingValue = this._value = value;\n this._offset = 0;\n this._animation = null;\n }\n\n __detach() {\n if (this.__isNative) {\n NativeAnimatedAPI.getValue(this.__getNativeTag(), value => {\n this._value = value;\n });\n }\n this.stopAnimation();\n super.__detach();\n }\n\n __getValue(): number {\n return this._value + this._offset;\n }\n\n /**\n * Directly set the value. This will stop any animations running on the value\n * and update all the bound properties.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#setvalue\n */\n setValue(value: number): void {\n if (this._animation) {\n this._animation.stop();\n this._animation = null;\n }\n this._updateValue(\n value,\n !this.__isNative /* don't perform a flush for natively driven values */,\n );\n if (this.__isNative) {\n _executeAsAnimatedBatch(this.__getNativeTag().toString(), () => {\n NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), value);\n });\n }\n }\n\n /**\n * Sets an offset that is applied on top of whatever value is set, whether via\n * `setValue`, an animation, or `Animated.event`. Useful for compensating\n * things like the start of a pan gesture.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#setoffset\n */\n setOffset(offset: number): void {\n this._offset = offset;\n if (this.__isNative) {\n NativeAnimatedAPI.setAnimatedNodeOffset(this.__getNativeTag(), offset);\n }\n }\n\n /**\n * Merges the offset value into the base value and resets the offset to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#flattenoffset\n */\n flattenOffset(): void {\n this._value += this._offset;\n this._offset = 0;\n if (this.__isNative) {\n NativeAnimatedAPI.flattenAnimatedNodeOffset(this.__getNativeTag());\n }\n }\n\n /**\n * Sets the offset value to the base value, and resets the base value to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#extractoffset\n */\n extractOffset(): void {\n this._offset += this._value;\n this._value = 0;\n if (this.__isNative) {\n NativeAnimatedAPI.extractAnimatedNodeOffset(this.__getNativeTag());\n }\n }\n\n /**\n * Stops any running animation or tracking. `callback` is invoked with the\n * final value after stopping the animation, which is useful for updating\n * state to match the animation position with layout.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#stopanimation\n */\n stopAnimation(callback?: ?(value: number) => void): void {\n this.stopTracking();\n this._animation && this._animation.stop();\n this._animation = null;\n callback && callback(this.__getValue());\n }\n\n /**\n * Stops any animation and resets the value to its original.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#resetanimation\n */\n resetAnimation(callback?: ?(value: number) => void): void {\n this.stopAnimation(callback);\n this._value = this._startingValue;\n if (this.__isNative) {\n NativeAnimatedAPI.setAnimatedNodeValue(\n this.__getNativeTag(),\n this._startingValue,\n );\n }\n }\n\n _onAnimatedValueUpdateReceived(value: number): void {\n this._updateValue(value, false /*flush*/);\n }\n\n /**\n * Interpolates the value before updating the property, e.g. mapping 0-1 to\n * 0-10.\n */\n interpolate(config: InterpolationConfigType): AnimatedInterpolation {\n return new AnimatedInterpolation(this, config);\n }\n\n /**\n * Typically only used internally, but could be used by a custom Animation\n * class.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#animate\n */\n animate(animation: Animation, callback: ?EndCallback): void {\n let handle = null;\n if (animation.__isInteraction) {\n handle = InteractionManager.createInteractionHandle();\n }\n const previousAnimation = this._animation;\n this._animation && this._animation.stop();\n this._animation = animation;\n animation.start(\n this._value,\n value => {\n // Natively driven animations will never call into that callback, therefore we can always\n // pass flush = true to allow the updated value to propagate to native with setNativeProps\n this._updateValue(value, true /* flush */);\n },\n result => {\n this._animation = null;\n if (handle !== null) {\n InteractionManager.clearInteractionHandle(handle);\n }\n callback && callback(result);\n },\n previousAnimation,\n this,\n );\n }\n\n /**\n * Typically only used internally.\n */\n stopTracking(): void {\n this._tracking && this._tracking.__detach();\n this._tracking = null;\n }\n\n /**\n * Typically only used internally.\n */\n track(tracking: AnimatedTracking): void {\n this.stopTracking();\n this._tracking = tracking;\n }\n\n _updateValue(value: number, flush: boolean): void {\n if (value === undefined) {\n throw new Error('AnimatedValue: Attempting to set value to undefined');\n }\n\n this._value = value;\n if (flush) {\n _flush(this);\n }\n super.__callListeners(this.__getValue());\n }\n\n __getNativeConfig(): Object {\n return {\n type: 'value',\n value: this._value,\n offset: this._offset,\n };\n }\n}\n\nmodule.exports = AnimatedValue;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\nconst NativeAnimatedHelper = require('../NativeAnimatedHelper');\n\nconst invariant = require('invariant');\nconst normalizeColor = require('../../StyleSheet/normalizeColor');\n\ntype ExtrapolateType = 'extend' | 'identity' | 'clamp';\n\nexport type InterpolationConfigType = {\n inputRange: $ReadOnlyArray,\n outputRange: $ReadOnlyArray | $ReadOnlyArray,\n easing?: (input: number) => number,\n extrapolate?: ExtrapolateType,\n extrapolateLeft?: ExtrapolateType,\n extrapolateRight?: ExtrapolateType,\n};\n\nconst linear = t => t;\n\n/**\n * Very handy helper to map input ranges to output ranges with an easing\n * function and custom behavior outside of the ranges.\n */\nfunction createInterpolation(\n config: InterpolationConfigType,\n): (input: number) => number | string {\n if (config.outputRange && typeof config.outputRange[0] === 'string') {\n return createInterpolationFromStringOutputRange(config);\n }\n\n const outputRange: Array = (config.outputRange: any);\n checkInfiniteRange('outputRange', outputRange);\n\n const inputRange = config.inputRange;\n checkInfiniteRange('inputRange', inputRange);\n checkValidInputRange(inputRange);\n\n invariant(\n inputRange.length === outputRange.length,\n 'inputRange (' +\n inputRange.length +\n ') and outputRange (' +\n outputRange.length +\n ') must have the same length',\n );\n\n const easing = config.easing || linear;\n\n let extrapolateLeft: ExtrapolateType = 'extend';\n if (config.extrapolateLeft !== undefined) {\n extrapolateLeft = config.extrapolateLeft;\n } else if (config.extrapolate !== undefined) {\n extrapolateLeft = config.extrapolate;\n }\n\n let extrapolateRight: ExtrapolateType = 'extend';\n if (config.extrapolateRight !== undefined) {\n extrapolateRight = config.extrapolateRight;\n } else if (config.extrapolate !== undefined) {\n extrapolateRight = config.extrapolate;\n }\n\n return input => {\n invariant(\n typeof input === 'number',\n 'Cannot interpolation an input which is not a number',\n );\n\n const range = findRange(input, inputRange);\n return interpolate(\n input,\n inputRange[range],\n inputRange[range + 1],\n outputRange[range],\n outputRange[range + 1],\n easing,\n extrapolateLeft,\n extrapolateRight,\n );\n };\n}\n\nfunction interpolate(\n input: number,\n inputMin: number,\n inputMax: number,\n outputMin: number,\n outputMax: number,\n easing: (input: number) => number,\n extrapolateLeft: ExtrapolateType,\n extrapolateRight: ExtrapolateType,\n) {\n let result = input;\n\n // Extrapolate\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') {\n return result;\n } else if (extrapolateLeft === 'clamp') {\n result = inputMin;\n } else if (extrapolateLeft === 'extend') {\n // noop\n }\n }\n\n if (result > inputMax) {\n if (extrapolateRight === 'identity') {\n return result;\n } else if (extrapolateRight === 'clamp') {\n result = inputMax;\n } else if (extrapolateRight === 'extend') {\n // noop\n }\n }\n\n if (outputMin === outputMax) {\n return outputMin;\n }\n\n if (inputMin === inputMax) {\n if (input <= inputMin) {\n return outputMin;\n }\n return outputMax;\n }\n\n // Input Range\n if (inputMin === -Infinity) {\n result = -result;\n } else if (inputMax === Infinity) {\n result = result - inputMin;\n } else {\n result = (result - inputMin) / (inputMax - inputMin);\n }\n\n // Easing\n result = easing(result);\n\n // Output Range\n if (outputMin === -Infinity) {\n result = -result;\n } else if (outputMax === Infinity) {\n result = result + outputMin;\n } else {\n result = result * (outputMax - outputMin) + outputMin;\n }\n\n return result;\n}\n\nfunction colorToRgba(input: string): string {\n let normalizedColor = normalizeColor(input);\n if (normalizedColor === null || typeof normalizedColor !== 'number') {\n return input;\n }\n\n normalizedColor = normalizedColor || 0;\n\n const r = (normalizedColor & 0xff000000) >>> 24;\n const g = (normalizedColor & 0x00ff0000) >>> 16;\n const b = (normalizedColor & 0x0000ff00) >>> 8;\n const a = (normalizedColor & 0x000000ff) / 255;\n\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\nconst stringShapeRegex = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?/g;\n\n/**\n * Supports string shapes by extracting numbers so new values can be computed,\n * and recombines those values into new strings of the same shape. Supports\n * things like:\n *\n * rgba(123, 42, 99, 0.36) // colors\n * -45deg // values with units\n */\nfunction createInterpolationFromStringOutputRange(\n config: InterpolationConfigType,\n): (input: number) => string {\n let outputRange: Array = (config.outputRange: any);\n invariant(outputRange.length >= 2, 'Bad output range');\n outputRange = outputRange.map(colorToRgba);\n checkPattern(outputRange);\n\n // ['rgba(0, 100, 200, 0)', 'rgba(50, 150, 250, 0.5)']\n // ->\n // [\n // [0, 50],\n // [100, 150],\n // [200, 250],\n // [0, 0.5],\n // ]\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */\n const outputRanges = outputRange[0].match(stringShapeRegex).map(() => []);\n outputRange.forEach(value => {\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `value.match()` can return\n * `null`. Need to guard against this possibility. */\n value.match(stringShapeRegex).forEach((number, i) => {\n outputRanges[i].push(+number);\n });\n });\n\n const interpolations = outputRange[0]\n .match(stringShapeRegex)\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */\n /* $FlowFixMe[incompatible-call] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */\n .map((value, i) => {\n return createInterpolation({\n ...config,\n outputRange: outputRanges[i],\n });\n });\n\n // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to\n // round the opacity (4th column).\n const shouldRound = isRgbOrRgba(outputRange[0]);\n\n return input => {\n let i = 0;\n // 'rgba(0, 100, 200, 0)'\n // ->\n // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...'\n return outputRange[0].replace(stringShapeRegex, () => {\n let val = +interpolations[i++](input);\n if (shouldRound) {\n val = i < 4 ? Math.round(val) : Math.round(val * 1000) / 1000;\n }\n return String(val);\n });\n };\n}\n\nfunction isRgbOrRgba(range) {\n return typeof range === 'string' && range.startsWith('rgb');\n}\n\nfunction checkPattern(arr: $ReadOnlyArray) {\n const pattern = arr[0].replace(stringShapeRegex, '');\n for (let i = 1; i < arr.length; ++i) {\n invariant(\n pattern === arr[i].replace(stringShapeRegex, ''),\n 'invalid pattern ' + arr[0] + ' and ' + arr[i],\n );\n }\n}\n\nfunction findRange(input: number, inputRange: $ReadOnlyArray) {\n let i;\n for (i = 1; i < inputRange.length - 1; ++i) {\n if (inputRange[i] >= input) {\n break;\n }\n }\n return i - 1;\n}\n\nfunction checkValidInputRange(arr: $ReadOnlyArray) {\n invariant(arr.length >= 2, 'inputRange must have at least 2 elements');\n for (let i = 1; i < arr.length; ++i) {\n invariant(\n arr[i] >= arr[i - 1],\n /* $FlowFixMe[incompatible-type] (>=0.13.0) - In the addition expression\n * below this comment, one or both of the operands may be something that\n * doesn't cleanly convert to a string, like undefined, null, and object,\n * etc. If you really mean this implicit string conversion, you can do\n * something like String(myThing) */\n 'inputRange must be monotonically non-decreasing ' + arr,\n );\n }\n}\n\nfunction checkInfiniteRange(name: string, arr: $ReadOnlyArray) {\n invariant(arr.length >= 2, name + ' must have at least 2 elements');\n invariant(\n arr.length !== 2 || arr[0] !== -Infinity || arr[1] !== Infinity,\n /* $FlowFixMe[incompatible-type] (>=0.13.0) - In the addition expression\n * below this comment, one or both of the operands may be something that\n * doesn't cleanly convert to a string, like undefined, null, and object,\n * etc. If you really mean this implicit string conversion, you can do\n * something like String(myThing) */\n name + 'cannot be ]-infinity;+infinity[ ' + arr,\n );\n}\n\nclass AnimatedInterpolation extends AnimatedWithChildren {\n // Export for testing.\n static __createInterpolation: (\n config: InterpolationConfigType,\n ) => (input: number) => number | string = createInterpolation;\n\n _parent: AnimatedNode;\n _config: InterpolationConfigType;\n _interpolation: (input: number) => number | string;\n\n constructor(parent: AnimatedNode, config: InterpolationConfigType) {\n super();\n this._parent = parent;\n this._config = config;\n this._interpolation = createInterpolation(config);\n }\n\n __makeNative() {\n this._parent.__makeNative();\n super.__makeNative();\n }\n\n __getValue(): number | string {\n const parentValue: number = this._parent.__getValue();\n invariant(\n typeof parentValue === 'number',\n 'Cannot interpolate an input which is not a number.',\n );\n return this._interpolation(parentValue);\n }\n\n interpolate(config: InterpolationConfigType): AnimatedInterpolation {\n return new AnimatedInterpolation(this, config);\n }\n\n __attach(): void {\n this._parent.__addChild(this);\n }\n\n __detach(): void {\n this._parent.__removeChild(this);\n super.__detach();\n }\n\n __transformDataType(range: Array): Array {\n return range.map(NativeAnimatedHelper.transformDataType);\n }\n\n __getNativeConfig(): any {\n if (__DEV__) {\n NativeAnimatedHelper.validateInterpolation(this._config);\n }\n\n return {\n inputRange: this._config.inputRange,\n // Only the `outputRange` can contain strings so we don't need to transform `inputRange` here\n /* $FlowFixMe[incompatible-call] (>=0.38.0) - Flow error detected during\n * the deployment of v0.38.0. To see the error, remove this comment and\n * run flow */\n outputRange: this.__transformDataType(this._config.outputRange),\n extrapolateLeft:\n this._config.extrapolateLeft || this._config.extrapolate || 'extend',\n extrapolateRight:\n this._config.extrapolateRight || this._config.extrapolate || 'extend',\n type: 'interpolation',\n };\n }\n}\n\nmodule.exports = AnimatedInterpolation;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst NativeAnimatedHelper = require('../NativeAnimatedHelper');\n\nconst NativeAnimatedAPI = NativeAnimatedHelper.API;\nconst invariant = require('invariant');\n\ntype ValueListenerCallback = (state: {value: number, ...}) => mixed;\n\nlet _uniqueId = 1;\n\n// Note(vjeux): this would be better as an interface but flow doesn't\n// support them yet\nclass AnimatedNode {\n _listeners: {[key: string]: ValueListenerCallback, ...};\n __nativeAnimatedValueListener: ?any;\n __attach(): void {}\n __detach(): void {\n if (this.__isNative && this.__nativeTag != null) {\n NativeAnimatedHelper.API.dropAnimatedNode(this.__nativeTag);\n this.__nativeTag = undefined;\n }\n }\n __getValue(): any {}\n __getAnimatedValue(): any {\n return this.__getValue();\n }\n __addChild(child: AnimatedNode) {}\n __removeChild(child: AnimatedNode) {}\n __getChildren(): Array {\n return [];\n }\n\n /* Methods and props used by native Animated impl */\n __isNative: boolean;\n __nativeTag: ?number;\n __shouldUpdateListenersForNewNativeTag: boolean;\n\n constructor() {\n this._listeners = {};\n }\n\n __makeNative() {\n if (!this.__isNative) {\n throw new Error('This node cannot be made a \"native\" animated node');\n }\n\n if (this.hasListeners()) {\n this._startListeningToNativeValueUpdates();\n }\n }\n\n /**\n * Adds an asynchronous listener to the value so you can observe updates from\n * animations. This is useful because there is no way to\n * synchronously read the value because it might be driven natively.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#addlistener\n */\n addListener(callback: (value: any) => mixed): string {\n const id = String(_uniqueId++);\n this._listeners[id] = callback;\n if (this.__isNative) {\n this._startListeningToNativeValueUpdates();\n }\n return id;\n }\n\n /**\n * Unregister a listener. The `id` param shall match the identifier\n * previously returned by `addListener()`.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#removelistener\n */\n removeListener(id: string): void {\n delete this._listeners[id];\n if (this.__isNative && !this.hasListeners()) {\n this._stopListeningForNativeValueUpdates();\n }\n }\n\n /**\n * Remove all registered listeners.\n *\n * See https://reactnative.dev/docs/animatedvalue.html#removealllisteners\n */\n removeAllListeners(): void {\n this._listeners = {};\n if (this.__isNative) {\n this._stopListeningForNativeValueUpdates();\n }\n }\n\n hasListeners(): boolean {\n return !!Object.keys(this._listeners).length;\n }\n\n _startListeningToNativeValueUpdates() {\n if (\n this.__nativeAnimatedValueListener &&\n !this.__shouldUpdateListenersForNewNativeTag\n ) {\n return;\n }\n\n if (this.__shouldUpdateListenersForNewNativeTag) {\n this.__shouldUpdateListenersForNewNativeTag = false;\n this._stopListeningForNativeValueUpdates();\n }\n\n NativeAnimatedAPI.startListeningToAnimatedNodeValue(this.__getNativeTag());\n this.__nativeAnimatedValueListener = NativeAnimatedHelper.nativeEventEmitter.addListener(\n 'onAnimatedValueUpdate',\n data => {\n if (data.tag !== this.__getNativeTag()) {\n return;\n }\n this._onAnimatedValueUpdateReceived(data.value);\n },\n );\n }\n\n _onAnimatedValueUpdateReceived(value: number) {\n this.__callListeners(value);\n }\n\n __callListeners(value: number): void {\n for (const key in this._listeners) {\n this._listeners[key]({value});\n }\n }\n\n _stopListeningForNativeValueUpdates() {\n if (!this.__nativeAnimatedValueListener) {\n return;\n }\n\n this.__nativeAnimatedValueListener.remove();\n this.__nativeAnimatedValueListener = null;\n NativeAnimatedAPI.stopListeningToAnimatedNodeValue(this.__getNativeTag());\n }\n\n __getNativeTag(): number {\n NativeAnimatedHelper.assertNativeAnimatedModule();\n invariant(\n this.__isNative,\n 'Attempt to get native tag from node not marked as \"native\"',\n );\n\n const nativeTag =\n this.__nativeTag ?? NativeAnimatedHelper.generateNewNodeTag();\n\n if (this.__nativeTag == null) {\n this.__nativeTag = nativeTag;\n NativeAnimatedHelper.API.createAnimatedNode(\n nativeTag,\n this.__getNativeConfig(),\n );\n this.__shouldUpdateListenersForNewNativeTag = true;\n }\n\n return nativeTag;\n }\n __getNativeConfig(): Object {\n throw new Error(\n 'This JS animated node type cannot be used as native animated node',\n );\n }\n toJSON(): any {\n return this.__getValue();\n }\n}\n\nmodule.exports = AnimatedNode;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport NativeAnimatedNonTurboModule from './NativeAnimatedModule';\nimport NativeAnimatedTurboModule from './NativeAnimatedTurboModule';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport Platform from '../Utilities/Platform';\nimport type {EventConfig} from './AnimatedEvent';\nimport type {\n EventMapping,\n AnimatedNodeConfig,\n AnimatingNodeConfig,\n} from './NativeAnimatedModule';\nimport type {AnimationConfig, EndCallback} from './animations/Animation';\nimport type {InterpolationConfigType} from './nodes/AnimatedInterpolation';\nimport invariant from 'invariant';\n\n// TODO T69437152 @petetheheat - Delete this fork when Fabric ships to 100%.\nconst NativeAnimatedModule =\n Platform.OS === 'ios' && global.RN$Bridgeless\n ? NativeAnimatedTurboModule\n : NativeAnimatedNonTurboModule;\n\nlet __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */\nlet __nativeAnimationIdCount = 1; /* used for started animations */\n\nlet nativeEventEmitter;\n\nlet waitingForQueuedOperations = new Set();\nlet queueOperations = false;\nlet queue: Array<() => void> = [];\n\n/**\n * Simple wrappers around NativeAnimatedModule to provide flow and autocomplete support for\n * the native module methods\n */\nconst API = {\n getValue: function(\n tag: number,\n saveValueCallback: (value: number) => void,\n ): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() => {\n NativeAnimatedModule.getValue(tag, saveValueCallback);\n });\n },\n setWaitingForIdentifier: function(id: string): void {\n waitingForQueuedOperations.add(id);\n queueOperations = true;\n },\n unsetWaitingForIdentifier: function(id: string): void {\n waitingForQueuedOperations.delete(id);\n\n if (waitingForQueuedOperations.size === 0) {\n queueOperations = false;\n API.disableQueue();\n }\n },\n disableQueue: function(): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n\n if (Platform.OS === 'android') {\n NativeAnimatedModule.startOperationBatch();\n }\n for (let q = 0, l = queue.length; q < l; q++) {\n queue[q]();\n }\n queue.length = 0;\n if (Platform.OS === 'android') {\n NativeAnimatedModule.finishOperationBatch();\n }\n },\n queueOperation: (fn: () => void): void => {\n if (queueOperations) {\n queue.push(fn);\n } else {\n fn();\n }\n },\n createAnimatedNode: function(tag: number, config: AnimatedNodeConfig): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.createAnimatedNode(tag, config),\n );\n },\n startListeningToAnimatedNodeValue: function(tag: number) {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.startListeningToAnimatedNodeValue(tag),\n );\n },\n stopListeningToAnimatedNodeValue: function(tag: number) {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.stopListeningToAnimatedNodeValue(tag),\n );\n },\n connectAnimatedNodes: function(parentTag: number, childTag: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.connectAnimatedNodes(parentTag, childTag),\n );\n },\n disconnectAnimatedNodes: function(parentTag: number, childTag: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.disconnectAnimatedNodes(parentTag, childTag),\n );\n },\n startAnimatingNode: function(\n animationId: number,\n nodeTag: number,\n config: AnimatingNodeConfig,\n endCallback: EndCallback,\n ): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.startAnimatingNode(\n animationId,\n nodeTag,\n config,\n endCallback,\n ),\n );\n },\n stopAnimation: function(animationId: number) {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() => NativeAnimatedModule.stopAnimation(animationId));\n },\n setAnimatedNodeValue: function(nodeTag: number, value: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.setAnimatedNodeValue(nodeTag, value),\n );\n },\n setAnimatedNodeOffset: function(nodeTag: number, offset: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.setAnimatedNodeOffset(nodeTag, offset),\n );\n },\n flattenAnimatedNodeOffset: function(nodeTag: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.flattenAnimatedNodeOffset(nodeTag),\n );\n },\n extractAnimatedNodeOffset: function(nodeTag: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.extractAnimatedNodeOffset(nodeTag),\n );\n },\n connectAnimatedNodeToView: function(nodeTag: number, viewTag: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.connectAnimatedNodeToView(nodeTag, viewTag),\n );\n },\n disconnectAnimatedNodeFromView: function(\n nodeTag: number,\n viewTag: number,\n ): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.disconnectAnimatedNodeFromView(nodeTag, viewTag),\n );\n },\n restoreDefaultValues: function(nodeTag: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n // Backwards compat with older native runtimes, can be removed later.\n if (NativeAnimatedModule.restoreDefaultValues != null) {\n API.queueOperation(() =>\n NativeAnimatedModule.restoreDefaultValues(nodeTag),\n );\n }\n },\n dropAnimatedNode: function(tag: number): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() => NativeAnimatedModule.dropAnimatedNode(tag));\n },\n addAnimatedEventToView: function(\n viewTag: number,\n eventName: string,\n eventMapping: EventMapping,\n ) {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.addAnimatedEventToView(\n viewTag,\n eventName,\n eventMapping,\n ),\n );\n },\n removeAnimatedEventFromView(\n viewTag: number,\n eventName: string,\n animatedNodeTag: number,\n ) {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n API.queueOperation(() =>\n NativeAnimatedModule.removeAnimatedEventFromView(\n viewTag,\n eventName,\n animatedNodeTag,\n ),\n );\n },\n};\n\n/**\n * Styles allowed by the native animated implementation.\n *\n * In general native animated implementation should support any numeric property that doesn't need\n * to be updated through the shadow view hierarchy (all non-layout properties).\n */\nconst SUPPORTED_STYLES = {\n opacity: true,\n transform: true,\n borderRadius: true,\n borderBottomEndRadius: true,\n borderBottomLeftRadius: true,\n borderBottomRightRadius: true,\n borderBottomStartRadius: true,\n borderTopEndRadius: true,\n borderTopLeftRadius: true,\n borderTopRightRadius: true,\n borderTopStartRadius: true,\n elevation: true,\n zIndex: true,\n /* ios styles */\n shadowOpacity: true,\n shadowRadius: true,\n /* legacy android transform properties */\n scaleX: true,\n scaleY: true,\n translateX: true,\n translateY: true,\n};\n\nconst SUPPORTED_TRANSFORMS = {\n translateX: true,\n translateY: true,\n scale: true,\n scaleX: true,\n scaleY: true,\n rotate: true,\n rotateX: true,\n rotateY: true,\n rotateZ: true,\n perspective: true,\n};\n\nconst SUPPORTED_INTERPOLATION_PARAMS = {\n inputRange: true,\n outputRange: true,\n extrapolate: true,\n extrapolateRight: true,\n extrapolateLeft: true,\n};\n\nfunction addWhitelistedStyleProp(prop: string): void {\n SUPPORTED_STYLES[prop] = true;\n}\n\nfunction addWhitelistedTransformProp(prop: string): void {\n SUPPORTED_TRANSFORMS[prop] = true;\n}\n\nfunction addWhitelistedInterpolationParam(param: string): void {\n SUPPORTED_INTERPOLATION_PARAMS[param] = true;\n}\n\nfunction validateTransform(\n configs: Array<\n | {\n type: 'animated',\n property: string,\n nodeTag: ?number,\n ...\n }\n | {\n type: 'static',\n property: string,\n value: number | string,\n ...\n },\n >,\n): void {\n configs.forEach(config => {\n if (!SUPPORTED_TRANSFORMS.hasOwnProperty(config.property)) {\n throw new Error(\n `Property '${config.property}' is not supported by native animated module`,\n );\n }\n });\n}\n\nfunction validateStyles(styles: {[key: string]: ?number, ...}): void {\n for (const key in styles) {\n if (!SUPPORTED_STYLES.hasOwnProperty(key)) {\n throw new Error(\n `Style property '${key}' is not supported by native animated module`,\n );\n }\n }\n}\n\nfunction validateInterpolation(config: InterpolationConfigType): void {\n for (const key in config) {\n if (!SUPPORTED_INTERPOLATION_PARAMS.hasOwnProperty(key)) {\n throw new Error(\n `Interpolation property '${key}' is not supported by native animated module`,\n );\n }\n }\n}\n\nfunction generateNewNodeTag(): number {\n return __nativeAnimatedNodeTagCount++;\n}\n\nfunction generateNewAnimationId(): number {\n return __nativeAnimationIdCount++;\n}\n\nfunction assertNativeAnimatedModule(): void {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n}\n\nlet _warnedMissingNativeAnimated = false;\n\nfunction shouldUseNativeDriver(\n config: {...AnimationConfig, ...} | EventConfig,\n): boolean {\n if (config.useNativeDriver == null) {\n console.warn(\n 'Animated: `useNativeDriver` was not specified. This is a required ' +\n 'option and must be explicitly set to `true` or `false`',\n );\n }\n\n if (config.useNativeDriver === true && !NativeAnimatedModule) {\n if (!_warnedMissingNativeAnimated) {\n console.warn(\n 'Animated: `useNativeDriver` is not supported because the native ' +\n 'animated module is missing. Falling back to JS-based animation. To ' +\n 'resolve this, add `RCTAnimation` module to this app, or remove ' +\n '`useNativeDriver`. ' +\n 'Make sure to run `pod install` first. Read more about autolinking: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md',\n );\n _warnedMissingNativeAnimated = true;\n }\n return false;\n }\n\n return config.useNativeDriver || false;\n}\n\nfunction transformDataType(value: number | string): number | string {\n // Change the string type to number type so we can reuse the same logic in\n // iOS and Android platform\n if (typeof value !== 'string') {\n return value;\n }\n if (/deg$/.test(value)) {\n const degrees = parseFloat(value) || 0;\n const radians = (degrees * Math.PI) / 180.0;\n return radians;\n } else {\n return value;\n }\n}\n\nmodule.exports = {\n API,\n addWhitelistedStyleProp,\n addWhitelistedTransformProp,\n addWhitelistedInterpolationParam,\n validateStyles,\n validateTransform,\n validateInterpolation,\n generateNewNodeTag,\n generateNewAnimationId,\n assertNativeAnimatedModule,\n shouldUseNativeDriver,\n transformDataType,\n // $FlowExpectedError[unsafe-getters-setters] - unsafe getter lint suppresion\n // $FlowExpectedError[missing-type-arg] - unsafe getter lint suppresion\n get nativeEventEmitter(): NativeEventEmitter {\n if (!nativeEventEmitter) {\n nativeEventEmitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeAnimatedModule,\n );\n }\n return nativeEventEmitter;\n },\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\ntype EndResult = {finished: boolean, ...};\ntype EndCallback = (result: EndResult) => void;\ntype SaveValueCallback = (value: number) => void;\n\nexport type EventMapping = {|\n nativeEventPath: Array,\n animatedValueTag: ?number,\n|};\n\n// The config has different keys depending on the type of the Node\n// TODO(T54896888): Make these types strict\nexport type AnimatedNodeConfig = Object;\nexport type AnimatingNodeConfig = Object;\n\nexport interface Spec extends TurboModule {\n +startOperationBatch: () => void;\n +finishOperationBatch: () => void;\n +createAnimatedNode: (tag: number, config: AnimatedNodeConfig) => void;\n +getValue: (tag: number, saveValueCallback: SaveValueCallback) => void;\n +startListeningToAnimatedNodeValue: (tag: number) => void;\n +stopListeningToAnimatedNodeValue: (tag: number) => void;\n +connectAnimatedNodes: (parentTag: number, childTag: number) => void;\n +disconnectAnimatedNodes: (parentTag: number, childTag: number) => void;\n +startAnimatingNode: (\n animationId: number,\n nodeTag: number,\n config: AnimatingNodeConfig,\n endCallback: EndCallback,\n ) => void;\n +stopAnimation: (animationId: number) => void;\n +setAnimatedNodeValue: (nodeTag: number, value: number) => void;\n +setAnimatedNodeOffset: (nodeTag: number, offset: number) => void;\n +flattenAnimatedNodeOffset: (nodeTag: number) => void;\n +extractAnimatedNodeOffset: (nodeTag: number) => void;\n +connectAnimatedNodeToView: (nodeTag: number, viewTag: number) => void;\n +disconnectAnimatedNodeFromView: (nodeTag: number, viewTag: number) => void;\n +restoreDefaultValues: (nodeTag: number) => void;\n +dropAnimatedNode: (tag: number) => void;\n +addAnimatedEventToView: (\n viewTag: number,\n eventName: string,\n eventMapping: EventMapping,\n ) => void;\n +removeAnimatedEventFromView: (\n viewTag: number,\n eventName: string,\n animatedNodeTag: number,\n ) => void;\n\n // Events\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.get('NativeAnimatedModule'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\ntype EndResult = {finished: boolean, ...};\ntype EndCallback = (result: EndResult) => void;\ntype SaveValueCallback = (value: number) => void;\n\nexport type EventMapping = {|\n nativeEventPath: Array,\n animatedValueTag: ?number,\n|};\n\n// The config has different keys depending on the type of the Node\n// TODO(T54896888): Make these types strict\nexport type AnimatedNodeConfig = Object;\nexport type AnimatingNodeConfig = Object;\n\nexport interface Spec extends TurboModule {\n +startOperationBatch: () => void;\n +finishOperationBatch: () => void;\n +createAnimatedNode: (tag: number, config: AnimatedNodeConfig) => void;\n +getValue: (tag: number, saveValueCallback: SaveValueCallback) => void;\n +startListeningToAnimatedNodeValue: (tag: number) => void;\n +stopListeningToAnimatedNodeValue: (tag: number) => void;\n +connectAnimatedNodes: (parentTag: number, childTag: number) => void;\n +disconnectAnimatedNodes: (parentTag: number, childTag: number) => void;\n +startAnimatingNode: (\n animationId: number,\n nodeTag: number,\n config: AnimatingNodeConfig,\n endCallback: EndCallback,\n ) => void;\n +stopAnimation: (animationId: number) => void;\n +setAnimatedNodeValue: (nodeTag: number, value: number) => void;\n +setAnimatedNodeOffset: (nodeTag: number, offset: number) => void;\n +flattenAnimatedNodeOffset: (nodeTag: number) => void;\n +extractAnimatedNodeOffset: (nodeTag: number) => void;\n +connectAnimatedNodeToView: (nodeTag: number, viewTag: number) => void;\n +disconnectAnimatedNodeFromView: (nodeTag: number, viewTag: number) => void;\n +restoreDefaultValues: (nodeTag: number) => void;\n +dropAnimatedNode: (tag: number) => void;\n +addAnimatedEventToView: (\n viewTag: number,\n eventName: string,\n eventMapping: EventMapping,\n ) => void;\n +removeAnimatedEventFromView: (\n viewTag: number,\n eventName: string,\n animatedNodeTag: number,\n ) => void;\n\n // Events\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.get(\n 'NativeAnimatedTurboModule',\n): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nconst AnimatedNode = require('./AnimatedNode');\nconst NativeAnimatedHelper = require('../NativeAnimatedHelper');\n\nclass AnimatedWithChildren extends AnimatedNode {\n _children: Array;\n\n constructor() {\n super();\n this._children = [];\n }\n\n __makeNative() {\n if (!this.__isNative) {\n this.__isNative = true;\n for (const child of this._children) {\n child.__makeNative();\n NativeAnimatedHelper.API.connectAnimatedNodes(\n this.__getNativeTag(),\n child.__getNativeTag(),\n );\n }\n }\n super.__makeNative();\n }\n\n __addChild(child: AnimatedNode): void {\n if (this._children.length === 0) {\n this.__attach();\n }\n this._children.push(child);\n if (this.__isNative) {\n // Only accept \"native\" animated nodes as children\n child.__makeNative();\n NativeAnimatedHelper.API.connectAnimatedNodes(\n this.__getNativeTag(),\n child.__getNativeTag(),\n );\n }\n }\n\n __removeChild(child: AnimatedNode): void {\n const index = this._children.indexOf(child);\n if (index === -1) {\n console.warn(\"Trying to remove a child that doesn't exist\");\n return;\n }\n if (this.__isNative && child.__isNative) {\n NativeAnimatedHelper.API.disconnectAnimatedNodes(\n this.__getNativeTag(),\n child.__getNativeTag(),\n );\n }\n this._children.splice(index, 1);\n if (this._children.length === 0) {\n this.__detach();\n }\n }\n\n __getChildren(): Array {\n return this._children;\n }\n\n __callListeners(value: number): void {\n super.__callListeners(value);\n if (!this.__isNative) {\n for (const child of this._children) {\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n if (child.__getValue) {\n child.__callListeners(child.__getValue());\n }\n }\n }\n }\n}\n\nmodule.exports = AnimatedWithChildren;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nconst BatchedBridge = require('../BatchedBridge/BatchedBridge');\nconst TaskQueue = require('./TaskQueue');\n\nconst infoLog = require('../Utilities/infoLog');\nconst invariant = require('invariant');\n\nimport EventEmitter from '../vendor/emitter/EventEmitter';\n\nexport type Handle = number;\nimport type {Task} from './TaskQueue';\n\nconst _emitter = new EventEmitter<{\n interactionComplete: [],\n interactionStart: [],\n}>();\n\nconst DEBUG_DELAY: 0 = 0;\nconst DEBUG: false = false;\n\n/**\n * InteractionManager allows long-running work to be scheduled after any\n * interactions/animations have completed. In particular, this allows JavaScript\n * animations to run smoothly.\n *\n * Applications can schedule tasks to run after interactions with the following:\n *\n * ```\n * InteractionManager.runAfterInteractions(() => {\n * // ...long-running synchronous task...\n * });\n * ```\n *\n * Compare this to other scheduling alternatives:\n *\n * - requestAnimationFrame(): for code that animates a view over time.\n * - setImmediate/setTimeout(): run code later, note this may delay animations.\n * - runAfterInteractions(): run code later, without delaying active animations.\n *\n * The touch handling system considers one or more active touches to be an\n * 'interaction' and will delay `runAfterInteractions()` callbacks until all\n * touches have ended or been cancelled.\n *\n * InteractionManager also allows applications to register animations by\n * creating an interaction 'handle' on animation start, and clearing it upon\n * completion:\n *\n * ```\n * var handle = InteractionManager.createInteractionHandle();\n * // run animation... (`runAfterInteractions` tasks are queued)\n * // later, on animation completion:\n * InteractionManager.clearInteractionHandle(handle);\n * // queued tasks run if all handles were cleared\n * ```\n *\n * `runAfterInteractions` takes either a plain callback function, or a\n * `PromiseTask` object with a `gen` method that returns a `Promise`. If a\n * `PromiseTask` is supplied, then it is fully resolved (including asynchronous\n * dependencies that also schedule more tasks via `runAfterInteractions`) before\n * starting on the next task that might have been queued up synchronously\n * earlier.\n *\n * By default, queued tasks are executed together in a loop in one\n * `setImmediate` batch. If `setDeadline` is called with a positive number, then\n * tasks will only be executed until the deadline (in terms of js event loop run\n * time) approaches, at which point execution will yield via setTimeout,\n * allowing events such as touches to start interactions and block queued tasks\n * from executing, making apps more responsive.\n */\nconst InteractionManager = {\n Events: {\n interactionStart: 'interactionStart',\n interactionComplete: 'interactionComplete',\n },\n\n /**\n * Schedule a function to run after all interactions have completed. Returns a cancellable\n * \"promise\".\n */\n runAfterInteractions(\n task: ?Task,\n ): {\n then: (\n onFulfill?: ?(void) => ?(Promise | U),\n onReject?: ?(error: mixed) => ?(Promise | U),\n ) => Promise,\n done: () => void,\n cancel: () => void,\n ...\n } {\n const tasks: Array = [];\n const promise = new Promise((resolve: () => void) => {\n _scheduleUpdate();\n if (task) {\n tasks.push(task);\n }\n tasks.push({\n run: resolve,\n name: 'resolve ' + ((task && task.name) || '?'),\n });\n _taskQueue.enqueueTasks(tasks);\n });\n return {\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n then: promise.then.bind(promise),\n done: (...args) => {\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n if (promise.done) {\n return promise.done(...args);\n } else {\n console.warn(\n 'Tried to call done when not supported by current Promise implementation.',\n );\n }\n },\n cancel: function() {\n _taskQueue.cancelTasks(tasks);\n },\n };\n },\n\n /**\n * Notify manager that an interaction has started.\n */\n createInteractionHandle(): Handle {\n DEBUG && infoLog('InteractionManager: create interaction handle');\n _scheduleUpdate();\n const handle = ++_inc;\n _addInteractionSet.add(handle);\n return handle;\n },\n\n /**\n * Notify manager that an interaction has completed.\n */\n clearInteractionHandle(handle: Handle) {\n DEBUG && infoLog('InteractionManager: clear interaction handle');\n invariant(!!handle, 'InteractionManager: Must provide a handle to clear.');\n _scheduleUpdate();\n _addInteractionSet.delete(handle);\n _deleteInteractionSet.add(handle);\n },\n\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n addListener: (_emitter.addListener.bind(_emitter): $FlowFixMe),\n\n /**\n * A positive number will use setTimeout to schedule any tasks after the\n * eventLoopRunningTime hits the deadline value, otherwise all tasks will be\n * executed in one setImmediate batch (default).\n */\n setDeadline(deadline: number) {\n _deadline = deadline;\n },\n};\n\nconst _interactionSet = new Set();\nconst _addInteractionSet = new Set();\nconst _deleteInteractionSet = new Set();\nconst _taskQueue = new TaskQueue({onMoreTasks: _scheduleUpdate});\nlet _nextUpdateHandle = 0;\nlet _inc = 0;\nlet _deadline = -1;\n\n/**\n * Schedule an asynchronous update to the interaction state.\n */\nfunction _scheduleUpdate() {\n if (!_nextUpdateHandle) {\n if (_deadline > 0) {\n _nextUpdateHandle = setTimeout(_processUpdate, 0 + DEBUG_DELAY);\n } else {\n _nextUpdateHandle = setImmediate(_processUpdate);\n }\n }\n}\n\n/**\n * Notify listeners, process queue, etc\n */\nfunction _processUpdate() {\n _nextUpdateHandle = 0;\n\n const interactionCount = _interactionSet.size;\n _addInteractionSet.forEach(handle => _interactionSet.add(handle));\n _deleteInteractionSet.forEach(handle => _interactionSet.delete(handle));\n const nextInteractionCount = _interactionSet.size;\n\n if (interactionCount !== 0 && nextInteractionCount === 0) {\n // transition from 1+ --> 0 interactions\n _emitter.emit(InteractionManager.Events.interactionComplete);\n } else if (interactionCount === 0 && nextInteractionCount !== 0) {\n // transition from 0 --> 1+ interactions\n _emitter.emit(InteractionManager.Events.interactionStart);\n }\n\n // process the queue regardless of a transition\n if (nextInteractionCount === 0) {\n while (_taskQueue.hasTasksToProcess()) {\n _taskQueue.processNext();\n if (\n _deadline > 0 &&\n BatchedBridge.getEventLoopRunningTime() >= _deadline\n ) {\n // Hit deadline before processing all tasks, so process more later.\n _scheduleUpdate();\n break;\n }\n }\n }\n _addInteractionSet.clear();\n _deleteInteractionSet.clear();\n}\n\nmodule.exports = InteractionManager;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst infoLog = require('../Utilities/infoLog');\nconst invariant = require('invariant');\n\ntype SimpleTask = {\n name: string,\n run: () => void,\n};\ntype PromiseTask = {\n name: string,\n gen: () => Promise,\n};\nexport type Task = SimpleTask | PromiseTask | (() => void);\n\nconst DEBUG: false = false;\n\n/**\n * TaskQueue - A system for queueing and executing a mix of simple callbacks and\n * trees of dependent tasks based on Promises. No tasks are executed unless\n * `processNext` is called.\n *\n * `enqueue` takes a Task object with either a simple `run` callback, or a\n * `gen` function that returns a `Promise` and puts it in the queue. If a gen\n * function is supplied, then the promise it returns will block execution of\n * tasks already in the queue until it resolves. This can be used to make sure\n * the first task is fully resolved (including asynchronous dependencies that\n * also schedule more tasks via `enqueue`) before starting on the next task.\n * The `onMoreTasks` constructor argument is used to inform the owner that an\n * async task has resolved and that the queue should be processed again.\n *\n * Note: Tasks are only actually executed with explicit calls to `processNext`.\n */\nclass TaskQueue {\n /**\n * TaskQueue instances are self contained and independent, so multiple tasks\n * of varying semantics and priority can operate together.\n *\n * `onMoreTasks` is invoked when `PromiseTask`s resolve if there are more\n * tasks to process.\n */\n constructor({onMoreTasks}: {onMoreTasks: () => void, ...}) {\n this._onMoreTasks = onMoreTasks;\n this._queueStack = [{tasks: [], popable: false}];\n }\n\n /**\n * Add a task to the queue. It is recommended to name your tasks for easier\n * async debugging. Tasks will not be executed until `processNext` is called\n * explicitly.\n */\n enqueue(task: Task): void {\n this._getCurrentQueue().push(task);\n }\n\n enqueueTasks(tasks: Array): void {\n tasks.forEach(task => this.enqueue(task));\n }\n\n cancelTasks(tasksToCancel: Array): void {\n // search through all tasks and remove them.\n this._queueStack = this._queueStack\n .map(queue => ({\n ...queue,\n tasks: queue.tasks.filter(task => tasksToCancel.indexOf(task) === -1),\n }))\n .filter((queue, idx) => queue.tasks.length > 0 || idx === 0);\n }\n\n /**\n * Check to see if `processNext` should be called.\n *\n * @returns {boolean} Returns true if there are tasks that are ready to be\n * processed with `processNext`, or returns false if there are no more tasks\n * to be processed right now, although there may be tasks in the queue that\n * are blocked by earlier `PromiseTask`s that haven't resolved yet.\n * `onMoreTasks` will be called after each `PromiseTask` resolves if there are\n * tasks ready to run at that point.\n */\n hasTasksToProcess(): boolean {\n return this._getCurrentQueue().length > 0;\n }\n\n /**\n * Executes the next task in the queue.\n */\n processNext(): void {\n const queue = this._getCurrentQueue();\n if (queue.length) {\n const task = queue.shift();\n try {\n if (typeof task === 'object' && task.gen) {\n DEBUG && infoLog('TaskQueue: genPromise for task ' + task.name);\n this._genPromise(task);\n } else if (typeof task === 'object' && task.run) {\n DEBUG && infoLog('TaskQueue: run task ' + task.name);\n task.run();\n } else {\n invariant(\n typeof task === 'function',\n 'Expected Function, SimpleTask, or PromiseTask, but got:\\n' +\n JSON.stringify(task, null, 2),\n );\n DEBUG && infoLog('TaskQueue: run anonymous task');\n task();\n }\n } catch (e) {\n e.message =\n 'TaskQueue: Error with task ' + (task.name || '') + ': ' + e.message;\n throw e;\n }\n }\n }\n\n _queueStack: Array<{\n tasks: Array,\n popable: boolean,\n ...\n }>;\n _onMoreTasks: () => void;\n\n _getCurrentQueue(): Array {\n const stackIdx = this._queueStack.length - 1;\n const queue = this._queueStack[stackIdx];\n if (\n queue.popable &&\n queue.tasks.length === 0 &&\n this._queueStack.length > 1\n ) {\n this._queueStack.pop();\n DEBUG &&\n infoLog('TaskQueue: popped queue: ', {\n stackIdx,\n queueStackSize: this._queueStack.length,\n });\n return this._getCurrentQueue();\n } else {\n return queue.tasks;\n }\n }\n\n _genPromise(task: PromiseTask) {\n // Each async task pushes it's own queue onto the queue stack. This\n // effectively defers execution of previously queued tasks until the promise\n // resolves, at which point we allow the new queue to be popped, which\n // happens once it is fully processed.\n this._queueStack.push({tasks: [], popable: false});\n const stackIdx = this._queueStack.length - 1;\n const stackItem = this._queueStack[stackIdx];\n DEBUG && infoLog('TaskQueue: push new queue: ', {stackIdx});\n DEBUG && infoLog('TaskQueue: exec gen task ' + task.name);\n task\n .gen()\n .then(() => {\n DEBUG &&\n infoLog('TaskQueue: onThen for gen task ' + task.name, {\n stackIdx,\n queueStackSize: this._queueStack.length,\n });\n stackItem.popable = true;\n this.hasTasksToProcess() && this._onMoreTasks();\n })\n .catch(ex => {\n ex.message = `TaskQueue: Error resolving Promise in task ${task.name}: ${ex.message}`;\n throw ex;\n })\n .done();\n }\n}\n\nmodule.exports = TaskQueue;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst {AnimatedEvent, attachNativeEvent} = require('./AnimatedEvent');\nconst AnimatedAddition = require('./nodes/AnimatedAddition');\nconst AnimatedDiffClamp = require('./nodes/AnimatedDiffClamp');\nconst AnimatedDivision = require('./nodes/AnimatedDivision');\nconst AnimatedInterpolation = require('./nodes/AnimatedInterpolation');\nconst AnimatedModulo = require('./nodes/AnimatedModulo');\nconst AnimatedMultiplication = require('./nodes/AnimatedMultiplication');\nconst AnimatedNode = require('./nodes/AnimatedNode');\nconst AnimatedProps = require('./nodes/AnimatedProps');\nconst AnimatedSubtraction = require('./nodes/AnimatedSubtraction');\nconst AnimatedTracking = require('./nodes/AnimatedTracking');\nconst AnimatedValue = require('./nodes/AnimatedValue');\nconst AnimatedValueXY = require('./nodes/AnimatedValueXY');\nconst DecayAnimation = require('./animations/DecayAnimation');\nconst SpringAnimation = require('./animations/SpringAnimation');\nconst TimingAnimation = require('./animations/TimingAnimation');\n\nconst createAnimatedComponent = require('./createAnimatedComponent');\n\nimport type {\n AnimationConfig,\n EndCallback,\n EndResult,\n} from './animations/Animation';\nimport type {TimingAnimationConfig} from './animations/TimingAnimation';\nimport type {DecayAnimationConfig} from './animations/DecayAnimation';\nimport type {SpringAnimationConfig} from './animations/SpringAnimation';\nimport type {Mapping, EventConfig} from './AnimatedEvent';\n\nexport type CompositeAnimation = {\n start: (callback?: ?EndCallback) => void,\n stop: () => void,\n reset: () => void,\n _startNativeLoop: (iterations?: number) => void,\n _isUsingNativeDriver: () => boolean,\n ...\n};\n\nconst add = function(\n a: AnimatedNode | number,\n b: AnimatedNode | number,\n): AnimatedAddition {\n return new AnimatedAddition(a, b);\n};\n\nconst subtract = function(\n a: AnimatedNode | number,\n b: AnimatedNode | number,\n): AnimatedSubtraction {\n return new AnimatedSubtraction(a, b);\n};\n\nconst divide = function(\n a: AnimatedNode | number,\n b: AnimatedNode | number,\n): AnimatedDivision {\n return new AnimatedDivision(a, b);\n};\n\nconst multiply = function(\n a: AnimatedNode | number,\n b: AnimatedNode | number,\n): AnimatedMultiplication {\n return new AnimatedMultiplication(a, b);\n};\n\nconst modulo = function(a: AnimatedNode, modulus: number): AnimatedModulo {\n return new AnimatedModulo(a, modulus);\n};\n\nconst diffClamp = function(\n a: AnimatedNode,\n min: number,\n max: number,\n): AnimatedDiffClamp {\n return new AnimatedDiffClamp(a, min, max);\n};\n\nconst _combineCallbacks = function(\n callback: ?EndCallback,\n config: {...AnimationConfig, ...},\n) {\n if (callback && config.onComplete) {\n return (...args) => {\n config.onComplete && config.onComplete(...args);\n callback && callback(...args);\n };\n } else {\n return callback || config.onComplete;\n }\n};\n\nconst maybeVectorAnim = function(\n value: AnimatedValue | AnimatedValueXY,\n config: Object,\n anim: (value: AnimatedValue, config: Object) => CompositeAnimation,\n): ?CompositeAnimation {\n if (value instanceof AnimatedValueXY) {\n const configX = {...config};\n const configY = {...config};\n for (const key in config) {\n const {x, y} = config[key];\n if (x !== undefined && y !== undefined) {\n configX[key] = x;\n configY[key] = y;\n }\n }\n const aX = anim((value: AnimatedValueXY).x, configX);\n const aY = anim((value: AnimatedValueXY).y, configY);\n // We use `stopTogether: false` here because otherwise tracking will break\n // because the second animation will get stopped before it can update.\n return parallel([aX, aY], {stopTogether: false});\n }\n return null;\n};\n\nconst spring = function(\n value: AnimatedValue | AnimatedValueXY,\n config: SpringAnimationConfig,\n): CompositeAnimation {\n const start = function(\n animatedValue: AnimatedValue | AnimatedValueXY,\n configuration: SpringAnimationConfig,\n callback?: ?EndCallback,\n ): void {\n callback = _combineCallbacks(callback, configuration);\n const singleValue: any = animatedValue;\n const singleConfig: any = configuration;\n singleValue.stopTracking();\n if (configuration.toValue instanceof AnimatedNode) {\n singleValue.track(\n new AnimatedTracking(\n singleValue,\n configuration.toValue,\n SpringAnimation,\n singleConfig,\n callback,\n ),\n );\n } else {\n singleValue.animate(new SpringAnimation(singleConfig), callback);\n }\n };\n return (\n maybeVectorAnim(value, config, spring) || {\n start: function(callback?: ?EndCallback): void {\n start(value, config, callback);\n },\n\n stop: function(): void {\n value.stopAnimation();\n },\n\n reset: function(): void {\n value.resetAnimation();\n },\n\n _startNativeLoop: function(iterations?: number): void {\n const singleConfig = {...config, iterations};\n start(value, singleConfig);\n },\n\n _isUsingNativeDriver: function(): boolean {\n return config.useNativeDriver || false;\n },\n }\n );\n};\n\nconst timing = function(\n value: AnimatedValue | AnimatedValueXY,\n config: TimingAnimationConfig,\n): CompositeAnimation {\n const start = function(\n animatedValue: AnimatedValue | AnimatedValueXY,\n configuration: TimingAnimationConfig,\n callback?: ?EndCallback,\n ): void {\n callback = _combineCallbacks(callback, configuration);\n const singleValue: any = animatedValue;\n const singleConfig: any = configuration;\n singleValue.stopTracking();\n if (configuration.toValue instanceof AnimatedNode) {\n singleValue.track(\n new AnimatedTracking(\n singleValue,\n configuration.toValue,\n TimingAnimation,\n singleConfig,\n callback,\n ),\n );\n } else {\n singleValue.animate(new TimingAnimation(singleConfig), callback);\n }\n };\n\n return (\n maybeVectorAnim(value, config, timing) || {\n start: function(callback?: ?EndCallback): void {\n start(value, config, callback);\n },\n\n stop: function(): void {\n value.stopAnimation();\n },\n\n reset: function(): void {\n value.resetAnimation();\n },\n\n _startNativeLoop: function(iterations?: number): void {\n const singleConfig = {...config, iterations};\n start(value, singleConfig);\n },\n\n _isUsingNativeDriver: function(): boolean {\n return config.useNativeDriver || false;\n },\n }\n );\n};\n\nconst decay = function(\n value: AnimatedValue | AnimatedValueXY,\n config: DecayAnimationConfig,\n): CompositeAnimation {\n const start = function(\n animatedValue: AnimatedValue | AnimatedValueXY,\n configuration: DecayAnimationConfig,\n callback?: ?EndCallback,\n ): void {\n callback = _combineCallbacks(callback, configuration);\n const singleValue: any = animatedValue;\n const singleConfig: any = configuration;\n singleValue.stopTracking();\n singleValue.animate(new DecayAnimation(singleConfig), callback);\n };\n\n return (\n maybeVectorAnim(value, config, decay) || {\n start: function(callback?: ?EndCallback): void {\n start(value, config, callback);\n },\n\n stop: function(): void {\n value.stopAnimation();\n },\n\n reset: function(): void {\n value.resetAnimation();\n },\n\n _startNativeLoop: function(iterations?: number): void {\n const singleConfig = {...config, iterations};\n start(value, singleConfig);\n },\n\n _isUsingNativeDriver: function(): boolean {\n return config.useNativeDriver || false;\n },\n }\n );\n};\n\nconst sequence = function(\n animations: Array,\n): CompositeAnimation {\n let current = 0;\n return {\n start: function(callback?: ?EndCallback) {\n const onComplete = function(result) {\n if (!result.finished) {\n callback && callback(result);\n return;\n }\n\n current++;\n\n if (current === animations.length) {\n callback && callback(result);\n return;\n }\n\n animations[current].start(onComplete);\n };\n\n if (animations.length === 0) {\n callback && callback({finished: true});\n } else {\n animations[current].start(onComplete);\n }\n },\n\n stop: function() {\n if (current < animations.length) {\n animations[current].stop();\n }\n },\n\n reset: function() {\n animations.forEach((animation, idx) => {\n if (idx <= current) {\n animation.reset();\n }\n });\n current = 0;\n },\n\n _startNativeLoop: function() {\n throw new Error(\n 'Loops run using the native driver cannot contain Animated.sequence animations',\n );\n },\n\n _isUsingNativeDriver: function(): boolean {\n return false;\n },\n };\n};\n\ntype ParallelConfig = {\n // If one is stopped, stop all. default: true\n stopTogether?: boolean,\n ...\n};\nconst parallel = function(\n animations: Array,\n config?: ?ParallelConfig,\n): CompositeAnimation {\n let doneCount = 0;\n // Make sure we only call stop() at most once for each animation\n const hasEnded = {};\n const stopTogether = !(config && config.stopTogether === false);\n\n const result = {\n start: function(callback?: ?EndCallback) {\n if (doneCount === animations.length) {\n callback && callback({finished: true});\n return;\n }\n\n animations.forEach((animation, idx) => {\n const cb = function(endResult) {\n hasEnded[idx] = true;\n doneCount++;\n if (doneCount === animations.length) {\n doneCount = 0;\n callback && callback(endResult);\n return;\n }\n\n if (!endResult.finished && stopTogether) {\n result.stop();\n }\n };\n\n if (!animation) {\n cb({finished: true});\n } else {\n animation.start(cb);\n }\n });\n },\n\n stop: function(): void {\n animations.forEach((animation, idx) => {\n !hasEnded[idx] && animation.stop();\n hasEnded[idx] = true;\n });\n },\n\n reset: function(): void {\n animations.forEach((animation, idx) => {\n animation.reset();\n hasEnded[idx] = false;\n doneCount = 0;\n });\n },\n\n _startNativeLoop: function() {\n throw new Error(\n 'Loops run using the native driver cannot contain Animated.parallel animations',\n );\n },\n\n _isUsingNativeDriver: function(): boolean {\n return false;\n },\n };\n\n return result;\n};\n\nconst delay = function(time: number): CompositeAnimation {\n // Would be nice to make a specialized implementation\n return timing(new AnimatedValue(0), {\n toValue: 0,\n delay: time,\n duration: 0,\n useNativeDriver: false,\n });\n};\n\nconst stagger = function(\n time: number,\n animations: Array,\n): CompositeAnimation {\n return parallel(\n animations.map((animation, i) => {\n return sequence([delay(time * i), animation]);\n }),\n );\n};\n\ntype LoopAnimationConfig = {\n iterations: number,\n resetBeforeIteration?: boolean,\n ...\n};\n\nconst loop = function(\n animation: CompositeAnimation,\n {iterations = -1, resetBeforeIteration = true}: LoopAnimationConfig = {},\n): CompositeAnimation {\n let isFinished = false;\n let iterationsSoFar = 0;\n return {\n start: function(callback?: ?EndCallback) {\n const restart = function(result: EndResult = {finished: true}): void {\n if (\n isFinished ||\n iterationsSoFar === iterations ||\n result.finished === false\n ) {\n callback && callback(result);\n } else {\n iterationsSoFar++;\n resetBeforeIteration && animation.reset();\n animation.start(restart);\n }\n };\n if (!animation || iterations === 0) {\n callback && callback({finished: true});\n } else {\n if (animation._isUsingNativeDriver()) {\n animation._startNativeLoop(iterations);\n } else {\n restart(); // Start looping recursively on the js thread\n }\n }\n },\n\n stop: function(): void {\n isFinished = true;\n animation.stop();\n },\n\n reset: function(): void {\n iterationsSoFar = 0;\n isFinished = false;\n animation.reset();\n },\n\n _startNativeLoop: function() {\n throw new Error(\n 'Loops run using the native driver cannot contain Animated.loop animations',\n );\n },\n\n _isUsingNativeDriver: function(): boolean {\n return animation._isUsingNativeDriver();\n },\n };\n};\n\nfunction forkEvent(\n event: ?AnimatedEvent | ?Function,\n listener: Function,\n): AnimatedEvent | Function {\n if (!event) {\n return listener;\n } else if (event instanceof AnimatedEvent) {\n event.__addListener(listener);\n return event;\n } else {\n return (...args) => {\n typeof event === 'function' && event(...args);\n listener(...args);\n };\n }\n}\n\nfunction unforkEvent(\n event: ?AnimatedEvent | ?Function,\n listener: Function,\n): void {\n if (event && event instanceof AnimatedEvent) {\n event.__removeListener(listener);\n }\n}\n\nconst event = function(\n argMapping: $ReadOnlyArray,\n config: EventConfig,\n): any {\n const animatedEvent = new AnimatedEvent(argMapping, config);\n if (animatedEvent.__isNative) {\n return animatedEvent;\n } else {\n return animatedEvent.__getHandler();\n }\n};\n\n/**\n * The `Animated` library is designed to make animations fluid, powerful, and\n * easy to build and maintain. `Animated` focuses on declarative relationships\n * between inputs and outputs, with configurable transforms in between, and\n * simple `start`/`stop` methods to control time-based animation execution.\n * If additional transforms are added, be sure to include them in\n * AnimatedMock.js as well.\n *\n * See https://reactnative.dev/docs/animated.html\n */\nmodule.exports = {\n /**\n * Standard value class for driving animations. Typically initialized with\n * `new Animated.Value(0);`\n *\n * See https://reactnative.dev/docs/animated.html#value\n */\n Value: AnimatedValue,\n /**\n * 2D value class for driving 2D animations, such as pan gestures.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html\n */\n ValueXY: AnimatedValueXY,\n /**\n * Exported to use the Interpolation type in flow.\n *\n * See https://reactnative.dev/docs/animated.html#interpolation\n */\n Interpolation: AnimatedInterpolation,\n /**\n * Exported for ease of type checking. All animated values derive from this\n * class.\n *\n * See https://reactnative.dev/docs/animated.html#node\n */\n Node: AnimatedNode,\n\n /**\n * Animates a value from an initial velocity to zero based on a decay\n * coefficient.\n *\n * See https://reactnative.dev/docs/animated.html#decay\n */\n decay,\n /**\n * Animates a value along a timed easing curve. The Easing module has tons of\n * predefined curves, or you can use your own function.\n *\n * See https://reactnative.dev/docs/animated.html#timing\n */\n timing,\n /**\n * Animates a value according to an analytical spring model based on\n * damped harmonic oscillation.\n *\n * See https://reactnative.dev/docs/animated.html#spring\n */\n spring,\n\n /**\n * Creates a new Animated value composed from two Animated values added\n * together.\n *\n * See https://reactnative.dev/docs/animated.html#add\n */\n add,\n\n /**\n * Creates a new Animated value composed by subtracting the second Animated\n * value from the first Animated value.\n *\n * See https://reactnative.dev/docs/animated.html#subtract\n */\n subtract,\n\n /**\n * Creates a new Animated value composed by dividing the first Animated value\n * by the second Animated value.\n *\n * See https://reactnative.dev/docs/animated.html#divide\n */\n divide,\n\n /**\n * Creates a new Animated value composed from two Animated values multiplied\n * together.\n *\n * See https://reactnative.dev/docs/animated.html#multiply\n */\n multiply,\n\n /**\n * Creates a new Animated value that is the (non-negative) modulo of the\n * provided Animated value.\n *\n * See https://reactnative.dev/docs/animated.html#modulo\n */\n modulo,\n\n /**\n * Create a new Animated value that is limited between 2 values. It uses the\n * difference between the last value so even if the value is far from the\n * bounds it will start changing when the value starts getting closer again.\n *\n * See https://reactnative.dev/docs/animated.html#diffclamp\n */\n diffClamp,\n\n /**\n * Starts an animation after the given delay.\n *\n * See https://reactnative.dev/docs/animated.html#delay\n */\n delay,\n /**\n * Starts an array of animations in order, waiting for each to complete\n * before starting the next. If the current running animation is stopped, no\n * following animations will be started.\n *\n * See https://reactnative.dev/docs/animated.html#sequence\n */\n sequence,\n /**\n * Starts an array of animations all at the same time. By default, if one\n * of the animations is stopped, they will all be stopped. You can override\n * this with the `stopTogether` flag.\n *\n * See https://reactnative.dev/docs/animated.html#parallel\n */\n parallel,\n /**\n * Array of animations may run in parallel (overlap), but are started in\n * sequence with successive delays. Nice for doing trailing effects.\n *\n * See https://reactnative.dev/docs/animated.html#stagger\n */\n stagger,\n /**\n * Loops a given animation continuously, so that each time it reaches the\n * end, it resets and begins again from the start.\n *\n * See https://reactnative.dev/docs/animated.html#loop\n */\n loop,\n\n /**\n * Takes an array of mappings and extracts values from each arg accordingly,\n * then calls `setValue` on the mapped outputs.\n *\n * See https://reactnative.dev/docs/animated.html#event\n */\n event,\n\n /**\n * Make any React component Animatable. Used to create `Animated.View`, etc.\n *\n * See https://reactnative.dev/docs/animated.html#createanimatedcomponent\n */\n createAnimatedComponent,\n\n /**\n * Imperative API to attach an animated value to an event on a view. Prefer\n * using `Animated.event` with `useNativeDrive: true` if possible.\n *\n * See https://reactnative.dev/docs/animated.html#attachnativeevent\n */\n attachNativeEvent,\n\n /**\n * Advanced imperative API for snooping on animated events that are passed in\n * through props. Use values directly where possible.\n *\n * See https://reactnative.dev/docs/animated.html#forkevent\n */\n forkEvent,\n unforkEvent,\n\n /**\n * Expose Event class, so it can be used as a type for type checkers.\n */\n Event: AnimatedEvent,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedInterpolation = require('./AnimatedInterpolation');\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedValue = require('./AnimatedValue');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\n\nimport type {InterpolationConfigType} from './AnimatedInterpolation';\n\nclass AnimatedAddition extends AnimatedWithChildren {\n _a: AnimatedNode;\n _b: AnimatedNode;\n\n constructor(a: AnimatedNode | number, b: AnimatedNode | number) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n\n __makeNative() {\n this._a.__makeNative();\n this._b.__makeNative();\n super.__makeNative();\n }\n\n __getValue(): number {\n return this._a.__getValue() + this._b.__getValue();\n }\n\n interpolate(config: InterpolationConfigType): AnimatedInterpolation {\n return new AnimatedInterpolation(this, config);\n }\n\n __attach(): void {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n\n __detach(): void {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n\n __getNativeConfig(): any {\n return {\n type: 'addition',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()],\n };\n }\n}\n\nmodule.exports = AnimatedAddition;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedInterpolation = require('./AnimatedInterpolation');\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\n\nimport type {InterpolationConfigType} from './AnimatedInterpolation';\n\nclass AnimatedDiffClamp extends AnimatedWithChildren {\n _a: AnimatedNode;\n _min: number;\n _max: number;\n _value: number;\n _lastValue: number;\n\n constructor(a: AnimatedNode, min: number, max: number) {\n super();\n\n this._a = a;\n this._min = min;\n this._max = max;\n this._value = this._lastValue = this._a.__getValue();\n }\n\n __makeNative() {\n this._a.__makeNative();\n super.__makeNative();\n }\n\n interpolate(config: InterpolationConfigType): AnimatedInterpolation {\n return new AnimatedInterpolation(this, config);\n }\n\n __getValue(): number {\n const value = this._a.__getValue();\n const diff = value - this._lastValue;\n this._lastValue = value;\n this._value = Math.min(Math.max(this._value + diff, this._min), this._max);\n return this._value;\n }\n\n __attach(): void {\n this._a.__addChild(this);\n }\n\n __detach(): void {\n this._a.__removeChild(this);\n super.__detach();\n }\n\n __getNativeConfig(): any {\n return {\n type: 'diffclamp',\n input: this._a.__getNativeTag(),\n min: this._min,\n max: this._max,\n };\n }\n}\n\nmodule.exports = AnimatedDiffClamp;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedInterpolation = require('./AnimatedInterpolation');\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedValue = require('./AnimatedValue');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\n\nimport type {InterpolationConfigType} from './AnimatedInterpolation';\n\nclass AnimatedDivision extends AnimatedWithChildren {\n _a: AnimatedNode;\n _b: AnimatedNode;\n _warnedAboutDivideByZero: boolean = false;\n\n constructor(a: AnimatedNode | number, b: AnimatedNode | number) {\n super();\n if (b === 0 || (b instanceof AnimatedNode && b.__getValue() === 0)) {\n console.error('Detected potential division by zero in AnimatedDivision');\n }\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n\n __makeNative() {\n this._a.__makeNative();\n this._b.__makeNative();\n super.__makeNative();\n }\n\n __getValue(): number {\n const a = this._a.__getValue();\n const b = this._b.__getValue();\n if (b === 0) {\n // Prevent spamming the console/LogBox\n if (!this._warnedAboutDivideByZero) {\n console.error('Detected division by zero in AnimatedDivision');\n this._warnedAboutDivideByZero = true;\n }\n // Passing infinity/NaN to Fabric will cause a native crash\n return 0;\n }\n this._warnedAboutDivideByZero = false;\n return a / b;\n }\n\n interpolate(config: InterpolationConfigType): AnimatedInterpolation {\n return new AnimatedInterpolation(this, config);\n }\n\n __attach(): void {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n\n __detach(): void {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n\n __getNativeConfig(): any {\n return {\n type: 'division',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()],\n };\n }\n}\n\nmodule.exports = AnimatedDivision;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedInterpolation = require('./AnimatedInterpolation');\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\n\nimport type {InterpolationConfigType} from './AnimatedInterpolation';\n\nclass AnimatedModulo extends AnimatedWithChildren {\n _a: AnimatedNode;\n _modulus: number;\n\n constructor(a: AnimatedNode, modulus: number) {\n super();\n this._a = a;\n this._modulus = modulus;\n }\n\n __makeNative() {\n this._a.__makeNative();\n super.__makeNative();\n }\n\n __getValue(): number {\n return (\n ((this._a.__getValue() % this._modulus) + this._modulus) % this._modulus\n );\n }\n\n interpolate(config: InterpolationConfigType): AnimatedInterpolation {\n return new AnimatedInterpolation(this, config);\n }\n\n __attach(): void {\n this._a.__addChild(this);\n }\n\n __detach(): void {\n this._a.__removeChild(this);\n super.__detach();\n }\n\n __getNativeConfig(): any {\n return {\n type: 'modulus',\n input: this._a.__getNativeTag(),\n modulus: this._modulus,\n };\n }\n}\n\nmodule.exports = AnimatedModulo;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedInterpolation = require('./AnimatedInterpolation');\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedValue = require('./AnimatedValue');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\n\nimport type {InterpolationConfigType} from './AnimatedInterpolation';\n\nclass AnimatedMultiplication extends AnimatedWithChildren {\n _a: AnimatedNode;\n _b: AnimatedNode;\n\n constructor(a: AnimatedNode | number, b: AnimatedNode | number) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n\n __makeNative() {\n this._a.__makeNative();\n this._b.__makeNative();\n super.__makeNative();\n }\n\n __getValue(): number {\n return this._a.__getValue() * this._b.__getValue();\n }\n\n interpolate(config: InterpolationConfigType): AnimatedInterpolation {\n return new AnimatedInterpolation(this, config);\n }\n\n __attach(): void {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n\n __detach(): void {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n\n __getNativeConfig(): any {\n return {\n type: 'multiplication',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()],\n };\n }\n}\n\nmodule.exports = AnimatedMultiplication;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst {AnimatedEvent} = require('../AnimatedEvent');\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedStyle = require('./AnimatedStyle');\nconst NativeAnimatedHelper = require('../NativeAnimatedHelper');\nconst ReactNative = require('../../Renderer/shims/ReactNative');\n\nconst invariant = require('invariant');\n\nclass AnimatedProps extends AnimatedNode {\n _props: Object;\n _animatedView: any;\n _callback: () => void;\n\n constructor(props: Object, callback: () => void) {\n super();\n if (props.style) {\n props = {\n ...props,\n style: new AnimatedStyle(props.style),\n };\n }\n this._props = props;\n this._callback = callback;\n }\n\n __getValue(): Object {\n const props = {};\n for (const key in this._props) {\n const value = this._props[key];\n if (value instanceof AnimatedNode) {\n if (!value.__isNative || value instanceof AnimatedStyle) {\n // We cannot use value of natively driven nodes this way as the value we have access from\n // JS may not be up to date.\n props[key] = value.__getValue();\n }\n } else if (value instanceof AnimatedEvent) {\n props[key] = value.__getHandler();\n } else {\n props[key] = value;\n }\n }\n return props;\n }\n\n __getAnimatedValue(): Object {\n const props = {};\n for (const key in this._props) {\n const value = this._props[key];\n if (value instanceof AnimatedNode) {\n props[key] = value.__getAnimatedValue();\n }\n }\n return props;\n }\n\n __attach(): void {\n for (const key in this._props) {\n const value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n }\n\n __detach(): void {\n if (this.__isNative && this._animatedView) {\n this.__disconnectAnimatedView();\n }\n for (const key in this._props) {\n const value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n super.__detach();\n }\n\n update(): void {\n this._callback();\n }\n\n __makeNative(): void {\n if (!this.__isNative) {\n this.__isNative = true;\n for (const key in this._props) {\n const value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n if (this._animatedView) {\n this.__connectAnimatedView();\n }\n }\n }\n\n setNativeView(animatedView: any): void {\n if (this._animatedView === animatedView) {\n return;\n }\n this._animatedView = animatedView;\n if (this.__isNative) {\n this.__connectAnimatedView();\n }\n }\n\n __connectAnimatedView(): void {\n invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n const nativeViewTag: ?number = ReactNative.findNodeHandle(\n this._animatedView,\n );\n invariant(\n nativeViewTag != null,\n 'Unable to locate attached view in the native tree',\n );\n NativeAnimatedHelper.API.connectAnimatedNodeToView(\n this.__getNativeTag(),\n nativeViewTag,\n );\n }\n\n __disconnectAnimatedView(): void {\n invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n const nativeViewTag: ?number = ReactNative.findNodeHandle(\n this._animatedView,\n );\n invariant(\n nativeViewTag != null,\n 'Unable to locate attached view in the native tree',\n );\n NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(\n this.__getNativeTag(),\n nativeViewTag,\n );\n }\n\n __restoreDefaultValues(): void {\n // When using the native driver, view properties need to be restored to\n // their default values manually since react no longer tracks them. This\n // is needed to handle cases where a prop driven by native animated is removed\n // after having been changed natively by an animation.\n if (this.__isNative) {\n NativeAnimatedHelper.API.restoreDefaultValues(this.__getNativeTag());\n }\n }\n\n __getNativeConfig(): Object {\n const propsConfig = {};\n for (const propKey in this._props) {\n const value = this._props[propKey];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n propsConfig[propKey] = value.__getNativeTag();\n }\n }\n return {\n type: 'props',\n props: propsConfig,\n };\n }\n}\n\nmodule.exports = AnimatedProps;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedTransform = require('./AnimatedTransform');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\nconst NativeAnimatedHelper = require('../NativeAnimatedHelper');\n\nconst flattenStyle = require('../../StyleSheet/flattenStyle');\n\nclass AnimatedStyle extends AnimatedWithChildren {\n _style: Object;\n\n constructor(style: any) {\n super();\n style = flattenStyle(style) || {};\n if (style.transform) {\n style = {\n ...style,\n transform: new AnimatedTransform(style.transform),\n };\n }\n this._style = style;\n }\n\n // Recursively get values for nested styles (like iOS's shadowOffset)\n _walkStyleAndGetValues(style) {\n const updatedStyle = {};\n for (const key in style) {\n const value = style[key];\n if (value instanceof AnimatedNode) {\n if (!value.__isNative) {\n // We cannot use value of natively driven nodes this way as the value we have access from\n // JS may not be up to date.\n updatedStyle[key] = value.__getValue();\n }\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n // Support animating nested values (for example: shadowOffset.height)\n updatedStyle[key] = this._walkStyleAndGetValues(value);\n } else {\n updatedStyle[key] = value;\n }\n }\n return updatedStyle;\n }\n\n __getValue(): Object {\n return this._walkStyleAndGetValues(this._style);\n }\n\n // Recursively get animated values for nested styles (like iOS's shadowOffset)\n _walkStyleAndGetAnimatedValues(style) {\n const updatedStyle = {};\n for (const key in style) {\n const value = style[key];\n if (value instanceof AnimatedNode) {\n updatedStyle[key] = value.__getAnimatedValue();\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n // Support animating nested values (for example: shadowOffset.height)\n updatedStyle[key] = this._walkStyleAndGetAnimatedValues(value);\n }\n }\n return updatedStyle;\n }\n\n __getAnimatedValue(): Object {\n return this._walkStyleAndGetAnimatedValues(this._style);\n }\n\n __attach(): void {\n for (const key in this._style) {\n const value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n }\n\n __detach(): void {\n for (const key in this._style) {\n const value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n super.__detach();\n }\n\n __makeNative() {\n for (const key in this._style) {\n const value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n super.__makeNative();\n }\n\n __getNativeConfig(): Object {\n const styleConfig = {};\n for (const styleKey in this._style) {\n if (this._style[styleKey] instanceof AnimatedNode) {\n const style = this._style[styleKey];\n style.__makeNative();\n styleConfig[styleKey] = style.__getNativeTag();\n }\n // Non-animated styles are set using `setNativeProps`, no need\n // to pass those as a part of the node config\n }\n NativeAnimatedHelper.validateStyles(styleConfig);\n return {\n type: 'style',\n style: styleConfig,\n };\n }\n}\n\nmodule.exports = AnimatedStyle;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\nconst NativeAnimatedHelper = require('../NativeAnimatedHelper');\n\nclass AnimatedTransform extends AnimatedWithChildren {\n _transforms: $ReadOnlyArray;\n\n constructor(transforms: $ReadOnlyArray) {\n super();\n this._transforms = transforms;\n }\n\n __makeNative() {\n this._transforms.forEach(transform => {\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n });\n super.__makeNative();\n }\n\n __getValue(): $ReadOnlyArray {\n return this._transforms.map(transform => {\n const result = {};\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n result[key] = value.__getValue();\n } else {\n result[key] = value;\n }\n }\n return result;\n });\n }\n\n __getAnimatedValue(): $ReadOnlyArray {\n return this._transforms.map(transform => {\n const result = {};\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n result[key] = value.__getAnimatedValue();\n } else {\n // All transform components needed to recompose matrix\n result[key] = value;\n }\n }\n return result;\n });\n }\n\n __attach(): void {\n this._transforms.forEach(transform => {\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n });\n }\n\n __detach(): void {\n this._transforms.forEach(transform => {\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n });\n super.__detach();\n }\n\n __getNativeConfig(): any {\n const transConfigs = [];\n\n this._transforms.forEach(transform => {\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n transConfigs.push({\n type: 'animated',\n property: key,\n nodeTag: value.__getNativeTag(),\n });\n } else {\n transConfigs.push({\n type: 'static',\n property: key,\n value: NativeAnimatedHelper.transformDataType(value),\n });\n }\n }\n });\n\n NativeAnimatedHelper.validateTransform(transConfigs);\n return {\n type: 'transform',\n transforms: transConfigs,\n };\n }\n}\n\nmodule.exports = AnimatedTransform;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedInterpolation = require('./AnimatedInterpolation');\nconst AnimatedNode = require('./AnimatedNode');\nconst AnimatedValue = require('./AnimatedValue');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\n\nimport type {InterpolationConfigType} from './AnimatedInterpolation';\n\nclass AnimatedSubtraction extends AnimatedWithChildren {\n _a: AnimatedNode;\n _b: AnimatedNode;\n\n constructor(a: AnimatedNode | number, b: AnimatedNode | number) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n\n __makeNative() {\n this._a.__makeNative();\n this._b.__makeNative();\n super.__makeNative();\n }\n\n __getValue(): number {\n return this._a.__getValue() - this._b.__getValue();\n }\n\n interpolate(config: InterpolationConfigType): AnimatedInterpolation {\n return new AnimatedInterpolation(this, config);\n }\n\n __attach(): void {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n\n __detach(): void {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n\n __getNativeConfig(): any {\n return {\n type: 'subtraction',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()],\n };\n }\n}\n\nmodule.exports = AnimatedSubtraction;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedValue = require('./AnimatedValue');\nconst AnimatedNode = require('./AnimatedNode');\nconst {\n generateNewAnimationId,\n shouldUseNativeDriver,\n} = require('../NativeAnimatedHelper');\n\nimport type {EndCallback} from '../animations/Animation';\n\nclass AnimatedTracking extends AnimatedNode {\n _value: AnimatedValue;\n _parent: AnimatedNode;\n _callback: ?EndCallback;\n _animationConfig: Object;\n _animationClass: any;\n _useNativeDriver: boolean;\n\n constructor(\n value: AnimatedValue,\n parent: AnimatedNode,\n animationClass: any,\n animationConfig: Object,\n callback?: ?EndCallback,\n ) {\n super();\n this._value = value;\n this._parent = parent;\n this._animationClass = animationClass;\n this._animationConfig = animationConfig;\n this._useNativeDriver = shouldUseNativeDriver(animationConfig);\n this._callback = callback;\n this.__attach();\n }\n\n __makeNative() {\n this.__isNative = true;\n this._parent.__makeNative();\n super.__makeNative();\n this._value.__makeNative();\n }\n\n __getValue(): Object {\n return this._parent.__getValue();\n }\n\n __attach(): void {\n this._parent.__addChild(this);\n if (this._useNativeDriver) {\n // when the tracking starts we need to convert this node to a \"native node\"\n // so that the parent node will be made \"native\" too. This is necessary as\n // if we don't do this `update` method will get called. At that point it\n // may be too late as it would mean the JS driver has already started\n // updating node values\n this.__makeNative();\n }\n }\n\n __detach(): void {\n this._parent.__removeChild(this);\n super.__detach();\n }\n\n update(): void {\n this._value.animate(\n new this._animationClass({\n ...this._animationConfig,\n toValue: (this._animationConfig.toValue: any).__getValue(),\n }),\n this._callback,\n );\n }\n\n __getNativeConfig(): any {\n const animation = new this._animationClass({\n ...this._animationConfig,\n // remove toValue from the config as it's a ref to Animated.Value\n toValue: undefined,\n });\n const animationConfig = animation.__getNativeAnimationConfig();\n return {\n type: 'tracking',\n animationId: generateNewAnimationId(),\n animationConfig,\n toValue: this._parent.__getNativeTag(),\n value: this._value.__getNativeTag(),\n };\n }\n}\n\nmodule.exports = AnimatedTracking;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedValue = require('./AnimatedValue');\nconst AnimatedWithChildren = require('./AnimatedWithChildren');\n\nconst invariant = require('invariant');\n\ntype ValueXYListenerCallback = (value: {\n x: number,\n y: number,\n ...\n}) => mixed;\n\nlet _uniqueId = 1;\n\n/**\n * 2D Value for driving 2D animations, such as pan gestures. Almost identical\n * API to normal `Animated.Value`, but multiplexed.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html\n */\nclass AnimatedValueXY extends AnimatedWithChildren {\n x: AnimatedValue;\n y: AnimatedValue;\n _listeners: {\n [key: string]: {\n x: string,\n y: string,\n ...\n },\n ...,\n };\n\n constructor(\n valueIn?: ?{\n +x: number | AnimatedValue,\n +y: number | AnimatedValue,\n ...\n },\n ) {\n super();\n const value: any = valueIn || {x: 0, y: 0}; // @flowfixme: shouldn't need `: any`\n if (typeof value.x === 'number' && typeof value.y === 'number') {\n this.x = new AnimatedValue(value.x);\n this.y = new AnimatedValue(value.y);\n } else {\n invariant(\n value.x instanceof AnimatedValue && value.y instanceof AnimatedValue,\n 'AnimatedValueXY must be initialized with an object of numbers or ' +\n 'AnimatedValues.',\n );\n this.x = value.x;\n this.y = value.y;\n }\n this._listeners = {};\n }\n\n /**\n * Directly set the value. This will stop any animations running on the value\n * and update all the bound properties.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#setvalue\n */\n setValue(value: {x: number, y: number, ...}) {\n this.x.setValue(value.x);\n this.y.setValue(value.y);\n }\n\n /**\n * Sets an offset that is applied on top of whatever value is set, whether\n * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n * things like the start of a pan gesture.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#setoffset\n */\n setOffset(offset: {x: number, y: number, ...}) {\n this.x.setOffset(offset.x);\n this.y.setOffset(offset.y);\n }\n\n /**\n * Merges the offset value into the base value and resets the offset to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#flattenoffset\n */\n flattenOffset(): void {\n this.x.flattenOffset();\n this.y.flattenOffset();\n }\n\n /**\n * Sets the offset value to the base value, and resets the base value to\n * zero. The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#extractoffset\n */\n extractOffset(): void {\n this.x.extractOffset();\n this.y.extractOffset();\n }\n\n __getValue(): {\n x: number,\n y: number,\n ...\n } {\n return {\n x: this.x.__getValue(),\n y: this.y.__getValue(),\n };\n }\n\n /**\n * Stops any animation and resets the value to its original.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#resetanimation\n */\n resetAnimation(\n callback?: (value: {\n x: number,\n y: number,\n ...\n }) => void,\n ): void {\n this.x.resetAnimation();\n this.y.resetAnimation();\n callback && callback(this.__getValue());\n }\n\n /**\n * Stops any running animation or tracking. `callback` is invoked with the\n * final value after stopping the animation, which is useful for updating\n * state to match the animation position with layout.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#stopanimation\n */\n stopAnimation(\n callback?: (value: {\n x: number,\n y: number,\n ...\n }) => void,\n ): void {\n this.x.stopAnimation();\n this.y.stopAnimation();\n callback && callback(this.__getValue());\n }\n\n /**\n * Adds an asynchronous listener to the value so you can observe updates from\n * animations. This is useful because there is no way to synchronously read\n * the value because it might be driven natively.\n *\n * Returns a string that serves as an identifier for the listener.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#addlistener\n */\n addListener(callback: ValueXYListenerCallback): string {\n const id = String(_uniqueId++);\n const jointCallback = ({value: number}) => {\n callback(this.__getValue());\n };\n this._listeners[id] = {\n x: this.x.addListener(jointCallback),\n y: this.y.addListener(jointCallback),\n };\n return id;\n }\n\n /**\n * Unregister a listener. The `id` param shall match the identifier\n * previously returned by `addListener()`.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#removelistener\n */\n removeListener(id: string): void {\n this.x.removeListener(this._listeners[id].x);\n this.y.removeListener(this._listeners[id].y);\n delete this._listeners[id];\n }\n\n /**\n * Remove all registered listeners.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#removealllisteners\n */\n removeAllListeners(): void {\n this.x.removeAllListeners();\n this.y.removeAllListeners();\n this._listeners = {};\n }\n\n /**\n * Converts `{x, y}` into `{left, top}` for use in style.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#getlayout\n */\n getLayout(): {[key: string]: AnimatedValue, ...} {\n return {\n left: this.x,\n top: this.y,\n };\n }\n\n /**\n * Converts `{x, y}` into a useable translation transform.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#gettranslatetransform\n */\n getTranslateTransform(): Array<{[key: string]: AnimatedValue, ...}> {\n return [{translateX: this.x}, {translateY: this.y}];\n }\n}\n\nmodule.exports = AnimatedValueXY;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst Animation = require('./Animation');\n\nconst {shouldUseNativeDriver} = require('../NativeAnimatedHelper');\n\nimport type AnimatedValue from '../nodes/AnimatedValue';\nimport type {AnimationConfig, EndCallback} from './Animation';\n\nexport type DecayAnimationConfig = {\n ...AnimationConfig,\n velocity:\n | number\n | {\n x: number,\n y: number,\n ...\n },\n deceleration?: number,\n};\n\nexport type DecayAnimationConfigSingle = {\n ...AnimationConfig,\n velocity: number,\n deceleration?: number,\n};\n\nclass DecayAnimation extends Animation {\n _startTime: number;\n _lastValue: number;\n _fromValue: number;\n _deceleration: number;\n _velocity: number;\n _onUpdate: (value: number) => void;\n _animationFrame: any;\n _useNativeDriver: boolean;\n\n constructor(config: DecayAnimationConfigSingle) {\n super();\n this._deceleration = config.deceleration ?? 0.998;\n this._velocity = config.velocity;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this.__isInteraction = config.isInteraction ?? !this._useNativeDriver;\n this.__iterations = config.iterations ?? 1;\n }\n\n __getNativeAnimationConfig(): {|\n deceleration: number,\n iterations: number,\n type: $TEMPORARY$string<'decay'>,\n velocity: number,\n |} {\n return {\n type: 'decay',\n deceleration: this._deceleration,\n velocity: this._velocity,\n iterations: this.__iterations,\n };\n }\n\n start(\n fromValue: number,\n onUpdate: (value: number) => void,\n onEnd: ?EndCallback,\n previousAnimation: ?Animation,\n animatedValue: AnimatedValue,\n ): void {\n this.__active = true;\n this._lastValue = fromValue;\n this._fromValue = fromValue;\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n this._startTime = Date.now();\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n\n onUpdate(): void {\n const now = Date.now();\n\n const value =\n this._fromValue +\n (this._velocity / (1 - this._deceleration)) *\n (1 - Math.exp(-(1 - this._deceleration) * (now - this._startTime)));\n\n this._onUpdate(value);\n\n if (Math.abs(this._lastValue - value) < 0.1) {\n this.__debouncedOnEnd({finished: true});\n return;\n }\n\n this._lastValue = value;\n if (this.__active) {\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n\n stop(): void {\n super.stop();\n this.__active = false;\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({finished: false});\n }\n}\n\nmodule.exports = DecayAnimation;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst NativeAnimatedHelper = require('../NativeAnimatedHelper');\n\nimport type AnimatedValue from '../nodes/AnimatedValue';\n\nexport type EndResult = {finished: boolean, ...};\nexport type EndCallback = (result: EndResult) => void;\n\nexport type AnimationConfig = {\n isInteraction?: boolean,\n useNativeDriver: boolean,\n onComplete?: ?EndCallback,\n iterations?: number,\n};\n\nlet startNativeAnimationNextId = 1;\n\n// Important note: start() and stop() will only be called at most once.\n// Once an animation has been stopped or finished its course, it will\n// not be reused.\nclass Animation {\n __active: boolean;\n __isInteraction: boolean;\n __nativeId: number;\n __onEnd: ?EndCallback;\n __iterations: number;\n start(\n fromValue: number,\n onUpdate: (value: number) => void,\n onEnd: ?EndCallback,\n previousAnimation: ?Animation,\n animatedValue: AnimatedValue,\n ): void {}\n stop(): void {\n if (this.__nativeId) {\n NativeAnimatedHelper.API.stopAnimation(this.__nativeId);\n }\n }\n __getNativeAnimationConfig(): any {\n // Subclasses that have corresponding animation implementation done in native\n // should override this method\n throw new Error('This animation type cannot be offloaded to native');\n }\n // Helper function for subclasses to make sure onEnd is only called once.\n __debouncedOnEnd(result: EndResult): void {\n const onEnd = this.__onEnd;\n this.__onEnd = null;\n onEnd && onEnd(result);\n }\n __startNativeAnimation(animatedValue: AnimatedValue): void {\n const startNativeAnimationWaitId = `${startNativeAnimationNextId}:startAnimation`;\n startNativeAnimationNextId += 1;\n NativeAnimatedHelper.API.setWaitingForIdentifier(\n startNativeAnimationWaitId,\n );\n try {\n animatedValue.__makeNative();\n this.__nativeId = NativeAnimatedHelper.generateNewAnimationId();\n NativeAnimatedHelper.API.startAnimatingNode(\n this.__nativeId,\n animatedValue.__getNativeTag(),\n this.__getNativeAnimationConfig(),\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.__debouncedOnEnd.bind(this),\n );\n } catch (e) {\n throw e;\n } finally {\n NativeAnimatedHelper.API.unsetWaitingForIdentifier(\n startNativeAnimationWaitId,\n );\n }\n }\n}\n\nmodule.exports = Animation;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedValue = require('../nodes/AnimatedValue');\nconst AnimatedValueXY = require('../nodes/AnimatedValueXY');\nconst AnimatedInterpolation = require('../nodes/AnimatedInterpolation');\nconst Animation = require('./Animation');\nconst SpringConfig = require('../SpringConfig');\n\nconst invariant = require('invariant');\n\nconst {shouldUseNativeDriver} = require('../NativeAnimatedHelper');\n\nimport type {AnimationConfig, EndCallback} from './Animation';\n\nexport type SpringAnimationConfig = {\n ...AnimationConfig,\n toValue:\n | number\n | AnimatedValue\n | {\n x: number,\n y: number,\n ...\n }\n | AnimatedValueXY\n | AnimatedInterpolation,\n overshootClamping?: boolean,\n restDisplacementThreshold?: number,\n restSpeedThreshold?: number,\n velocity?:\n | number\n | {\n x: number,\n y: number,\n ...\n },\n bounciness?: number,\n speed?: number,\n tension?: number,\n friction?: number,\n stiffness?: number,\n damping?: number,\n mass?: number,\n delay?: number,\n};\n\nexport type SpringAnimationConfigSingle = {\n ...AnimationConfig,\n toValue: number | AnimatedValue | AnimatedInterpolation,\n overshootClamping?: boolean,\n restDisplacementThreshold?: number,\n restSpeedThreshold?: number,\n velocity?: number,\n bounciness?: number,\n speed?: number,\n tension?: number,\n friction?: number,\n stiffness?: number,\n damping?: number,\n mass?: number,\n delay?: number,\n};\n\nclass SpringAnimation extends Animation {\n _overshootClamping: boolean;\n _restDisplacementThreshold: number;\n _restSpeedThreshold: number;\n _lastVelocity: number;\n _startPosition: number;\n _lastPosition: number;\n _fromValue: number;\n _toValue: any;\n _stiffness: number;\n _damping: number;\n _mass: number;\n _initialVelocity: number;\n _delay: number;\n _timeout: any;\n _startTime: number;\n _lastTime: number;\n _frameTime: number;\n _onUpdate: (value: number) => void;\n _animationFrame: any;\n _useNativeDriver: boolean;\n\n constructor(config: SpringAnimationConfigSingle) {\n super();\n\n this._overshootClamping = config.overshootClamping ?? false;\n this._restDisplacementThreshold = config.restDisplacementThreshold ?? 0.001;\n this._restSpeedThreshold = config.restSpeedThreshold ?? 0.001;\n this._initialVelocity = config.velocity ?? 0;\n this._lastVelocity = config.velocity ?? 0;\n this._toValue = config.toValue;\n this._delay = config.delay ?? 0;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this.__isInteraction = config.isInteraction ?? !this._useNativeDriver;\n this.__iterations = config.iterations ?? 1;\n\n if (\n config.stiffness !== undefined ||\n config.damping !== undefined ||\n config.mass !== undefined\n ) {\n invariant(\n config.bounciness === undefined &&\n config.speed === undefined &&\n config.tension === undefined &&\n config.friction === undefined,\n 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one',\n );\n this._stiffness = config.stiffness ?? 100;\n this._damping = config.damping ?? 10;\n this._mass = config.mass ?? 1;\n } else if (config.bounciness !== undefined || config.speed !== undefined) {\n // Convert the origami bounciness/speed values to stiffness/damping\n // We assume mass is 1.\n invariant(\n config.tension === undefined &&\n config.friction === undefined &&\n config.stiffness === undefined &&\n config.damping === undefined &&\n config.mass === undefined,\n 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one',\n );\n const springConfig = SpringConfig.fromBouncinessAndSpeed(\n config.bounciness ?? 8,\n config.speed ?? 12,\n );\n this._stiffness = springConfig.stiffness;\n this._damping = springConfig.damping;\n this._mass = 1;\n } else {\n // Convert the origami tension/friction values to stiffness/damping\n // We assume mass is 1.\n const springConfig = SpringConfig.fromOrigamiTensionAndFriction(\n config.tension ?? 40,\n config.friction ?? 7,\n );\n this._stiffness = springConfig.stiffness;\n this._damping = springConfig.damping;\n this._mass = 1;\n }\n\n invariant(this._stiffness > 0, 'Stiffness value must be greater than 0');\n invariant(this._damping > 0, 'Damping value must be greater than 0');\n invariant(this._mass > 0, 'Mass value must be greater than 0');\n }\n\n __getNativeAnimationConfig(): {|\n damping: number,\n initialVelocity: number,\n iterations: number,\n mass: number,\n overshootClamping: boolean,\n restDisplacementThreshold: number,\n restSpeedThreshold: number,\n stiffness: number,\n toValue: any,\n type: $TEMPORARY$string<'spring'>,\n |} {\n return {\n type: 'spring',\n overshootClamping: this._overshootClamping,\n restDisplacementThreshold: this._restDisplacementThreshold,\n restSpeedThreshold: this._restSpeedThreshold,\n stiffness: this._stiffness,\n damping: this._damping,\n mass: this._mass,\n initialVelocity: this._initialVelocity ?? this._lastVelocity,\n toValue: this._toValue,\n iterations: this.__iterations,\n };\n }\n\n start(\n fromValue: number,\n onUpdate: (value: number) => void,\n onEnd: ?EndCallback,\n previousAnimation: ?Animation,\n animatedValue: AnimatedValue,\n ): void {\n this.__active = true;\n this._startPosition = fromValue;\n this._lastPosition = this._startPosition;\n\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n this._lastTime = Date.now();\n this._frameTime = 0.0;\n\n if (previousAnimation instanceof SpringAnimation) {\n const internalState = previousAnimation.getInternalState();\n this._lastPosition = internalState.lastPosition;\n this._lastVelocity = internalState.lastVelocity;\n // Set the initial velocity to the last velocity\n this._initialVelocity = this._lastVelocity;\n this._lastTime = internalState.lastTime;\n }\n\n const start = () => {\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n this.onUpdate();\n }\n };\n\n // If this._delay is more than 0, we start after the timeout.\n if (this._delay) {\n this._timeout = setTimeout(start, this._delay);\n } else {\n start();\n }\n }\n\n getInternalState(): Object {\n return {\n lastPosition: this._lastPosition,\n lastVelocity: this._lastVelocity,\n lastTime: this._lastTime,\n };\n }\n\n /**\n * This spring model is based off of a damped harmonic oscillator\n * (https://en.wikipedia.org/wiki/Harmonic_oscillator#Damped_harmonic_oscillator).\n *\n * We use the closed form of the second order differential equation:\n *\n * x'' + (2ζ⍵_0)x' + ⍵^2x = 0\n *\n * where\n * ⍵_0 = √(k / m) (undamped angular frequency of the oscillator),\n * ζ = c / 2√mk (damping ratio),\n * c = damping constant\n * k = stiffness\n * m = mass\n *\n * The derivation of the closed form is described in detail here:\n * http://planetmath.org/sites/default/files/texpdf/39745.pdf\n *\n * This algorithm happens to match the algorithm used by CASpringAnimation,\n * a QuartzCore (iOS) API that creates spring animations.\n */\n onUpdate(): void {\n // If for some reason we lost a lot of frames (e.g. process large payload or\n // stopped in the debugger), we only advance by 4 frames worth of\n // computation and will continue on the next frame. It's better to have it\n // running at faster speed than jumping to the end.\n const MAX_STEPS = 64;\n let now = Date.now();\n if (now > this._lastTime + MAX_STEPS) {\n now = this._lastTime + MAX_STEPS;\n }\n\n const deltaTime = (now - this._lastTime) / 1000;\n this._frameTime += deltaTime;\n\n const c: number = this._damping;\n const m: number = this._mass;\n const k: number = this._stiffness;\n const v0: number = -this._initialVelocity;\n\n const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n const omega1 = omega0 * Math.sqrt(1.0 - zeta * zeta); // exponential decay\n const x0 = this._toValue - this._startPosition; // calculate the oscillation from x0 = 1 to x = 0\n\n let position = 0.0;\n let velocity = 0.0;\n const t = this._frameTime;\n if (zeta < 1) {\n // Under damped\n const envelope = Math.exp(-zeta * omega0 * t);\n position =\n this._toValue -\n envelope *\n (((v0 + zeta * omega0 * x0) / omega1) * Math.sin(omega1 * t) +\n x0 * Math.cos(omega1 * t));\n // This looks crazy -- it's actually just the derivative of the\n // oscillation function\n velocity =\n zeta *\n omega0 *\n envelope *\n ((Math.sin(omega1 * t) * (v0 + zeta * omega0 * x0)) / omega1 +\n x0 * Math.cos(omega1 * t)) -\n envelope *\n (Math.cos(omega1 * t) * (v0 + zeta * omega0 * x0) -\n omega1 * x0 * Math.sin(omega1 * t));\n } else {\n // Critically damped\n const envelope = Math.exp(-omega0 * t);\n position = this._toValue - envelope * (x0 + (v0 + omega0 * x0) * t);\n velocity =\n envelope * (v0 * (t * omega0 - 1) + t * x0 * (omega0 * omega0));\n }\n\n this._lastTime = now;\n this._lastPosition = position;\n this._lastVelocity = velocity;\n\n this._onUpdate(position);\n if (!this.__active) {\n // a listener might have stopped us in _onUpdate\n return;\n }\n\n // Conditions for stopping the spring animation\n let isOvershooting = false;\n if (this._overshootClamping && this._stiffness !== 0) {\n if (this._startPosition < this._toValue) {\n isOvershooting = position > this._toValue;\n } else {\n isOvershooting = position < this._toValue;\n }\n }\n const isVelocity = Math.abs(velocity) <= this._restSpeedThreshold;\n let isDisplacement = true;\n if (this._stiffness !== 0) {\n isDisplacement =\n Math.abs(this._toValue - position) <= this._restDisplacementThreshold;\n }\n\n if (isOvershooting || (isVelocity && isDisplacement)) {\n if (this._stiffness !== 0) {\n // Ensure that we end up with a round value\n this._lastPosition = this._toValue;\n this._lastVelocity = 0;\n this._onUpdate(this._toValue);\n }\n\n this.__debouncedOnEnd({finished: true});\n return;\n }\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n\n stop(): void {\n super.stop();\n this.__active = false;\n clearTimeout(this._timeout);\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({finished: false});\n }\n}\n\nmodule.exports = SpringAnimation;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\ntype SpringConfigType = {\n stiffness: number,\n damping: number,\n ...\n};\n\nfunction stiffnessFromOrigamiValue(oValue) {\n return (oValue - 30) * 3.62 + 194;\n}\n\nfunction dampingFromOrigamiValue(oValue) {\n return (oValue - 8) * 3 + 25;\n}\n\nfunction fromOrigamiTensionAndFriction(\n tension: number,\n friction: number,\n): SpringConfigType {\n return {\n stiffness: stiffnessFromOrigamiValue(tension),\n damping: dampingFromOrigamiValue(friction),\n };\n}\n\nfunction fromBouncinessAndSpeed(\n bounciness: number,\n speed: number,\n): SpringConfigType {\n function normalize(value, startValue, endValue) {\n return (value - startValue) / (endValue - startValue);\n }\n\n function projectNormal(n, start, end) {\n return start + n * (end - start);\n }\n\n function linearInterpolation(t, start, end) {\n return t * end + (1 - t) * start;\n }\n\n function quadraticOutInterpolation(t, start, end) {\n return linearInterpolation(2 * t - t * t, start, end);\n }\n\n function b3Friction1(x) {\n return 0.0007 * Math.pow(x, 3) - 0.031 * Math.pow(x, 2) + 0.64 * x + 1.28;\n }\n\n function b3Friction2(x) {\n return 0.000044 * Math.pow(x, 3) - 0.006 * Math.pow(x, 2) + 0.36 * x + 2;\n }\n\n function b3Friction3(x) {\n return (\n 0.00000045 * Math.pow(x, 3) -\n 0.000332 * Math.pow(x, 2) +\n 0.1078 * x +\n 5.84\n );\n }\n\n function b3Nobounce(tension) {\n if (tension <= 18) {\n return b3Friction1(tension);\n } else if (tension > 18 && tension <= 44) {\n return b3Friction2(tension);\n } else {\n return b3Friction3(tension);\n }\n }\n\n let b = normalize(bounciness / 1.7, 0, 20);\n b = projectNormal(b, 0, 0.8);\n const s = normalize(speed / 1.7, 0, 20);\n const bouncyTension = projectNormal(s, 0.5, 200);\n const bouncyFriction = quadraticOutInterpolation(\n b,\n b3Nobounce(bouncyTension),\n 0.01,\n );\n\n return {\n stiffness: stiffnessFromOrigamiValue(bouncyTension),\n damping: dampingFromOrigamiValue(bouncyFriction),\n };\n}\n\nmodule.exports = {\n fromOrigamiTensionAndFriction,\n fromBouncinessAndSpeed,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst AnimatedValue = require('../nodes/AnimatedValue');\nconst AnimatedValueXY = require('../nodes/AnimatedValueXY');\nconst AnimatedInterpolation = require('../nodes/AnimatedInterpolation');\nconst Animation = require('./Animation');\n\nconst {shouldUseNativeDriver} = require('../NativeAnimatedHelper');\n\nimport type {AnimationConfig, EndCallback} from './Animation';\n\nexport type TimingAnimationConfig = {\n ...AnimationConfig,\n toValue:\n | number\n | AnimatedValue\n | {\n x: number,\n y: number,\n ...\n }\n | AnimatedValueXY\n | AnimatedInterpolation,\n easing?: (value: number) => number,\n duration?: number,\n delay?: number,\n};\n\nexport type TimingAnimationConfigSingle = {\n ...AnimationConfig,\n toValue: number | AnimatedValue | AnimatedInterpolation,\n easing?: (value: number) => number,\n duration?: number,\n delay?: number,\n};\n\nlet _easeInOut;\nfunction easeInOut() {\n if (!_easeInOut) {\n const Easing = require('../Easing');\n // $FlowFixMe[method-unbinding]\n _easeInOut = Easing.inOut(Easing.ease);\n }\n return _easeInOut;\n}\n\nclass TimingAnimation extends Animation {\n _startTime: number;\n _fromValue: number;\n _toValue: any;\n _duration: number;\n _delay: number;\n _easing: (value: number) => number;\n _onUpdate: (value: number) => void;\n _animationFrame: any;\n _timeout: any;\n _useNativeDriver: boolean;\n\n constructor(config: TimingAnimationConfigSingle) {\n super();\n this._toValue = config.toValue;\n this._easing = config.easing ?? easeInOut();\n this._duration = config.duration ?? 500;\n this._delay = config.delay ?? 0;\n this.__iterations = config.iterations ?? 1;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this.__isInteraction = config.isInteraction ?? !this._useNativeDriver;\n }\n\n __getNativeAnimationConfig(): any {\n const frameDuration = 1000.0 / 60.0;\n const frames = [];\n const numFrames = Math.round(this._duration / frameDuration);\n for (let frame = 0; frame < numFrames; frame++) {\n frames.push(this._easing(frame / numFrames));\n }\n frames.push(this._easing(1));\n return {\n type: 'frames',\n frames,\n toValue: this._toValue,\n iterations: this.__iterations,\n };\n }\n\n start(\n fromValue: number,\n onUpdate: (value: number) => void,\n onEnd: ?EndCallback,\n previousAnimation: ?Animation,\n animatedValue: AnimatedValue,\n ): void {\n this.__active = true;\n this._fromValue = fromValue;\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n\n const start = () => {\n // Animations that sometimes have 0 duration and sometimes do not\n // still need to use the native driver when duration is 0 so as to\n // not cause intermixed JS and native animations.\n if (this._duration === 0 && !this._useNativeDriver) {\n this._onUpdate(this._toValue);\n this.__debouncedOnEnd({finished: true});\n } else {\n this._startTime = Date.now();\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n this._animationFrame = requestAnimationFrame(\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.onUpdate.bind(this),\n );\n }\n }\n };\n if (this._delay) {\n this._timeout = setTimeout(start, this._delay);\n } else {\n start();\n }\n }\n\n onUpdate(): void {\n const now = Date.now();\n if (now >= this._startTime + this._duration) {\n if (this._duration === 0) {\n this._onUpdate(this._toValue);\n } else {\n this._onUpdate(\n this._fromValue + this._easing(1) * (this._toValue - this._fromValue),\n );\n }\n this.__debouncedOnEnd({finished: true});\n return;\n }\n\n this._onUpdate(\n this._fromValue +\n this._easing((now - this._startTime) / this._duration) *\n (this._toValue - this._fromValue),\n );\n if (this.__active) {\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n\n stop(): void {\n super.stop();\n this.__active = false;\n clearTimeout(this._timeout);\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({finished: false});\n }\n}\n\nmodule.exports = TimingAnimation;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nlet ease;\n\n/**\n * The `Easing` module implements common easing functions. This module is used\n * by [Animate.timing()](docs/animate.html#timing) to convey physically\n * believable motion in animations.\n *\n * You can find a visualization of some common easing functions at\n * http://easings.net/\n *\n * ### Predefined animations\n *\n * The `Easing` module provides several predefined animations through the\n * following methods:\n *\n * - [`back`](docs/easing.html#back) provides a simple animation where the\n * object goes slightly back before moving forward\n * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation\n * - [`ease`](docs/easing.html#ease) provides a simple inertial animation\n * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction\n *\n * ### Standard functions\n *\n * Three standard easing functions are provided:\n *\n * - [`linear`](docs/easing.html#linear)\n * - [`quad`](docs/easing.html#quad)\n * - [`cubic`](docs/easing.html#cubic)\n *\n * The [`poly`](docs/easing.html#poly) function can be used to implement\n * quartic, quintic, and other higher power functions.\n *\n * ### Additional functions\n *\n * Additional mathematical functions are provided by the following methods:\n *\n * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve\n * - [`circle`](docs/easing.html#circle) provides a circular function\n * - [`sin`](docs/easing.html#sin) provides a sinusoidal function\n * - [`exp`](docs/easing.html#exp) provides an exponential function\n *\n * The following helpers are used to modify other easing functions.\n *\n * - [`in`](docs/easing.html#in) runs an easing function forwards\n * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical\n * - [`out`](docs/easing.html#out) runs an easing function backwards\n */\nclass Easing {\n /**\n * A stepping function, returns 1 for any positive value of `n`.\n */\n static step0(n: number): number {\n return n > 0 ? 1 : 0;\n }\n\n /**\n * A stepping function, returns 1 if `n` is greater than or equal to 1.\n */\n static step1(n: number): number {\n return n >= 1 ? 1 : 0;\n }\n\n /**\n * A linear function, `f(t) = t`. Position correlates to elapsed time one to\n * one.\n *\n * http://cubic-bezier.com/#0,0,1,1\n */\n static linear(t: number): number {\n return t;\n }\n\n /**\n * A simple inertial interaction, similar to an object slowly accelerating to\n * speed.\n *\n * http://cubic-bezier.com/#.42,0,1,1\n */\n static ease(t: number): number {\n if (!ease) {\n ease = Easing.bezier(0.42, 0, 1, 1);\n }\n return ease(t);\n }\n\n /**\n * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed\n * time.\n *\n * http://easings.net/#easeInQuad\n */\n static quad(t: number): number {\n return t * t;\n }\n\n /**\n * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed\n * time.\n *\n * http://easings.net/#easeInCubic\n */\n static cubic(t: number): number {\n return t * t * t;\n }\n\n /**\n * A power function. Position is equal to the Nth power of elapsed time.\n *\n * n = 4: http://easings.net/#easeInQuart\n * n = 5: http://easings.net/#easeInQuint\n */\n static poly(n: number): (t: number) => number {\n return (t: number) => Math.pow(t, n);\n }\n\n /**\n * A sinusoidal function.\n *\n * http://easings.net/#easeInSine\n */\n static sin(t: number): number {\n return 1 - Math.cos((t * Math.PI) / 2);\n }\n\n /**\n * A circular function.\n *\n * http://easings.net/#easeInCirc\n */\n static circle(t: number): number {\n return 1 - Math.sqrt(1 - t * t);\n }\n\n /**\n * An exponential function.\n *\n * http://easings.net/#easeInExpo\n */\n static exp(t: number): number {\n return Math.pow(2, 10 * (t - 1));\n }\n\n /**\n * A simple elastic interaction, similar to a spring oscillating back and\n * forth.\n *\n * Default bounciness is 1, which overshoots a little bit once. 0 bounciness\n * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N\n * times.\n *\n * http://easings.net/#easeInElastic\n */\n static elastic(bounciness: number = 1): (t: number) => number {\n const p = bounciness * Math.PI;\n return t => 1 - Math.pow(Math.cos((t * Math.PI) / 2), 3) * Math.cos(t * p);\n }\n\n /**\n * Use with `Animated.parallel()` to create a simple effect where the object\n * animates back slightly as the animation starts.\n *\n * Wolfram Plot:\n *\n * - http://tiny.cc/back_default (s = 1.70158, default)\n */\n static back(s: number = 1.70158): (t: number) => number {\n return t => t * t * ((s + 1) * t - s);\n }\n\n /**\n * Provides a simple bouncing effect.\n *\n * http://easings.net/#easeInBounce\n */\n static bounce(t: number): number {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n\n if (t < 2 / 2.75) {\n const t2 = t - 1.5 / 2.75;\n return 7.5625 * t2 * t2 + 0.75;\n }\n\n if (t < 2.5 / 2.75) {\n const t2 = t - 2.25 / 2.75;\n return 7.5625 * t2 * t2 + 0.9375;\n }\n\n const t2 = t - 2.625 / 2.75;\n return 7.5625 * t2 * t2 + 0.984375;\n }\n\n /**\n * Provides a cubic bezier curve, equivalent to CSS Transitions'\n * `transition-timing-function`.\n *\n * A useful tool to visualize cubic bezier curves can be found at\n * http://cubic-bezier.com/\n */\n static bezier(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n ): (t: number) => number {\n const _bezier = require('./bezier');\n return _bezier(x1, y1, x2, y2);\n }\n\n /**\n * Runs an easing function forwards.\n */\n static in(easing: (t: number) => number): (t: number) => number {\n return easing;\n }\n\n /**\n * Runs an easing function backwards.\n */\n static out(easing: (t: number) => number): (t: number) => number {\n return t => 1 - easing(1 - t);\n }\n\n /**\n * Makes any easing function symmetrical. The easing function will run\n * forwards for half of the duration, then backwards for the rest of the\n * duration.\n */\n static inOut(easing: (t: number) => number): (t: number) => number {\n return t => {\n if (t < 0.5) {\n return easing(t * 2) / 2;\n }\n return 1 - easing((1 - t) * 2) / 2;\n };\n }\n}\n\nmodule.exports = Easing;\n","/**\n * Portions Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n/**\n * BezierEasing - use bezier curve for transition easing function\n * https://github.com/gre/bezier-easing\n * @copyright 2014-2015 Gaëtan Renaudeau. MIT License.\n */\n\n'use strict';\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\n\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nconst float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(aX, _aA, _aB, mX1, mX2) {\n let currentX,\n currentT,\n i = 0,\n aA = _aA,\n aB = _aB;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (\n Math.abs(currentX) > SUBDIVISION_PRECISION &&\n ++i < SUBDIVISION_MAX_ITERATIONS\n );\n return currentT;\n}\n\nfunction newtonRaphsonIterate(aX, _aGuessT, mX1, mX2) {\n let aGuessT = _aGuessT;\n for (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n const currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n const currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nmodule.exports = function bezier(\n mX1: number,\n mY1: number,\n mX2: number,\n mY2: number,\n): (x: number) => number {\n if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n // Precompute samples table\n const sampleValues = float32ArraySupported\n ? new Float32Array(kSplineTableSize)\n : new Array(kSplineTableSize);\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (let i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n\n function getTForX(aX) {\n let intervalStart = 0.0;\n let currentSample = 1;\n const lastSample = kSplineTableSize - 1;\n\n for (\n ;\n currentSample !== lastSample && sampleValues[currentSample] <= aX;\n ++currentSample\n ) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n const dist =\n (aX - sampleValues[currentSample]) /\n (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n const guessForT = intervalStart + dist * kSampleStepSize;\n\n const initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(\n aX,\n intervalStart,\n intervalStart + kSampleStepSize,\n mX1,\n mX2,\n );\n }\n }\n\n return function BezierEasing(x: number): number {\n if (mX1 === mY1 && mX2 === mY2) {\n return x; // linear\n }\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nimport * as createAnimatedComponentInjection from './createAnimatedComponentInjection';\n\nconst View = require('../Components/View/View');\nconst {AnimatedEvent} = require('./AnimatedEvent');\nconst AnimatedProps = require('./nodes/AnimatedProps');\nconst React = require('react');\nconst NativeAnimatedHelper = require('./NativeAnimatedHelper');\n\nconst invariant = require('invariant');\nconst setAndForwardRef = require('../Utilities/setAndForwardRef');\n\nlet animatedComponentNextId = 1;\n\nexport type AnimatedComponentType<\n Props: {+[string]: mixed, ...},\n Instance,\n> = React.AbstractComponent<\n $ObjMap<\n Props &\n $ReadOnly<{\n passthroughAnimatedPropExplicitValues?: React.ElementConfig<\n typeof View,\n >,\n }>,\n () => any,\n >,\n Instance,\n>;\n\ntype AnimatedComponentOptions = {\n collapsable?: boolean,\n};\n\nfunction createAnimatedComponent(\n Component: React.AbstractComponent,\n options?: AnimatedComponentOptions,\n): AnimatedComponentType {\n invariant(\n typeof Component !== 'function' ||\n (Component.prototype && Component.prototype.isReactComponent),\n '`createAnimatedComponent` does not support stateless functional components; ' +\n 'use a class component instead.',\n );\n\n class AnimatedComponent extends React.Component {\n _component: any; // TODO T53738161: flow type this, and the whole file\n _invokeAnimatedPropsCallbackOnMount: boolean = false;\n _prevComponent: any;\n _propsAnimated: AnimatedProps;\n _eventDetachers: Array = [];\n\n // Only to be used in this file, and only in Fabric.\n _animatedComponentId: string = `${animatedComponentNextId++}:animatedComponent`;\n\n _attachNativeEvents() {\n // Make sure to get the scrollable node for components that implement\n // `ScrollResponder.Mixin`.\n const scrollableNode = this._component?.getScrollableNode\n ? this._component.getScrollableNode()\n : this._component;\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (prop instanceof AnimatedEvent && prop.__isNative) {\n prop.__attach(scrollableNode, key);\n this._eventDetachers.push(() => prop.__detach(scrollableNode, key));\n }\n }\n }\n\n _detachNativeEvents() {\n this._eventDetachers.forEach(remove => remove());\n this._eventDetachers = [];\n }\n\n _isFabric = (): boolean => {\n // When called during the first render, `_component` is always null.\n // Therefore, even if a component is rendered in Fabric, we can't detect\n // that until ref is set, which happens sometime after the first render.\n // In cases where this value switching between \"false\" and \"true\" on Fabric\n // causes issues, add an additional check for _component nullity.\n if (this._component == null) {\n return false;\n }\n return (\n // eslint-disable-next-line dot-notation\n this._component['_internalInstanceHandle']?.stateNode?.canonical !=\n null ||\n // Some components have a setNativeProps function but aren't a host component\n // such as lists like FlatList and SectionList. These should also use\n // forceUpdate in Fabric since setNativeProps doesn't exist on the underlying\n // host component. This crazy hack is essentially special casing those lists and\n // ScrollView itself to use forceUpdate in Fabric.\n // If these components end up using forwardRef then these hacks can go away\n // as this._component would actually be the underlying host component and the above check\n // would be sufficient.\n (this._component.getNativeScrollRef != null &&\n this._component.getNativeScrollRef() != null &&\n // eslint-disable-next-line dot-notation\n this._component.getNativeScrollRef()['_internalInstanceHandle']\n ?.stateNode?.canonical != null) ||\n (this._component.getScrollResponder != null &&\n this._component.getScrollResponder() != null &&\n this._component.getScrollResponder().getNativeScrollRef != null &&\n this._component.getScrollResponder().getNativeScrollRef() != null &&\n this._component.getScrollResponder().getNativeScrollRef()[\n // eslint-disable-next-line dot-notation\n '_internalInstanceHandle'\n ]?.stateNode?.canonical != null)\n );\n };\n\n _waitForUpdate = (): void => {\n if (this._isFabric()) {\n NativeAnimatedHelper.API.setWaitingForIdentifier(\n this._animatedComponentId,\n );\n }\n };\n\n _markUpdateComplete = (): void => {\n if (this._isFabric()) {\n NativeAnimatedHelper.API.unsetWaitingForIdentifier(\n this._animatedComponentId,\n );\n }\n };\n\n // The system is best designed when setNativeProps is implemented. It is\n // able to avoid re-rendering and directly set the attributes that changed.\n // However, setNativeProps can only be implemented on leaf native\n // components. If you want to animate a composite component, you need to\n // re-render it. In this case, we have a fallback that uses forceUpdate.\n // This fallback is also called in Fabric.\n _animatedPropsCallback = () => {\n if (this._component == null) {\n // AnimatedProps is created in will-mount because it's used in render.\n // But this callback may be invoked before mount in async mode,\n // In which case we should defer the setNativeProps() call.\n // React may throw away uncommitted work in async mode,\n // So a deferred call won't always be invoked.\n this._invokeAnimatedPropsCallbackOnMount = true;\n } else if (\n process.env.NODE_ENV === 'test' ||\n // For animating properties of non-leaf/non-native components\n typeof this._component.setNativeProps !== 'function' ||\n // In Fabric, force animations to go through forceUpdate and skip setNativeProps\n this._isFabric()\n ) {\n this.forceUpdate();\n } else if (!this._propsAnimated.__isNative) {\n this._component.setNativeProps(\n this._propsAnimated.__getAnimatedValue(),\n );\n } else {\n throw new Error(\n 'Attempting to run JS driven animation on animated ' +\n 'node that has been moved to \"native\" earlier by starting an ' +\n 'animation with `useNativeDriver: true`',\n );\n }\n };\n\n _attachProps(nextProps) {\n const oldPropsAnimated = this._propsAnimated;\n\n this._propsAnimated = new AnimatedProps(\n nextProps,\n this._animatedPropsCallback,\n );\n this._propsAnimated.__attach();\n\n // When you call detach, it removes the element from the parent list\n // of children. If it goes to 0, then the parent also detaches itself\n // and so on.\n // An optimization is to attach the new elements and THEN detach the old\n // ones instead of detaching and THEN attaching.\n // This way the intermediate state isn't to go to 0 and trigger\n // this expensive recursive detaching to then re-attach everything on\n // the very next operation.\n if (oldPropsAnimated) {\n oldPropsAnimated.__restoreDefaultValues();\n oldPropsAnimated.__detach();\n }\n }\n\n _setComponentRef = setAndForwardRef({\n getForwardedRef: () => this.props.forwardedRef,\n setLocalRef: ref => {\n this._prevComponent = this._component;\n this._component = ref;\n },\n });\n\n render() {\n const {style = {}, ...props} = this._propsAnimated.__getValue() || {};\n const {style: passthruStyle = {}, ...passthruProps} =\n this.props.passthroughAnimatedPropExplicitValues || {};\n const mergedStyle = {...style, ...passthruStyle};\n\n // On Fabric, we always want to ensure the container Animated View is *not*\n // flattened.\n // Because we do not get a host component ref immediately and thus cannot\n // do a proper Fabric vs non-Fabric detection immediately, we default to assuming\n // that Fabric *is* enabled until we know otherwise.\n // Thus, in Fabric, this view will never be flattened. In non-Fabric, the view will\n // not be flattened during the initial render but may be flattened in the second render\n // and onwards.\n const forceNativeIdFabric =\n (this._component == null &&\n (options?.collapsable === false || props.collapsable !== true)) ||\n this._isFabric();\n\n const forceNativeId =\n props.collapsable ??\n (this._propsAnimated.__isNative ||\n forceNativeIdFabric ||\n options?.collapsable === false);\n // The native driver updates views directly through the UI thread so we\n // have to make sure the view doesn't get optimized away because it cannot\n // go through the NativeViewHierarchyManager since it operates on the shadow\n // thread. TODO: T68258846\n const collapsableProps = forceNativeId\n ? {\n nativeID: props.nativeID ?? 'animatedComponent',\n collapsable: false,\n }\n : {};\n return (\n \n );\n }\n\n UNSAFE_componentWillMount() {\n this._waitForUpdate();\n this._attachProps(this.props);\n }\n\n componentDidMount() {\n if (this._invokeAnimatedPropsCallbackOnMount) {\n this._invokeAnimatedPropsCallbackOnMount = false;\n this._animatedPropsCallback();\n }\n\n this._propsAnimated.setNativeView(this._component);\n this._attachNativeEvents();\n this._markUpdateComplete();\n }\n\n UNSAFE_componentWillReceiveProps(newProps) {\n this._waitForUpdate();\n this._attachProps(newProps);\n }\n\n componentDidUpdate(prevProps) {\n if (this._component !== this._prevComponent) {\n this._propsAnimated.setNativeView(this._component);\n }\n if (this._component !== this._prevComponent || prevProps !== this.props) {\n this._detachNativeEvents();\n this._attachNativeEvents();\n }\n this._markUpdateComplete();\n }\n\n componentWillUnmount() {\n this._propsAnimated && this._propsAnimated.__detach();\n this._detachNativeEvents();\n this._markUpdateComplete();\n this._component = null;\n this._prevComponent = null;\n }\n }\n\n return React.forwardRef(function AnimatedComponentWrapper(props, ref) {\n return (\n \n );\n });\n}\n\n// $FlowIgnore[incompatible-cast] - Will be compatible after refactors.\nmodule.exports = (createAnimatedComponentInjection.recordAndRetrieve() ??\n createAnimatedComponent: typeof createAnimatedComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\ntype createAnimatedComponent = (\n Component: React.AbstractComponent,\n) => React.AbstractComponent;\n\n// This can be undefined, null, or the experimental implementation. If this is\n// null, that means `createAnimatedComponent` has already been initialized and\n// it is too late to call `inject`.\nlet injected: ?createAnimatedComponent;\n\n/**\n * Call during bundle initialization to opt-in to new `createAnimatedComponent`.\n */\nexport function inject(newInjected: createAnimatedComponent): void {\n if (injected !== undefined) {\n if (__DEV__) {\n console.error(\n 'createAnimatedComponentInjection: ' +\n (injected == null\n ? 'Must be called before `createAnimatedComponent`.'\n : 'Cannot be called more than once.'),\n );\n }\n return;\n }\n injected = newInjected;\n}\n\n/**\n * Only called by `createAnimatedComponent.js`.\n */\nexport function recordAndRetrieve(): createAnimatedComponent | null {\n if (injected === undefined) {\n injected = null;\n }\n return injected;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nimport type {ElementRef, Ref} from 'react';\n\ntype Args = $ReadOnly<{|\n getForwardedRef: () => ?Ref,\n setLocalRef: (ref: ElementRef) => mixed,\n|}>;\n\n/**\n * This is a helper function for when a component needs to be able to forward a ref\n * to a child component, but still needs to have access to that component as part of\n * its implementation.\n *\n * Its main use case is in wrappers for native components.\n *\n * Usage:\n *\n * class MyView extends React.Component {\n * _nativeRef = null;\n *\n * _setNativeRef = setAndForwardRef({\n * getForwardedRef: () => this.props.forwardedRef,\n * setLocalRef: ref => {\n * this._nativeRef = ref;\n * },\n * });\n *\n * render() {\n * return ;\n * }\n * }\n *\n * const MyViewWithRef = React.forwardRef((props, ref) => (\n * \n * ));\n *\n * module.exports = MyViewWithRef;\n */\n\nfunction setAndForwardRef({\n getForwardedRef,\n setLocalRef,\n}: Args): (ref: ElementRef) => void {\n return function forwardRef(ref: ElementRef) {\n const forwardedRef = getForwardedRef();\n\n setLocalRef(ref);\n\n // Forward to user ref prop (if one has been specified)\n if (typeof forwardedRef === 'function') {\n // Handle function-based refs. String-based refs are handled as functions.\n forwardedRef(ref);\n } else if (typeof forwardedRef === 'object' && forwardedRef != null) {\n // Handle createRef-based refs\n forwardedRef.current = ref;\n }\n };\n}\n\nmodule.exports = setAndForwardRef;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\nconst FlatList = require('../../Lists/FlatList');\nconst createAnimatedComponent = require('../createAnimatedComponent');\n\nimport type {AnimatedComponentType} from '../createAnimatedComponent';\n\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nconst FlatListWithEventThrottle = React.forwardRef((props, ref) => (\n \n));\n\nmodule.exports = (createAnimatedComponent(\n FlatListWithEventThrottle,\n): AnimatedComponentType<\n React.ElementConfig,\n React.ElementRef,\n>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nconst Platform = require('../Utilities/Platform');\nconst deepDiffer = require('../Utilities/differ/deepDiffer');\nconst React = require('react');\nconst View = require('../Components/View/View');\nconst VirtualizedList = require('./VirtualizedList');\nconst StyleSheet = require('../StyleSheet/StyleSheet');\n\nconst invariant = require('invariant');\n\nimport typeof ScrollViewNativeComponent from '../Components/ScrollView/ScrollViewNativeComponent';\nimport {type ScrollResponderType} from '../Components/ScrollView/ScrollView';\nimport type {ViewStyleProp} from '../StyleSheet/StyleSheet';\nimport type {\n ViewToken,\n ViewabilityConfigCallbackPair,\n} from './ViewabilityHelper';\nimport type {RenderItemType, RenderItemProps} from './VirtualizedList';\nimport {keyExtractor as defaultKeyExtractor} from './VirtualizeUtils';\n\ntype RequiredProps = {|\n /**\n * For simplicity, data is just a plain array. If you want to use something else, like an\n * immutable list, use the underlying `VirtualizedList` directly.\n */\n data: ?$ReadOnlyArray,\n|};\ntype OptionalProps = {|\n /**\n * Takes an item from `data` and renders it into the list. Example usage:\n *\n * (\n * \n * )}\n * data={[{title: 'Title Text', key: 'item1'}]}\n * renderItem={({item, separators}) => (\n * this._onPress(item)}\n * onShowUnderlay={separators.highlight}\n * onHideUnderlay={separators.unhighlight}>\n * \n * {item.title}\n * \n * \n * )}\n * />\n *\n * Provides additional metadata like `index` if you need it, as well as a more generic\n * `separators.updateProps` function which let's you set whatever props you want to change the\n * rendering of either the leading separator or trailing separator in case the more common\n * `highlight` and `unhighlight` (which set the `highlighted: boolean` prop) are insufficient for\n * your use-case.\n */\n renderItem?: ?RenderItemType,\n\n /**\n * Optional custom style for multi-item rows generated when numColumns > 1.\n */\n columnWrapperStyle?: ViewStyleProp,\n /**\n * A marker property for telling the list to re-render (since it implements `PureComponent`). If\n * any of your `renderItem`, Header, Footer, etc. functions depend on anything outside of the\n * `data` prop, stick it here and treat it immutably.\n */\n extraData?: any,\n /**\n * `getItemLayout` is an optional optimizations that let us skip measurement of dynamic content if\n * you know the height of items a priori. `getItemLayout` is the most efficient, and is easy to\n * use if you have fixed height items, for example:\n *\n * getItemLayout={(data, index) => (\n * {length: ITEM_HEIGHT, offset: ITEM_HEIGHT * index, index}\n * )}\n *\n * Adding `getItemLayout` can be a great performance boost for lists of several hundred items.\n * Remember to include separator length (height or width) in your offset calculation if you\n * specify `ItemSeparatorComponent`.\n */\n getItemLayout?: (\n data: ?Array,\n index: number,\n ) => {\n length: number,\n offset: number,\n index: number,\n ...\n },\n /**\n * If true, renders items next to each other horizontally instead of stacked vertically.\n */\n horizontal?: ?boolean,\n /**\n * How many items to render in the initial batch. This should be enough to fill the screen but not\n * much more. Note these items will never be unmounted as part of the windowed rendering in order\n * to improve perceived performance of scroll-to-top actions.\n */\n initialNumToRender?: ?number,\n /**\n * Instead of starting at the top with the first item, start at `initialScrollIndex`. This\n * disables the \"scroll to top\" optimization that keeps the first `initialNumToRender` items\n * always rendered and immediately renders the items starting at this initial index. Requires\n * `getItemLayout` to be implemented.\n */\n initialScrollIndex?: ?number,\n /**\n * Reverses the direction of scroll. Uses scale transforms of -1.\n */\n inverted?: ?boolean,\n /**\n * Used to extract a unique key for a given item at the specified index. Key is used for caching\n * and as the react key to track item re-ordering. The default extractor checks `item.key`, then\n * falls back to using the index, like React does.\n */\n keyExtractor?: ?(item: ItemT, index: number) => string,\n /**\n * Multiple columns can only be rendered with `horizontal={false}` and will zig-zag like a\n * `flexWrap` layout. Items should all be the same height - masonry layouts are not supported.\n *\n * The default value is 1.\n */\n numColumns?: number,\n /**\n * Note: may have bugs (missing content) in some circumstances - use at your own risk.\n *\n * This may improve scroll performance for large lists.\n *\n * The default value is true for Android.\n */\n removeClippedSubviews?: boolean,\n /**\n * See `ScrollView` for flow type and further documentation.\n */\n fadingEdgeLength?: ?number,\n|};\n\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// removeClippedSubviewsOrDefault(this.props.removeClippedSubviews)\nfunction removeClippedSubviewsOrDefault(removeClippedSubviews: ?boolean) {\n return removeClippedSubviews ?? Platform.OS === 'android';\n}\n\n// numColumnsOrDefault(this.props.numColumns)\nfunction numColumnsOrDefault(numColumns: ?number) {\n return numColumns ?? 1;\n}\n\ntype FlatListProps = {|\n ...RequiredProps,\n ...OptionalProps,\n|};\n\ntype VirtualizedListProps = React.ElementConfig;\n\nexport type Props = {\n ...$Diff<\n VirtualizedListProps,\n {\n getItem: $PropertyType,\n getItemCount: $PropertyType,\n getItemLayout: $PropertyType,\n renderItem: $PropertyType,\n keyExtractor: $PropertyType,\n ...\n },\n >,\n ...FlatListProps,\n ...\n};\n\n/**\n * A performant interface for rendering simple, flat lists, supporting the most handy features:\n *\n * - Fully cross-platform.\n * - Optional horizontal mode.\n * - Configurable viewability callbacks.\n * - Header support.\n * - Footer support.\n * - Separator support.\n * - Pull to Refresh.\n * - Scroll loading.\n * - ScrollToIndex support.\n *\n * If you need section support, use [``](docs/sectionlist.html).\n *\n * Minimal Example:\n *\n * {item.key}}\n * />\n *\n * More complex, multi-select example demonstrating `PureComponent` usage for perf optimization and avoiding bugs.\n *\n * - By binding the `onPressItem` handler, the props will remain `===` and `PureComponent` will\n * prevent wasteful re-renders unless the actual `id`, `selected`, or `title` props change, even\n * if the components rendered in `MyListItem` did not have such optimizations.\n * - By passing `extraData={this.state}` to `FlatList` we make sure `FlatList` itself will re-render\n * when the `state.selected` changes. Without setting this prop, `FlatList` would not know it\n * needs to re-render any items because it is also a `PureComponent` and the prop comparison will\n * not show any changes.\n * - `keyExtractor` tells the list to use the `id`s for the react keys instead of the default `key` property.\n *\n *\n * class MyListItem extends React.PureComponent {\n * _onPress = () => {\n * this.props.onPressItem(this.props.id);\n * };\n *\n * render() {\n * const textColor = this.props.selected ? \"red\" : \"black\";\n * return (\n * \n * \n * \n * {this.props.title}\n * \n * \n * \n * );\n * }\n * }\n *\n * class MultiSelectList extends React.PureComponent {\n * state = {selected: (new Map(): Map)};\n *\n * _keyExtractor = (item, index) => item.id;\n *\n * _onPressItem = (id: string) => {\n * // updater functions are preferred for transactional updates\n * this.setState((state) => {\n * // copy the map rather than modifying state.\n * const selected = new Map(state.selected);\n * selected.set(id, !selected.get(id)); // toggle\n * return {selected};\n * });\n * };\n *\n * _renderItem = ({item}) => (\n * \n * );\n *\n * render() {\n * return (\n * \n * );\n * }\n * }\n *\n * This is a convenience wrapper around [``](docs/virtualizedlist.html),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n *\n * Also inherits [ScrollView Props](docs/scrollview.html#props), unless it is nested in another FlatList of same orientation.\n */\nclass FlatList extends React.PureComponent, void> {\n props: Props;\n /**\n * Scrolls to the end of the content. May be janky without `getItemLayout` prop.\n */\n scrollToEnd(params?: ?{animated?: ?boolean, ...}) {\n if (this._listRef) {\n this._listRef.scrollToEnd(params);\n }\n }\n\n /**\n * Scrolls to the item at the specified index such that it is positioned in the viewable area\n * such that `viewPosition` 0 places it at the top, 1 at the bottom, and 0.5 centered in the\n * middle. `viewOffset` is a fixed number of pixels to offset the final target position.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToIndex(params: {\n animated?: ?boolean,\n index: number,\n viewOffset?: number,\n viewPosition?: number,\n ...\n }) {\n if (this._listRef) {\n this._listRef.scrollToIndex(params);\n }\n }\n\n /**\n * Requires linear scan through data - use `scrollToIndex` instead if possible.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToItem(params: {\n animated?: ?boolean,\n item: ItemT,\n viewPosition?: number,\n ...\n }) {\n if (this._listRef) {\n this._listRef.scrollToItem(params);\n }\n }\n\n /**\n * Scroll to a specific content pixel offset in the list.\n *\n * Check out [scrollToOffset](docs/virtualizedlist.html#scrolltooffset) of VirtualizedList\n */\n scrollToOffset(params: {animated?: ?boolean, offset: number, ...}) {\n if (this._listRef) {\n this._listRef.scrollToOffset(params);\n }\n }\n\n /**\n * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n * taps on items or by navigation actions.\n */\n recordInteraction() {\n if (this._listRef) {\n this._listRef.recordInteraction();\n }\n }\n\n /**\n * Displays the scroll indicators momentarily.\n *\n * @platform ios\n */\n flashScrollIndicators() {\n if (this._listRef) {\n this._listRef.flashScrollIndicators();\n }\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n */\n getScrollResponder(): ?ScrollResponderType {\n if (this._listRef) {\n return this._listRef.getScrollResponder();\n }\n }\n\n /**\n * Provides a reference to the underlying host component\n */\n getNativeScrollRef():\n | ?React.ElementRef\n | ?React.ElementRef {\n if (this._listRef) {\n /* $FlowFixMe[incompatible-return] Suppresses errors found when fixing\n * TextInput typing */\n return this._listRef.getScrollRef();\n }\n }\n\n getScrollableNode(): any {\n if (this._listRef) {\n return this._listRef.getScrollableNode();\n }\n }\n\n setNativeProps(props: {[string]: mixed, ...}) {\n if (this._listRef) {\n this._listRef.setNativeProps(props);\n }\n }\n\n constructor(props: Props) {\n super(props);\n this._checkProps(this.props);\n if (this.props.viewabilityConfigCallbackPairs) {\n this._virtualizedListPairs = this.props.viewabilityConfigCallbackPairs.map(\n pair => ({\n viewabilityConfig: pair.viewabilityConfig,\n onViewableItemsChanged: this._createOnViewableItemsChanged(\n pair.onViewableItemsChanged,\n ),\n }),\n );\n } else if (this.props.onViewableItemsChanged) {\n this._virtualizedListPairs.push({\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To\n * see the error delete this comment and run Flow. */\n viewabilityConfig: this.props.viewabilityConfig,\n onViewableItemsChanged: this._createOnViewableItemsChanged(\n this.props.onViewableItemsChanged,\n ),\n });\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n invariant(\n prevProps.numColumns === this.props.numColumns,\n 'Changing numColumns on the fly is not supported. Change the key prop on FlatList when ' +\n 'changing the number of columns to force a fresh render of the component.',\n );\n invariant(\n prevProps.onViewableItemsChanged === this.props.onViewableItemsChanged,\n 'Changing onViewableItemsChanged on the fly is not supported',\n );\n invariant(\n !deepDiffer(prevProps.viewabilityConfig, this.props.viewabilityConfig),\n 'Changing viewabilityConfig on the fly is not supported',\n );\n invariant(\n prevProps.viewabilityConfigCallbackPairs ===\n this.props.viewabilityConfigCallbackPairs,\n 'Changing viewabilityConfigCallbackPairs on the fly is not supported',\n );\n\n this._checkProps(this.props);\n }\n\n _listRef: ?React.ElementRef;\n _virtualizedListPairs: Array = [];\n\n _captureRef = ref => {\n this._listRef = ref;\n };\n\n _checkProps(props: Props) {\n const {\n // $FlowFixMe[prop-missing] this prop doesn't exist, is only used for an invariant\n getItem,\n // $FlowFixMe[prop-missing] this prop doesn't exist, is only used for an invariant\n getItemCount,\n horizontal,\n columnWrapperStyle,\n onViewableItemsChanged,\n viewabilityConfigCallbackPairs,\n } = props;\n const numColumns = numColumnsOrDefault(this.props.numColumns);\n invariant(\n !getItem && !getItemCount,\n 'FlatList does not support custom data formats.',\n );\n if (numColumns > 1) {\n invariant(!horizontal, 'numColumns does not support horizontal.');\n } else {\n invariant(\n !columnWrapperStyle,\n 'columnWrapperStyle not supported for single column lists',\n );\n }\n invariant(\n !(onViewableItemsChanged && viewabilityConfigCallbackPairs),\n 'FlatList does not support setting both onViewableItemsChanged and ' +\n 'viewabilityConfigCallbackPairs.',\n );\n }\n\n _getItem = (data: Array, index: number) => {\n const numColumns = numColumnsOrDefault(this.props.numColumns);\n if (numColumns > 1) {\n const ret = [];\n for (let kk = 0; kk < numColumns; kk++) {\n const item = data[index * numColumns + kk];\n if (item != null) {\n ret.push(item);\n }\n }\n return ret;\n } else {\n return data[index];\n }\n };\n\n _getItemCount = (data: ?Array): number => {\n if (data) {\n const numColumns = numColumnsOrDefault(this.props.numColumns);\n return numColumns > 1 ? Math.ceil(data.length / numColumns) : data.length;\n } else {\n return 0;\n }\n };\n\n _keyExtractor = (items: ItemT | Array, index: number) => {\n const numColumns = numColumnsOrDefault(this.props.numColumns);\n const keyExtractor = this.props.keyExtractor ?? defaultKeyExtractor;\n\n if (numColumns > 1) {\n if (Array.isArray(items)) {\n return items\n .map((item, kk) =>\n keyExtractor(((item: $FlowFixMe): ItemT), index * numColumns + kk),\n )\n .join(':');\n } else {\n invariant(\n Array.isArray(items),\n 'FlatList: Encountered internal consistency error, expected each item to consist of an ' +\n 'array with 1-%s columns; instead, received a single item.',\n numColumns,\n );\n }\n } else {\n // $FlowFixMe[incompatible-call] Can't call keyExtractor with an array\n return keyExtractor(items, index);\n }\n };\n\n _pushMultiColumnViewable(arr: Array, v: ViewToken): void {\n const numColumns = numColumnsOrDefault(this.props.numColumns);\n const keyExtractor = this.props.keyExtractor ?? defaultKeyExtractor;\n v.item.forEach((item, ii) => {\n invariant(v.index != null, 'Missing index!');\n const index = v.index * numColumns + ii;\n arr.push({...v, item, key: keyExtractor(item, index), index});\n });\n }\n\n _createOnViewableItemsChanged(\n onViewableItemsChanged: ?(info: {\n viewableItems: Array,\n changed: Array,\n ...\n }) => void,\n ) {\n return (info: {\n viewableItems: Array,\n changed: Array,\n ...\n }) => {\n const numColumns = numColumnsOrDefault(this.props.numColumns);\n if (onViewableItemsChanged) {\n if (numColumns > 1) {\n const changed = [];\n const viewableItems = [];\n info.viewableItems.forEach(v =>\n this._pushMultiColumnViewable(viewableItems, v),\n );\n info.changed.forEach(v => this._pushMultiColumnViewable(changed, v));\n onViewableItemsChanged({viewableItems, changed});\n } else {\n onViewableItemsChanged(info);\n }\n }\n };\n }\n\n _renderer = () => {\n const {ListItemComponent, renderItem, columnWrapperStyle} = this.props;\n const numColumns = numColumnsOrDefault(this.props.numColumns);\n\n let virtualizedListRenderKey = ListItemComponent\n ? 'ListItemComponent'\n : 'renderItem';\n\n const renderer = (props): React.Node => {\n if (ListItemComponent) {\n // $FlowFixMe[not-a-component] Component isn't valid\n // $FlowFixMe[incompatible-type-arg] Component isn't valid\n // $FlowFixMe[incompatible-return] Component isn't valid\n return ;\n } else if (renderItem) {\n // $FlowFixMe[incompatible-call]\n return renderItem(props);\n } else {\n return null;\n }\n };\n\n return {\n /* $FlowFixMe[invalid-computed-prop] (>=0.111.0 site=react_native_fb)\n * This comment suppresses an error found when Flow v0.111 was deployed.\n * To see the error, delete this comment and run Flow. */\n [virtualizedListRenderKey]: (info: RenderItemProps) => {\n if (numColumns > 1) {\n const {item, index} = info;\n invariant(\n Array.isArray(item),\n 'Expected array of items with numColumns > 1',\n );\n return (\n \n {item.map((it, kk) => {\n const element = renderer({\n item: it,\n index: index * numColumns + kk,\n separators: info.separators,\n });\n return element != null ? (\n {element}\n ) : null;\n })}\n \n );\n } else {\n return renderer(info);\n }\n },\n };\n };\n\n render(): React.Node {\n const {\n numColumns,\n columnWrapperStyle,\n removeClippedSubviews: _removeClippedSubviews,\n ...restProps\n } = this.props;\n\n return (\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n row: {flexDirection: 'row'},\n});\n\nmodule.exports = FlatList;\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nimport invariant from 'invariant';\n\n/**\n * Used to find the indices of the frames that overlap the given offsets. Useful for finding the\n * items that bound different windows of content, such as the visible area or the buffered overscan\n * area.\n */\nexport function elementsThatOverlapOffsets(\n offsets: Array,\n itemCount: number,\n getFrameMetrics: (\n index: number,\n ) => {\n length: number,\n offset: number,\n ...\n },\n): Array {\n const out = [];\n let outLength = 0;\n for (let ii = 0; ii < itemCount; ii++) {\n const frame = getFrameMetrics(ii);\n const trailingOffset = frame.offset + frame.length;\n for (let kk = 0; kk < offsets.length; kk++) {\n if (out[kk] == null && trailingOffset >= offsets[kk]) {\n out[kk] = ii;\n outLength++;\n if (kk === offsets.length - 1) {\n invariant(\n outLength === offsets.length,\n 'bad offsets input, should be in increasing order: %s',\n JSON.stringify(offsets),\n );\n return out;\n }\n }\n }\n }\n return out;\n}\n\n/**\n * Computes the number of elements in the `next` range that are new compared to the `prev` range.\n * Handy for calculating how many new items will be rendered when the render window changes so we\n * can restrict the number of new items render at once so that content can appear on the screen\n * faster.\n */\nexport function newRangeCount(\n prev: {\n first: number,\n last: number,\n ...\n },\n next: {\n first: number,\n last: number,\n ...\n },\n): number {\n return (\n next.last -\n next.first +\n 1 -\n Math.max(\n 0,\n 1 + Math.min(next.last, prev.last) - Math.max(next.first, prev.first),\n )\n );\n}\n\n/**\n * Custom logic for determining which items should be rendered given the current frame and scroll\n * metrics, as well as the previous render state. The algorithm may evolve over time, but generally\n * prioritizes the visible area first, then expands that with overscan regions ahead and behind,\n * biased in the direction of scroll.\n */\nexport function computeWindowedRenderLimits(\n data: any,\n getItemCount: (data: any) => number,\n maxToRenderPerBatch: number,\n windowSize: number,\n prev: {\n first: number,\n last: number,\n ...\n },\n getFrameMetricsApprox: (\n index: number,\n ) => {\n length: number,\n offset: number,\n ...\n },\n scrollMetrics: {\n dt: number,\n offset: number,\n velocity: number,\n visibleLength: number,\n ...\n },\n): {\n first: number,\n last: number,\n ...\n} {\n const itemCount = getItemCount(data);\n if (itemCount === 0) {\n return prev;\n }\n const {offset, velocity, visibleLength} = scrollMetrics;\n\n // Start with visible area, then compute maximum overscan region by expanding from there, biased\n // in the direction of scroll. Total overscan area is capped, which should cap memory consumption\n // too.\n const visibleBegin = Math.max(0, offset);\n const visibleEnd = visibleBegin + visibleLength;\n const overscanLength = (windowSize - 1) * visibleLength;\n\n // Considering velocity seems to introduce more churn than it's worth.\n const leadFactor = 0.5; // Math.max(0, Math.min(1, velocity / 25 + 0.5));\n\n const fillPreference =\n velocity > 1 ? 'after' : velocity < -1 ? 'before' : 'none';\n\n const overscanBegin = Math.max(\n 0,\n visibleBegin - (1 - leadFactor) * overscanLength,\n );\n const overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength);\n\n const lastItemOffset = getFrameMetricsApprox(itemCount - 1).offset;\n if (lastItemOffset < overscanBegin) {\n // Entire list is before our overscan window\n return {\n first: Math.max(0, itemCount - 1 - maxToRenderPerBatch),\n last: itemCount - 1,\n };\n }\n\n // Find the indices that correspond to the items at the render boundaries we're targeting.\n let [overscanFirst, first, last, overscanLast] = elementsThatOverlapOffsets(\n [overscanBegin, visibleBegin, visibleEnd, overscanEnd],\n itemCount,\n getFrameMetricsApprox,\n );\n overscanFirst = overscanFirst == null ? 0 : overscanFirst;\n first = first == null ? Math.max(0, overscanFirst) : first;\n overscanLast = overscanLast == null ? itemCount - 1 : overscanLast;\n last =\n last == null\n ? Math.min(overscanLast, first + maxToRenderPerBatch - 1)\n : last;\n const visible = {first, last};\n\n // We want to limit the number of new cells we're rendering per batch so that we can fill the\n // content on the screen quickly. If we rendered the entire overscan window at once, the user\n // could be staring at white space for a long time waiting for a bunch of offscreen content to\n // render.\n let newCellCount = newRangeCount(prev, visible);\n\n while (true) {\n if (first <= overscanFirst && last >= overscanLast) {\n // If we fill the entire overscan range, we're done.\n break;\n }\n const maxNewCells = newCellCount >= maxToRenderPerBatch;\n const firstWillAddMore = first <= prev.first || first > prev.last;\n const firstShouldIncrement =\n first > overscanFirst && (!maxNewCells || !firstWillAddMore);\n const lastWillAddMore = last >= prev.last || last < prev.first;\n const lastShouldIncrement =\n last < overscanLast && (!maxNewCells || !lastWillAddMore);\n if (maxNewCells && !firstShouldIncrement && !lastShouldIncrement) {\n // We only want to stop if we've hit maxNewCells AND we cannot increment first or last\n // without rendering new items. This let's us preserve as many already rendered items as\n // possible, reducing render churn and keeping the rendered overscan range as large as\n // possible.\n break;\n }\n if (\n firstShouldIncrement &&\n !(fillPreference === 'after' && lastShouldIncrement && lastWillAddMore)\n ) {\n if (firstWillAddMore) {\n newCellCount++;\n }\n first--;\n }\n if (\n lastShouldIncrement &&\n !(fillPreference === 'before' && firstShouldIncrement && firstWillAddMore)\n ) {\n if (lastWillAddMore) {\n newCellCount++;\n }\n last++;\n }\n }\n if (\n !(\n last >= first &&\n first >= 0 &&\n last < itemCount &&\n first >= overscanFirst &&\n last <= overscanLast &&\n first <= visible.first &&\n last >= visible.last\n )\n ) {\n throw new Error(\n 'Bad window calculation ' +\n JSON.stringify({\n first,\n last,\n itemCount,\n overscanFirst,\n overscanLast,\n visible,\n }),\n );\n }\n return {first, last};\n}\n\nexport function keyExtractor(item: any, index: number): string {\n if (typeof item === 'object' && item?.key != null) {\n return item.key;\n }\n if (typeof item === 'object' && item?.id != null) {\n return item.id;\n }\n return String(index);\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nconst Batchinator = require('../Interaction/Batchinator');\nconst FillRateHelper = require('./FillRateHelper');\nconst ReactNative = require('../Renderer/shims/ReactNative');\nconst RefreshControl = require('../Components/RefreshControl/RefreshControl');\nconst ScrollView = require('../Components/ScrollView/ScrollView');\nconst StyleSheet = require('../StyleSheet/StyleSheet');\nconst View = require('../Components/View/View');\nconst ViewabilityHelper = require('./ViewabilityHelper');\n\nconst flattenStyle = require('../StyleSheet/flattenStyle');\nconst infoLog = require('../Utilities/infoLog');\nconst invariant = require('invariant');\n\nimport {\n keyExtractor as defaultKeyExtractor,\n computeWindowedRenderLimits,\n} from './VirtualizeUtils';\n\nimport * as React from 'react';\nimport type {ScrollResponderType} from '../Components/ScrollView/ScrollView';\nimport type {ViewStyleProp} from '../StyleSheet/StyleSheet';\nimport type {\n ViewabilityConfig,\n ViewToken,\n ViewabilityConfigCallbackPair,\n} from './ViewabilityHelper';\nimport {\n VirtualizedListCellContextProvider,\n VirtualizedListContext,\n VirtualizedListContextProvider,\n type ChildListState,\n type ListDebugInfo,\n} from './VirtualizedListContext.js';\n\ntype Item = any;\n\nexport type Separators = {\n highlight: () => void,\n unhighlight: () => void,\n updateProps: (select: 'leading' | 'trailing', newProps: Object) => void,\n ...\n};\n\nexport type RenderItemProps = {\n item: ItemT,\n index: number,\n separators: Separators,\n ...\n};\n\nexport type RenderItemType = (\n info: RenderItemProps,\n) => React.Node;\n\ntype ViewabilityHelperCallbackTuple = {\n viewabilityHelper: ViewabilityHelper,\n onViewableItemsChanged: (info: {\n viewableItems: Array,\n changed: Array,\n ...\n }) => void,\n ...\n};\n\ntype RequiredProps = {|\n /**\n * The default accessor functions assume this is an Array<{key: string} | {id: string}> but you can override\n * getItem, getItemCount, and keyExtractor to handle any type of index-based data.\n */\n data?: any,\n /**\n * A generic accessor for extracting an item from any sort of data blob.\n */\n getItem: (data: any, index: number) => ?Item,\n /**\n * Determines how many items are in the data blob.\n */\n getItemCount: (data: any) => number,\n|};\ntype OptionalProps = {|\n renderItem?: ?RenderItemType,\n /**\n * `debug` will turn on extra logging and visual overlays to aid with debugging both usage and\n * implementation, but with a significant perf hit.\n */\n debug?: ?boolean,\n /**\n * DEPRECATED: Virtualization provides significant performance and memory optimizations, but fully\n * unmounts react instances that are outside of the render window. You should only need to disable\n * this for debugging purposes. Defaults to false.\n */\n disableVirtualization?: ?boolean,\n /**\n * A marker property for telling the list to re-render (since it implements `PureComponent`). If\n * any of your `renderItem`, Header, Footer, etc. functions depend on anything outside of the\n * `data` prop, stick it here and treat it immutably.\n */\n extraData?: any,\n // e.g. height, y\n getItemLayout?: (\n data: any,\n index: number,\n ) => {\n length: number,\n offset: number,\n index: number,\n ...\n },\n horizontal?: ?boolean,\n /**\n * How many items to render in the initial batch. This should be enough to fill the screen but not\n * much more. Note these items will never be unmounted as part of the windowed rendering in order\n * to improve perceived performance of scroll-to-top actions.\n */\n initialNumToRender?: ?number,\n /**\n * Instead of starting at the top with the first item, start at `initialScrollIndex`. This\n * disables the \"scroll to top\" optimization that keeps the first `initialNumToRender` items\n * always rendered and immediately renders the items starting at this initial index. Requires\n * `getItemLayout` to be implemented.\n */\n initialScrollIndex?: ?number,\n /**\n * Reverses the direction of scroll. Uses scale transforms of -1.\n */\n inverted?: ?boolean,\n keyExtractor?: ?(item: Item, index: number) => string,\n /**\n * Each cell is rendered using this element. Can be a React Component Class,\n * or a render function. Defaults to using View.\n */\n CellRendererComponent?: ?React.ComponentType,\n /**\n * Rendered in between each item, but not at the top or bottom. By default, `highlighted` and\n * `leadingItem` props are provided. `renderItem` provides `separators.highlight`/`unhighlight`\n * which will update the `highlighted` prop, but you can also add custom props with\n * `separators.updateProps`.\n */\n ItemSeparatorComponent?: ?React.ComponentType,\n /**\n * Takes an item from `data` and renders it into the list. Example usage:\n *\n * (\n * \n * )}\n * data={[{title: 'Title Text', key: 'item1'}]}\n * ListItemComponent={({item, separators}) => (\n * this._onPress(item)}\n * onShowUnderlay={separators.highlight}\n * onHideUnderlay={separators.unhighlight}>\n * \n * {item.title}\n * \n * \n * )}\n * />\n *\n * Provides additional metadata like `index` if you need it, as well as a more generic\n * `separators.updateProps` function which let's you set whatever props you want to change the\n * rendering of either the leading separator or trailing separator in case the more common\n * `highlight` and `unhighlight` (which set the `highlighted: boolean` prop) are insufficient for\n * your use-case.\n */\n ListItemComponent?: ?(React.ComponentType | React.Element),\n /**\n * Rendered when the list is empty. Can be a React Component Class, a render function, or\n * a rendered element.\n */\n ListEmptyComponent?: ?(React.ComponentType | React.Element),\n /**\n * Rendered at the bottom of all the items. Can be a React Component Class, a render function, or\n * a rendered element.\n */\n ListFooterComponent?: ?(React.ComponentType | React.Element),\n /**\n * Styling for internal View for ListFooterComponent\n */\n ListFooterComponentStyle?: ViewStyleProp,\n /**\n * Rendered at the top of all the items. Can be a React Component Class, a render function, or\n * a rendered element.\n */\n ListHeaderComponent?: ?(React.ComponentType | React.Element),\n /**\n * Styling for internal View for ListHeaderComponent\n */\n ListHeaderComponentStyle?: ViewStyleProp,\n /**\n * A unique identifier for this list. If there are multiple VirtualizedLists at the same level of\n * nesting within another VirtualizedList, this key is necessary for virtualization to\n * work properly.\n */\n listKey?: string,\n /**\n * The maximum number of items to render in each incremental render batch. The more rendered at\n * once, the better the fill rate, but responsiveness may suffer because rendering content may\n * interfere with responding to button taps or other interactions.\n */\n maxToRenderPerBatch?: ?number,\n /**\n * Called once when the scroll position gets within `onEndReachedThreshold` of the rendered\n * content.\n */\n onEndReached?: ?(info: {distanceFromEnd: number, ...}) => void,\n /**\n * How far from the end (in units of visible length of the list) the bottom edge of the\n * list must be from the end of the content to trigger the `onEndReached` callback.\n * Thus a value of 0.5 will trigger `onEndReached` when the end of the content is\n * within half the visible length of the list.\n */\n onEndReachedThreshold?: ?number,\n /**\n * If provided, a standard RefreshControl will be added for \"Pull to Refresh\" functionality. Make\n * sure to also set the `refreshing` prop correctly.\n */\n onRefresh?: ?() => void,\n /**\n * Used to handle failures when scrolling to an index that has not been measured yet. Recommended\n * action is to either compute your own offset and `scrollTo` it, or scroll as far as possible and\n * then try again after more items have been rendered.\n */\n onScrollToIndexFailed?: ?(info: {\n index: number,\n highestMeasuredFrameIndex: number,\n averageItemLength: number,\n ...\n }) => void,\n /**\n * Called when the viewability of rows changes, as defined by the\n * `viewabilityConfig` prop.\n */\n onViewableItemsChanged?: ?(info: {\n viewableItems: Array,\n changed: Array,\n ...\n }) => void,\n persistentScrollbar?: ?boolean,\n /**\n * Set this when offset is needed for the loading indicator to show correctly.\n */\n progressViewOffset?: number,\n /**\n * A custom refresh control element. When set, it overrides the default\n * component built internally. The onRefresh and refreshing\n * props are also ignored. Only works for vertical VirtualizedList.\n */\n refreshControl?: ?React.Element,\n /**\n * Set this true while waiting for new data from a refresh.\n */\n refreshing?: ?boolean,\n /**\n * Note: may have bugs (missing content) in some circumstances - use at your own risk.\n *\n * This may improve scroll performance for large lists.\n */\n removeClippedSubviews?: boolean,\n /**\n * Render a custom scroll component, e.g. with a differently styled `RefreshControl`.\n */\n renderScrollComponent?: (props: Object) => React.Element,\n /**\n * Amount of time between low-pri item render batches, e.g. for rendering items quite a ways off\n * screen. Similar fill rate/responsiveness tradeoff as `maxToRenderPerBatch`.\n */\n updateCellsBatchingPeriod?: ?number,\n /**\n * See `ViewabilityHelper` for flow type and further documentation.\n */\n viewabilityConfig?: ViewabilityConfig,\n /**\n * List of ViewabilityConfig/onViewableItemsChanged pairs. A specific onViewableItemsChanged\n * will be called when its corresponding ViewabilityConfig's conditions are met.\n */\n viewabilityConfigCallbackPairs?: Array,\n /**\n * Determines the maximum number of items rendered outside of the visible area, in units of\n * visible lengths. So if your list fills the screen, then `windowSize={21}` (the default) will\n * render the visible screen area plus up to 10 screens above and 10 below the viewport. Reducing\n * this number will reduce memory consumption and may improve performance, but will increase the\n * chance that fast scrolling may reveal momentary blank areas of unrendered content.\n */\n windowSize?: ?number,\n /**\n * The legacy implementation is no longer supported.\n */\n legacyImplementation?: empty,\n|};\n\ntype Props = {|\n ...React.ElementConfig,\n ...RequiredProps,\n ...OptionalProps,\n|};\n\nlet _usedIndexForKey = false;\nlet _keylessItemComponentName: string = '';\n\ntype State = {\n first: number,\n last: number,\n};\n\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// horizontalOrDefault(this.props.horizontal)\nfunction horizontalOrDefault(horizontal: ?boolean) {\n return horizontal ?? false;\n}\n\n// initialNumToRenderOrDefault(this.props.initialNumToRenderOrDefault)\nfunction initialNumToRenderOrDefault(initialNumToRender: ?number) {\n return initialNumToRender ?? 10;\n}\n\n// maxToRenderPerBatchOrDefault(this.props.maxToRenderPerBatch)\nfunction maxToRenderPerBatchOrDefault(maxToRenderPerBatch: ?number) {\n return maxToRenderPerBatch ?? 10;\n}\n\n// onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold)\nfunction onEndReachedThresholdOrDefault(onEndReachedThreshold: ?number) {\n return onEndReachedThreshold ?? 2;\n}\n\n// scrollEventThrottleOrDefault(this.props.scrollEventThrottle)\nfunction scrollEventThrottleOrDefault(scrollEventThrottle: ?number) {\n return scrollEventThrottle ?? 50;\n}\n\n// windowSizeOrDefault(this.props.windowSize)\nfunction windowSizeOrDefault(windowSize: ?number) {\n return windowSize ?? 21;\n}\n\n/**\n * Base implementation for the more convenient [``](https://reactnative.dev/docs/flatlist.html)\n * and [``](https://reactnative.dev/docs/sectionlist.html) components, which are also better\n * documented. In general, this should only really be used if you need more flexibility than\n * `FlatList` provides, e.g. for use with immutable data instead of plain arrays.\n *\n * Virtualization massively improves memory consumption and performance of large lists by\n * maintaining a finite render window of active items and replacing all items outside of the render\n * window with appropriately sized blank space. The window adapts to scrolling behavior, and items\n * are rendered incrementally with low-pri (after any running interactions) if they are far from the\n * visible area, or with hi-pri otherwise to minimize the potential of seeing blank space.\n *\n * Some caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` or `id` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n * - As an effort to remove defaultProps, use helper functions when referencing certain props\n *\n */\nclass VirtualizedList extends React.PureComponent {\n static contextType: typeof VirtualizedListContext = VirtualizedListContext;\n\n // scrollToEnd may be janky without getItemLayout prop\n scrollToEnd(params?: ?{animated?: ?boolean, ...}) {\n const animated = params ? params.animated : true;\n const veryLast = this.props.getItemCount(this.props.data) - 1;\n const frame = this._getFrameMetricsApprox(veryLast);\n const offset = Math.max(\n 0,\n frame.offset +\n frame.length +\n this._footerLength -\n this._scrollMetrics.visibleLength,\n );\n\n if (this._scrollRef == null) {\n return;\n }\n\n if (this._scrollRef.scrollTo == null) {\n console.warn(\n 'No scrollTo method provided. This may be because you have two nested ' +\n 'VirtualizedLists with the same orientation, or because you are ' +\n 'using a custom component that does not implement scrollTo.',\n );\n return;\n }\n\n this._scrollRef.scrollTo(\n horizontalOrDefault(this.props.horizontal)\n ? {x: offset, animated}\n : {y: offset, animated},\n );\n }\n\n // scrollToIndex may be janky without getItemLayout prop\n scrollToIndex(params: {\n animated?: ?boolean,\n index: number,\n viewOffset?: number,\n viewPosition?: number,\n ...\n }) {\n const {\n data,\n horizontal,\n getItemCount,\n getItemLayout,\n onScrollToIndexFailed,\n } = this.props;\n const {animated, index, viewOffset, viewPosition} = params;\n invariant(\n index >= 0,\n `scrollToIndex out of range: requested index ${index} but minimum is 0`,\n );\n invariant(\n getItemCount(data) >= 1,\n `scrollToIndex out of range: item length ${getItemCount(\n data,\n )} but minimum is 1`,\n );\n invariant(\n index < getItemCount(data),\n `scrollToIndex out of range: requested index ${index} is out of 0 to ${getItemCount(\n data,\n ) - 1}`,\n );\n if (!getItemLayout && index > this._highestMeasuredFrameIndex) {\n invariant(\n !!onScrollToIndexFailed,\n 'scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, ' +\n 'otherwise there is no way to know the location of offscreen indices or handle failures.',\n );\n onScrollToIndexFailed({\n averageItemLength: this._averageCellLength,\n highestMeasuredFrameIndex: this._highestMeasuredFrameIndex,\n index,\n });\n return;\n }\n const frame = this._getFrameMetricsApprox(index);\n const offset =\n Math.max(\n 0,\n frame.offset -\n (viewPosition || 0) *\n (this._scrollMetrics.visibleLength - frame.length),\n ) - (viewOffset || 0);\n\n if (this._scrollRef == null) {\n return;\n }\n\n if (this._scrollRef.scrollTo == null) {\n console.warn(\n 'No scrollTo method provided. This may be because you have two nested ' +\n 'VirtualizedLists with the same orientation, or because you are ' +\n 'using a custom component that does not implement scrollTo.',\n );\n return;\n }\n\n this._scrollRef.scrollTo(\n horizontal ? {x: offset, animated} : {y: offset, animated},\n );\n }\n\n // scrollToItem may be janky without getItemLayout prop. Required linear scan through items -\n // use scrollToIndex instead if possible.\n scrollToItem(params: {\n animated?: ?boolean,\n item: Item,\n viewPosition?: number,\n ...\n }) {\n const {item} = params;\n const {data, getItem, getItemCount} = this.props;\n const itemCount = getItemCount(data);\n for (let index = 0; index < itemCount; index++) {\n if (getItem(data, index) === item) {\n this.scrollToIndex({...params, index});\n break;\n }\n }\n }\n\n /**\n * Scroll to a specific content pixel offset in the list.\n *\n * Param `offset` expects the offset to scroll to.\n * In case of `horizontal` is true, the offset is the x-value,\n * in any other case the offset is the y-value.\n *\n * Param `animated` (`true` by default) defines whether the list\n * should do an animation while scrolling.\n */\n scrollToOffset(params: {animated?: ?boolean, offset: number, ...}) {\n const {animated, offset} = params;\n\n if (this._scrollRef == null) {\n return;\n }\n\n if (this._scrollRef.scrollTo == null) {\n console.warn(\n 'No scrollTo method provided. This may be because you have two nested ' +\n 'VirtualizedLists with the same orientation, or because you are ' +\n 'using a custom component that does not implement scrollTo.',\n );\n return;\n }\n\n this._scrollRef.scrollTo(\n horizontalOrDefault(this.props.horizontal)\n ? {x: offset, animated}\n : {y: offset, animated},\n );\n }\n\n recordInteraction() {\n this._nestedChildLists.forEach(childList => {\n childList.ref && childList.ref.recordInteraction();\n });\n this._viewabilityTuples.forEach(t => {\n t.viewabilityHelper.recordInteraction();\n });\n this._updateViewableItems(this.props.data);\n }\n\n flashScrollIndicators() {\n if (this._scrollRef == null) {\n return;\n }\n\n this._scrollRef.flashScrollIndicators();\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n * Note that `this._scrollRef` might not be a `ScrollView`, so we\n * need to check that it responds to `getScrollResponder` before calling it.\n */\n getScrollResponder(): ?ScrollResponderType {\n if (this._scrollRef && this._scrollRef.getScrollResponder) {\n return this._scrollRef.getScrollResponder();\n }\n }\n\n getScrollableNode(): ?number {\n if (this._scrollRef && this._scrollRef.getScrollableNode) {\n return this._scrollRef.getScrollableNode();\n } else {\n return ReactNative.findNodeHandle(this._scrollRef);\n }\n }\n\n getScrollRef():\n | ?React.ElementRef\n | ?React.ElementRef {\n if (this._scrollRef && this._scrollRef.getScrollRef) {\n return this._scrollRef.getScrollRef();\n } else {\n return this._scrollRef;\n }\n }\n\n setNativeProps(props: Object) {\n if (this._scrollRef) {\n this._scrollRef.setNativeProps(props);\n }\n }\n\n _getCellKey(): string {\n return this.context?.cellKey || 'rootList';\n }\n\n _getListKey(): string {\n return this.props.listKey || this._getCellKey();\n }\n\n _getDebugInfo(): ListDebugInfo {\n return {\n listKey: this._getListKey(),\n cellKey: this._getCellKey(),\n horizontal: horizontalOrDefault(this.props.horizontal),\n parent: this.context?.debugInfo,\n };\n }\n\n _getScrollMetrics = () => {\n return this._scrollMetrics;\n };\n\n hasMore(): boolean {\n return this._hasMore;\n }\n\n _getOutermostParentListRef = () => {\n if (this._isNestedWithSameOrientation()) {\n return this.context.getOutermostParentListRef();\n } else {\n return this;\n }\n };\n\n _getNestedChildState = (key: string): ?ChildListState => {\n const existingChildData = this._nestedChildLists.get(key);\n return existingChildData && existingChildData.state;\n };\n\n _registerAsNestedChild = (childList: {\n cellKey: string,\n key: string,\n ref: VirtualizedList,\n parentDebugInfo: ListDebugInfo,\n ...\n }): ?ChildListState => {\n // Register the mapping between this child key and the cellKey for its cell\n const childListsInCell =\n this._cellKeysToChildListKeys.get(childList.cellKey) || new Set();\n childListsInCell.add(childList.key);\n this._cellKeysToChildListKeys.set(childList.cellKey, childListsInCell);\n const existingChildData = this._nestedChildLists.get(childList.key);\n if (existingChildData && existingChildData.ref !== null) {\n console.error(\n 'A VirtualizedList contains a cell which itself contains ' +\n 'more than one VirtualizedList of the same orientation as the parent ' +\n 'list. You must pass a unique listKey prop to each sibling list.\\n\\n' +\n describeNestedLists({\n ...childList,\n // We're called from the child's componentDidMount, so it's safe to\n // read the child's props here (albeit weird).\n horizontal: !!childList.ref.props.horizontal,\n }),\n );\n }\n this._nestedChildLists.set(childList.key, {\n ref: childList.ref,\n state: null,\n });\n\n if (this._hasInteracted) {\n childList.ref.recordInteraction();\n }\n };\n\n _unregisterAsNestedChild = (childList: {\n key: string,\n state: ChildListState,\n ...\n }): void => {\n this._nestedChildLists.set(childList.key, {\n ref: null,\n state: childList.state,\n });\n };\n\n state: State;\n\n constructor(props: Props) {\n super(props);\n invariant(\n // $FlowFixMe[prop-missing]\n !props.onScroll || !props.onScroll.__isNative,\n 'Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent ' +\n 'to support native onScroll events with useNativeDriver',\n );\n invariant(\n windowSizeOrDefault(props.windowSize) > 0,\n 'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.',\n );\n\n this._fillRateHelper = new FillRateHelper(this._getFrameMetrics);\n this._updateCellsToRenderBatcher = new Batchinator(\n this._updateCellsToRender,\n this.props.updateCellsBatchingPeriod ?? 50,\n );\n\n if (this.props.viewabilityConfigCallbackPairs) {\n this._viewabilityTuples = this.props.viewabilityConfigCallbackPairs.map(\n pair => ({\n viewabilityHelper: new ViewabilityHelper(pair.viewabilityConfig),\n onViewableItemsChanged: pair.onViewableItemsChanged,\n }),\n );\n } else if (this.props.onViewableItemsChanged) {\n this._viewabilityTuples.push({\n viewabilityHelper: new ViewabilityHelper(this.props.viewabilityConfig),\n // $FlowFixMe[incompatible-call]\n onViewableItemsChanged: this.props.onViewableItemsChanged,\n });\n }\n\n let initialState = {\n first: this.props.initialScrollIndex || 0,\n last:\n Math.min(\n this.props.getItemCount(this.props.data),\n (this.props.initialScrollIndex || 0) +\n initialNumToRenderOrDefault(this.props.initialNumToRender),\n ) - 1,\n };\n\n if (this._isNestedWithSameOrientation()) {\n const storedState = this.context.getNestedChildState(this._getListKey());\n if (storedState) {\n initialState = storedState;\n this.state = storedState;\n this._frames = storedState.frames;\n }\n }\n\n this.state = initialState;\n }\n\n componentDidMount() {\n if (this._isNestedWithSameOrientation()) {\n this.context.registerAsNestedChild({\n cellKey: this._getCellKey(),\n key: this._getListKey(),\n ref: this,\n // NOTE: When the child mounts (here) it's not necessarily safe to read\n // the parent's props. This is why we explicitly propagate debugInfo\n // \"down\" via context and \"up\" again via this method call on the\n // parent.\n parentDebugInfo: this.context.debugInfo,\n });\n }\n }\n\n componentWillUnmount() {\n if (this._isNestedWithSameOrientation()) {\n this.context.unregisterAsNestedChild({\n key: this._getListKey(),\n state: {\n first: this.state.first,\n last: this.state.last,\n frames: this._frames,\n },\n });\n }\n this._updateViewableItems(null);\n this._updateCellsToRenderBatcher.dispose({abort: true});\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.dispose();\n });\n this._fillRateHelper.deactivateAndFlush();\n }\n\n static getDerivedStateFromProps(newProps: Props, prevState: State): State {\n const {data, getItemCount} = newProps;\n const maxToRenderPerBatch = maxToRenderPerBatchOrDefault(\n newProps.maxToRenderPerBatch,\n );\n // first and last could be stale (e.g. if a new, shorter items props is passed in), so we make\n // sure we're rendering a reasonable range here.\n return {\n first: Math.max(\n 0,\n Math.min(prevState.first, getItemCount(data) - 1 - maxToRenderPerBatch),\n ),\n last: Math.max(0, Math.min(prevState.last, getItemCount(data) - 1)),\n };\n }\n\n _pushCells(\n cells: Array,\n stickyHeaderIndices: Array,\n stickyIndicesFromProps: Set,\n first: number,\n last: number,\n inversionStyle: ViewStyleProp,\n ) {\n const {\n CellRendererComponent,\n ItemSeparatorComponent,\n data,\n getItem,\n getItemCount,\n horizontal,\n } = this.props;\n const stickyOffset = this.props.ListHeaderComponent ? 1 : 0;\n const end = getItemCount(data) - 1;\n let prevCellKey;\n last = Math.min(end, last);\n for (let ii = first; ii <= last; ii++) {\n const item = getItem(data, ii);\n const key = this._keyExtractor(item, ii);\n this._indicesToKeys.set(ii, key);\n if (stickyIndicesFromProps.has(ii + stickyOffset)) {\n stickyHeaderIndices.push(cells.length);\n }\n cells.push(\n this._onCellLayout(e, key, ii)}\n onUnmount={this._onCellUnmount}\n parentProps={this.props}\n ref={ref => {\n this._cellRefs[key] = ref;\n }}\n />,\n );\n prevCellKey = key;\n }\n }\n\n _onUpdateSeparators = (keys: Array, newProps: Object) => {\n keys.forEach(key => {\n const ref = key != null && this._cellRefs[key];\n ref && ref.updateSeparatorProps(newProps);\n });\n };\n\n _isVirtualizationDisabled(): boolean {\n return this.props.disableVirtualization || false;\n }\n\n _isNestedWithSameOrientation(): boolean {\n const nestedContext = this.context;\n return !!(\n nestedContext &&\n !!nestedContext.horizontal === horizontalOrDefault(this.props.horizontal)\n );\n }\n\n _getSpacerKey = (isVertical: boolean): string =>\n isVertical ? 'height' : 'width';\n\n _keyExtractor(item: Item, index: number) {\n if (this.props.keyExtractor != null) {\n return this.props.keyExtractor(item, index);\n }\n\n const key = defaultKeyExtractor(item, index);\n if (key === String(index)) {\n _usedIndexForKey = true;\n if (item.type && item.type.displayName) {\n _keylessItemComponentName = item.type.displayName;\n }\n }\n return key;\n }\n\n render(): React.Node {\n if (__DEV__) {\n const flatStyles = flattenStyle(this.props.contentContainerStyle);\n if (flatStyles != null && flatStyles.flexWrap === 'wrap') {\n console.warn(\n '`flexWrap: `wrap`` is not supported with the `VirtualizedList` components.' +\n 'Consider using `numColumns` with `FlatList` instead.',\n );\n }\n }\n const {\n ListEmptyComponent,\n ListFooterComponent,\n ListHeaderComponent,\n } = this.props;\n const {data, horizontal} = this.props;\n const isVirtualizationDisabled = this._isVirtualizationDisabled();\n const inversionStyle = this.props.inverted\n ? horizontalOrDefault(this.props.horizontal)\n ? styles.horizontallyInverted\n : styles.verticallyInverted\n : null;\n const cells = [];\n const stickyIndicesFromProps = new Set(this.props.stickyHeaderIndices);\n const stickyHeaderIndices = [];\n if (ListHeaderComponent) {\n if (stickyIndicesFromProps.has(0)) {\n stickyHeaderIndices.push(0);\n }\n const element = React.isValidElement(ListHeaderComponent) ? (\n ListHeaderComponent\n ) : (\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n \n );\n cells.push(\n \n \n {\n // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n element\n }\n \n ,\n );\n }\n const itemCount = this.props.getItemCount(data);\n if (itemCount > 0) {\n _usedIndexForKey = false;\n _keylessItemComponentName = '';\n const spacerKey = this._getSpacerKey(!horizontal);\n const lastInitialIndex = this.props.initialScrollIndex\n ? -1\n : initialNumToRenderOrDefault(this.props.initialNumToRender) - 1;\n const {first, last} = this.state;\n this._pushCells(\n cells,\n stickyHeaderIndices,\n stickyIndicesFromProps,\n 0,\n lastInitialIndex,\n inversionStyle,\n );\n const firstAfterInitial = Math.max(lastInitialIndex + 1, first);\n if (!isVirtualizationDisabled && first > lastInitialIndex + 1) {\n let insertedStickySpacer = false;\n if (stickyIndicesFromProps.size > 0) {\n const stickyOffset = ListHeaderComponent ? 1 : 0;\n // See if there are any sticky headers in the virtualized space that we need to render.\n for (let ii = firstAfterInitial - 1; ii > lastInitialIndex; ii--) {\n if (stickyIndicesFromProps.has(ii + stickyOffset)) {\n const initBlock = this._getFrameMetricsApprox(lastInitialIndex);\n const stickyBlock = this._getFrameMetricsApprox(ii);\n const leadSpace =\n stickyBlock.offset -\n initBlock.offset -\n (this.props.initialScrollIndex ? 0 : initBlock.length);\n cells.push(\n ,\n );\n this._pushCells(\n cells,\n stickyHeaderIndices,\n stickyIndicesFromProps,\n ii,\n ii,\n inversionStyle,\n );\n const trailSpace =\n this._getFrameMetricsApprox(first).offset -\n (stickyBlock.offset + stickyBlock.length);\n cells.push(\n ,\n );\n insertedStickySpacer = true;\n break;\n }\n }\n }\n if (!insertedStickySpacer) {\n const initBlock = this._getFrameMetricsApprox(lastInitialIndex);\n const firstSpace =\n this._getFrameMetricsApprox(first).offset -\n (initBlock.offset + initBlock.length);\n cells.push(\n ,\n );\n }\n }\n this._pushCells(\n cells,\n stickyHeaderIndices,\n stickyIndicesFromProps,\n firstAfterInitial,\n last,\n inversionStyle,\n );\n if (!this._hasWarned.keys && _usedIndexForKey) {\n console.warn(\n 'VirtualizedList: missing keys for items, make sure to specify a key or id property on each ' +\n 'item or provide a custom keyExtractor.',\n _keylessItemComponentName,\n );\n this._hasWarned.keys = true;\n }\n if (!isVirtualizationDisabled && last < itemCount - 1) {\n const lastFrame = this._getFrameMetricsApprox(last);\n // Without getItemLayout, we limit our tail spacer to the _highestMeasuredFrameIndex to\n // prevent the user for hyperscrolling into un-measured area because otherwise content will\n // likely jump around as it renders in above the viewport.\n const end = this.props.getItemLayout\n ? itemCount - 1\n : Math.min(itemCount - 1, this._highestMeasuredFrameIndex);\n const endFrame = this._getFrameMetricsApprox(end);\n const tailSpacerLength =\n endFrame.offset +\n endFrame.length -\n (lastFrame.offset + lastFrame.length);\n cells.push(\n ,\n );\n }\n } else if (ListEmptyComponent) {\n const element: React.Element = ((React.isValidElement(\n ListEmptyComponent,\n ) ? (\n ListEmptyComponent\n ) : (\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n \n )): any);\n cells.push(\n React.cloneElement(element, {\n key: '$empty',\n onLayout: event => {\n this._onLayoutEmpty(event);\n if (element.props.onLayout) {\n element.props.onLayout(event);\n }\n },\n style: StyleSheet.compose(inversionStyle, element.props.style),\n }),\n );\n }\n if (ListFooterComponent) {\n const element = React.isValidElement(ListFooterComponent) ? (\n ListFooterComponent\n ) : (\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n \n );\n cells.push(\n \n \n {\n // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n element\n }\n \n ,\n );\n }\n const scrollProps = {\n ...this.props,\n onContentSizeChange: this._onContentSizeChange,\n onLayout: this._onLayout,\n onScroll: this._onScroll,\n onScrollBeginDrag: this._onScrollBeginDrag,\n onScrollEndDrag: this._onScrollEndDrag,\n onMomentumScrollBegin: this._onMomentumScrollBegin,\n onMomentumScrollEnd: this._onMomentumScrollEnd,\n scrollEventThrottle: scrollEventThrottleOrDefault(\n this.props.scrollEventThrottle,\n ), // TODO: Android support\n invertStickyHeaders:\n this.props.invertStickyHeaders !== undefined\n ? this.props.invertStickyHeaders\n : this.props.inverted,\n stickyHeaderIndices,\n style: inversionStyle\n ? [inversionStyle, this.props.style]\n : this.props.style,\n };\n\n this._hasMore =\n this.state.last < this.props.getItemCount(this.props.data) - 1;\n\n const innerRet = (\n \n {React.cloneElement(\n (\n this.props.renderScrollComponent ||\n this._defaultRenderScrollComponent\n )(scrollProps),\n {\n ref: this._captureScrollRef,\n },\n cells,\n )}\n \n );\n let ret = innerRet;\n if (__DEV__) {\n ret = (\n \n {scrollContext => {\n if (\n scrollContext != null &&\n !scrollContext.horizontal ===\n !horizontalOrDefault(this.props.horizontal) &&\n !this._hasWarned.nesting &&\n this.context == null\n ) {\n // TODO (T46547044): use React.warn once 16.9 is sync'd: https://github.com/facebook/react/pull/15170\n console.error(\n 'VirtualizedLists should never be nested inside plain ScrollViews with the same ' +\n 'orientation because it can break windowing and other functionality - use another ' +\n 'VirtualizedList-backed container instead.',\n );\n this._hasWarned.nesting = true;\n }\n return innerRet;\n }}\n \n );\n }\n if (this.props.debug) {\n return (\n \n {ret}\n {this._renderDebugOverlay()}\n \n );\n } else {\n return ret;\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n const {data, extraData} = this.props;\n if (data !== prevProps.data || extraData !== prevProps.extraData) {\n // clear the viewableIndices cache to also trigger\n // the onViewableItemsChanged callback with the new data\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.resetViewableIndices();\n });\n }\n // The `this._hiPriInProgress` is guaranteeing a hiPri cell update will only happen\n // once per fiber update. The `_scheduleCellsToRenderUpdate` will set it to true\n // if a hiPri update needs to perform. If `componentDidUpdate` is triggered with\n // `this._hiPriInProgress=true`, means it's triggered by the hiPri update. The\n // `_scheduleCellsToRenderUpdate` will check this condition and not perform\n // another hiPri update.\n const hiPriInProgress = this._hiPriInProgress;\n this._scheduleCellsToRenderUpdate();\n // Make sure setting `this._hiPriInProgress` back to false after `componentDidUpdate`\n // is triggered with `this._hiPriInProgress = true`\n if (hiPriInProgress) {\n this._hiPriInProgress = false;\n }\n }\n\n _averageCellLength = 0;\n // Maps a cell key to the set of keys for all outermost child lists within that cell\n _cellKeysToChildListKeys: Map> = new Map();\n _cellRefs = {};\n _fillRateHelper: FillRateHelper;\n _frames = {};\n _footerLength = 0;\n _hasDoneInitialScroll = false;\n _hasInteracted = false;\n _hasMore = false;\n _hasWarned = {};\n _headerLength = 0;\n _hiPriInProgress: boolean = false; // flag to prevent infinite hiPri cell limit update\n _highestMeasuredFrameIndex = 0;\n _indicesToKeys: Map = new Map();\n _nestedChildLists: Map<\n string,\n {\n ref: ?VirtualizedList,\n state: ?ChildListState,\n ...\n },\n > = new Map();\n _offsetFromParentVirtualizedList: number = 0;\n _prevParentOffset: number = 0;\n _scrollMetrics = {\n contentLength: 0,\n dOffset: 0,\n dt: 10,\n offset: 0,\n timestamp: 0,\n velocity: 0,\n visibleLength: 0,\n };\n _scrollRef: ?React.ElementRef = null;\n _sentEndForContentLength = 0;\n _totalCellLength = 0;\n _totalCellsMeasured = 0;\n _updateCellsToRenderBatcher: Batchinator;\n _viewabilityTuples: Array = [];\n\n _captureScrollRef = ref => {\n this._scrollRef = ref;\n };\n\n _computeBlankness() {\n this._fillRateHelper.computeBlankness(\n this.props,\n this.state,\n this._scrollMetrics,\n );\n }\n\n _defaultRenderScrollComponent = props => {\n const onRefresh = props.onRefresh;\n if (this._isNestedWithSameOrientation()) {\n // $FlowFixMe[prop-missing] - Typing ReactNativeComponent revealed errors\n return ;\n } else if (onRefresh) {\n invariant(\n typeof props.refreshing === 'boolean',\n '`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `' +\n JSON.stringify(props.refreshing ?? 'undefined') +\n '`',\n );\n return (\n // $FlowFixMe[prop-missing] Invalid prop usage\n \n ) : (\n props.refreshControl\n )\n }\n />\n );\n } else {\n // $FlowFixMe[prop-missing] Invalid prop usage\n return ;\n }\n };\n\n _onCellLayout(e, cellKey, index) {\n const layout = e.nativeEvent.layout;\n const next = {\n offset: this._selectOffset(layout),\n length: this._selectLength(layout),\n index,\n inLayout: true,\n };\n const curr = this._frames[cellKey];\n if (\n !curr ||\n next.offset !== curr.offset ||\n next.length !== curr.length ||\n index !== curr.index\n ) {\n this._totalCellLength += next.length - (curr ? curr.length : 0);\n this._totalCellsMeasured += curr ? 0 : 1;\n this._averageCellLength =\n this._totalCellLength / this._totalCellsMeasured;\n this._frames[cellKey] = next;\n this._highestMeasuredFrameIndex = Math.max(\n this._highestMeasuredFrameIndex,\n index,\n );\n this._scheduleCellsToRenderUpdate();\n } else {\n this._frames[cellKey].inLayout = true;\n }\n\n this._triggerRemeasureForChildListsInCell(cellKey);\n\n this._computeBlankness();\n this._updateViewableItems(this.props.data);\n }\n\n _onCellUnmount = (cellKey: string) => {\n const curr = this._frames[cellKey];\n if (curr) {\n this._frames[cellKey] = {...curr, inLayout: false};\n }\n };\n\n _triggerRemeasureForChildListsInCell(cellKey: string): void {\n const childListKeys = this._cellKeysToChildListKeys.get(cellKey);\n if (childListKeys) {\n for (let childKey of childListKeys) {\n const childList = this._nestedChildLists.get(childKey);\n childList &&\n childList.ref &&\n childList.ref.measureLayoutRelativeToContainingList();\n }\n }\n }\n\n measureLayoutRelativeToContainingList(): void {\n // TODO (T35574538): findNodeHandle sometimes crashes with \"Unable to find\n // node on an unmounted component\" during scrolling\n try {\n if (!this._scrollRef) {\n return;\n }\n // We are assuming that getOutermostParentListRef().getScrollRef()\n // is a non-null reference to a ScrollView\n this._scrollRef.measureLayout(\n this.context.getOutermostParentListRef().getScrollRef(),\n (x, y, width, height) => {\n this._offsetFromParentVirtualizedList = this._selectOffset({x, y});\n this._scrollMetrics.contentLength = this._selectLength({\n width,\n height,\n });\n const scrollMetrics = this._convertParentScrollMetrics(\n this.context.getScrollMetrics(),\n );\n\n const metricsChanged =\n this._scrollMetrics.visibleLength !== scrollMetrics.visibleLength ||\n this._scrollMetrics.offset !== scrollMetrics.offset;\n\n if (metricsChanged) {\n this._scrollMetrics.visibleLength = scrollMetrics.visibleLength;\n this._scrollMetrics.offset = scrollMetrics.offset;\n\n // If metrics of the scrollView changed, then we triggered remeasure for child list\n // to ensure VirtualizedList has the right information.\n this._cellKeysToChildListKeys.forEach(childListKeys => {\n if (childListKeys) {\n for (let childKey of childListKeys) {\n const childList = this._nestedChildLists.get(childKey);\n childList &&\n childList.ref &&\n childList.ref.measureLayoutRelativeToContainingList();\n }\n }\n });\n }\n },\n error => {\n console.warn(\n \"VirtualizedList: Encountered an error while measuring a list's\" +\n ' offset from its containing VirtualizedList.',\n );\n },\n );\n } catch (error) {\n console.warn(\n 'measureLayoutRelativeToContainingList threw an error',\n error.stack,\n );\n }\n }\n\n _onLayout = (e: Object) => {\n if (this._isNestedWithSameOrientation()) {\n // Need to adjust our scroll metrics to be relative to our containing\n // VirtualizedList before we can make claims about list item viewability\n this.measureLayoutRelativeToContainingList();\n } else {\n this._scrollMetrics.visibleLength = this._selectLength(\n e.nativeEvent.layout,\n );\n }\n this.props.onLayout && this.props.onLayout(e);\n this._scheduleCellsToRenderUpdate();\n this._maybeCallOnEndReached();\n };\n\n _onLayoutEmpty = e => {\n this.props.onLayout && this.props.onLayout(e);\n };\n\n _getFooterCellKey(): string {\n return this._getCellKey() + '-footer';\n }\n\n _onLayoutFooter = e => {\n this._triggerRemeasureForChildListsInCell(this._getFooterCellKey());\n this._footerLength = this._selectLength(e.nativeEvent.layout);\n };\n\n _onLayoutHeader = e => {\n this._headerLength = this._selectLength(e.nativeEvent.layout);\n };\n\n _renderDebugOverlay() {\n const normalize =\n this._scrollMetrics.visibleLength /\n (this._scrollMetrics.contentLength || 1);\n const framesInLayout = [];\n const itemCount = this.props.getItemCount(this.props.data);\n for (let ii = 0; ii < itemCount; ii++) {\n const frame = this._getFrameMetricsApprox(ii);\n /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.68 was deployed. To see the\n * error delete this comment and run Flow. */\n if (frame.inLayout) {\n framesInLayout.push(frame);\n }\n }\n const windowTop = this._getFrameMetricsApprox(this.state.first).offset;\n const frameLast = this._getFrameMetricsApprox(this.state.last);\n const windowLen = frameLast.offset + frameLast.length - windowTop;\n const visTop = this._scrollMetrics.offset;\n const visLen = this._scrollMetrics.visibleLength;\n\n return (\n \n {framesInLayout.map((f, ii) => (\n \n ))}\n \n \n \n );\n }\n\n _selectLength(\n metrics: $ReadOnly<{\n height: number,\n width: number,\n ...\n }>,\n ): number {\n return !horizontalOrDefault(this.props.horizontal)\n ? metrics.height\n : metrics.width;\n }\n\n _selectOffset(\n metrics: $ReadOnly<{\n x: number,\n y: number,\n ...\n }>,\n ): number {\n return !horizontalOrDefault(this.props.horizontal) ? metrics.y : metrics.x;\n }\n\n _maybeCallOnEndReached() {\n const {\n data,\n getItemCount,\n onEndReached,\n onEndReachedThreshold,\n } = this.props;\n const {contentLength, visibleLength, offset} = this._scrollMetrics;\n const distanceFromEnd = contentLength - visibleLength - offset;\n const threshold =\n onEndReachedThreshold != null ? onEndReachedThreshold * visibleLength : 2;\n if (\n onEndReached &&\n this.state.last === getItemCount(data) - 1 &&\n distanceFromEnd < threshold &&\n this._scrollMetrics.contentLength !== this._sentEndForContentLength\n ) {\n // Only call onEndReached once for a given content length\n this._sentEndForContentLength = this._scrollMetrics.contentLength;\n onEndReached({distanceFromEnd});\n } else if (distanceFromEnd > threshold) {\n // If the user scrolls away from the end and back again cause\n // an onEndReached to be triggered again\n this._sentEndForContentLength = 0;\n }\n }\n\n _onContentSizeChange = (width: number, height: number) => {\n if (\n width > 0 &&\n height > 0 &&\n this.props.initialScrollIndex != null &&\n this.props.initialScrollIndex > 0 &&\n !this._hasDoneInitialScroll\n ) {\n if (this.props.contentOffset == null) {\n this.scrollToIndex({\n animated: false,\n index: this.props.initialScrollIndex,\n });\n }\n this._hasDoneInitialScroll = true;\n }\n if (this.props.onContentSizeChange) {\n this.props.onContentSizeChange(width, height);\n }\n this._scrollMetrics.contentLength = this._selectLength({height, width});\n this._scheduleCellsToRenderUpdate();\n this._maybeCallOnEndReached();\n };\n\n /* Translates metrics from a scroll event in a parent VirtualizedList into\n * coordinates relative to the child list.\n */\n _convertParentScrollMetrics = (metrics: {\n visibleLength: number,\n offset: number,\n ...\n }) => {\n // Offset of the top of the nested list relative to the top of its parent's viewport\n const offset = metrics.offset - this._offsetFromParentVirtualizedList;\n // Child's visible length is the same as its parent's\n const visibleLength = metrics.visibleLength;\n const dOffset = offset - this._scrollMetrics.offset;\n const contentLength = this._scrollMetrics.contentLength;\n\n return {\n visibleLength,\n contentLength,\n offset,\n dOffset,\n };\n };\n\n _onScroll = (e: Object) => {\n this._nestedChildLists.forEach(childList => {\n childList.ref && childList.ref._onScroll(e);\n });\n if (this.props.onScroll) {\n this.props.onScroll(e);\n }\n const timestamp = e.timeStamp;\n let visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement);\n let contentLength = this._selectLength(e.nativeEvent.contentSize);\n let offset = this._selectOffset(e.nativeEvent.contentOffset);\n let dOffset = offset - this._scrollMetrics.offset;\n\n if (this._isNestedWithSameOrientation()) {\n if (this._scrollMetrics.contentLength === 0) {\n // Ignore scroll events until onLayout has been called and we\n // know our offset from our offset from our parent\n return;\n }\n ({\n visibleLength,\n contentLength,\n offset,\n dOffset,\n } = this._convertParentScrollMetrics({\n visibleLength,\n offset,\n }));\n }\n\n const dt = this._scrollMetrics.timestamp\n ? Math.max(1, timestamp - this._scrollMetrics.timestamp)\n : 1;\n const velocity = dOffset / dt;\n\n if (\n dt > 500 &&\n this._scrollMetrics.dt > 500 &&\n contentLength > 5 * visibleLength &&\n !this._hasWarned.perf\n ) {\n infoLog(\n 'VirtualizedList: You have a large list that is slow to update - make sure your ' +\n 'renderItem function renders components that follow React performance best practices ' +\n 'like PureComponent, shouldComponentUpdate, etc.',\n {dt, prevDt: this._scrollMetrics.dt, contentLength},\n );\n this._hasWarned.perf = true;\n }\n this._scrollMetrics = {\n contentLength,\n dt,\n dOffset,\n offset,\n timestamp,\n velocity,\n visibleLength,\n };\n this._updateViewableItems(this.props.data);\n if (!this.props) {\n return;\n }\n this._maybeCallOnEndReached();\n if (velocity !== 0) {\n this._fillRateHelper.activate();\n }\n this._computeBlankness();\n this._scheduleCellsToRenderUpdate();\n };\n\n _scheduleCellsToRenderUpdate() {\n const {first, last} = this.state;\n const {offset, visibleLength, velocity} = this._scrollMetrics;\n const itemCount = this.props.getItemCount(this.props.data);\n let hiPri = false;\n const onEndReachedThreshold = onEndReachedThresholdOrDefault(\n this.props.onEndReachedThreshold,\n );\n const scrollingThreshold = (onEndReachedThreshold * visibleLength) / 2;\n // Mark as high priority if we're close to the start of the first item\n // But only if there are items before the first rendered item\n if (first > 0) {\n const distTop = offset - this._getFrameMetricsApprox(first).offset;\n hiPri =\n hiPri || distTop < 0 || (velocity < -2 && distTop < scrollingThreshold);\n }\n // Mark as high priority if we're close to the end of the last item\n // But only if there are items after the last rendered item\n if (last < itemCount - 1) {\n const distBottom =\n this._getFrameMetricsApprox(last).offset - (offset + visibleLength);\n hiPri =\n hiPri ||\n distBottom < 0 ||\n (velocity > 2 && distBottom < scrollingThreshold);\n }\n // Only trigger high-priority updates if we've actually rendered cells,\n // and with that size estimate, accurately compute how many cells we should render.\n // Otherwise, it would just render as many cells as it can (of zero dimension),\n // each time through attempting to render more (limited by maxToRenderPerBatch),\n // starving the renderer from actually laying out the objects and computing _averageCellLength.\n // If this is triggered in an `componentDidUpdate` followed by a hiPri cellToRenderUpdate\n // We shouldn't do another hipri cellToRenderUpdate\n if (\n hiPri &&\n (this._averageCellLength || this.props.getItemLayout) &&\n !this._hiPriInProgress\n ) {\n this._hiPriInProgress = true;\n // Don't worry about interactions when scrolling quickly; focus on filling content as fast\n // as possible.\n this._updateCellsToRenderBatcher.dispose({abort: true});\n this._updateCellsToRender();\n return;\n } else {\n this._updateCellsToRenderBatcher.schedule();\n }\n }\n\n _onScrollBeginDrag = (e): void => {\n this._nestedChildLists.forEach(childList => {\n childList.ref && childList.ref._onScrollBeginDrag(e);\n });\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.recordInteraction();\n });\n this._hasInteracted = true;\n this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n };\n\n _onScrollEndDrag = (e): void => {\n this._nestedChildLists.forEach(childList => {\n childList.ref && childList.ref._onScrollEndDrag(e);\n });\n const {velocity} = e.nativeEvent;\n if (velocity) {\n this._scrollMetrics.velocity = this._selectOffset(velocity);\n }\n this._computeBlankness();\n this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n };\n\n _onMomentumScrollBegin = (e): void => {\n this._nestedChildLists.forEach(childList => {\n childList.ref && childList.ref._onMomentumScrollBegin(e);\n });\n this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n };\n\n _onMomentumScrollEnd = (e): void => {\n this._nestedChildLists.forEach(childList => {\n childList.ref && childList.ref._onMomentumScrollEnd(e);\n });\n this._scrollMetrics.velocity = 0;\n this._computeBlankness();\n this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n };\n\n _updateCellsToRender = () => {\n const {\n data,\n getItemCount,\n onEndReachedThreshold: _onEndReachedThreshold,\n } = this.props;\n const onEndReachedThreshold = onEndReachedThresholdOrDefault(\n _onEndReachedThreshold,\n );\n const isVirtualizationDisabled = this._isVirtualizationDisabled();\n this._updateViewableItems(data);\n if (!data) {\n return;\n }\n this.setState(state => {\n let newState;\n const {contentLength, offset, visibleLength} = this._scrollMetrics;\n if (!isVirtualizationDisabled) {\n // If we run this with bogus data, we'll force-render window {first: 0, last: 0},\n // and wipe out the initialNumToRender rendered elements.\n // So let's wait until the scroll view metrics have been set up. And until then,\n // we will trust the initialNumToRender suggestion\n if (visibleLength > 0 && contentLength > 0) {\n // If we have a non-zero initialScrollIndex and run this before we've scrolled,\n // we'll wipe out the initialNumToRender rendered elements starting at initialScrollIndex.\n // So let's wait until we've scrolled the view to the right place. And until then,\n // we will trust the initialScrollIndex suggestion.\n if (!this.props.initialScrollIndex || this._scrollMetrics.offset) {\n newState = computeWindowedRenderLimits(\n this.props.data,\n this.props.getItemCount,\n maxToRenderPerBatchOrDefault(this.props.maxToRenderPerBatch),\n windowSizeOrDefault(this.props.windowSize),\n state,\n this._getFrameMetricsApprox,\n this._scrollMetrics,\n );\n }\n }\n } else {\n const distanceFromEnd = contentLength - visibleLength - offset;\n const renderAhead =\n distanceFromEnd < onEndReachedThreshold * visibleLength\n ? maxToRenderPerBatchOrDefault(this.props.maxToRenderPerBatch)\n : 0;\n newState = {\n first: 0,\n last: Math.min(state.last + renderAhead, getItemCount(data) - 1),\n };\n }\n if (newState && this._nestedChildLists.size > 0) {\n const newFirst = newState.first;\n const newLast = newState.last;\n // If some cell in the new state has a child list in it, we should only render\n // up through that item, so that we give that list a chance to render.\n // Otherwise there's churn from multiple child lists mounting and un-mounting\n // their items.\n for (let ii = newFirst; ii <= newLast; ii++) {\n const cellKeyForIndex = this._indicesToKeys.get(ii);\n const childListKeys =\n cellKeyForIndex &&\n this._cellKeysToChildListKeys.get(cellKeyForIndex);\n if (!childListKeys) {\n continue;\n }\n let someChildHasMore = false;\n // For each cell, need to check whether any child list in it has more elements to render\n for (let childKey of childListKeys) {\n const childList = this._nestedChildLists.get(childKey);\n if (childList && childList.ref && childList.ref.hasMore()) {\n someChildHasMore = true;\n break;\n }\n }\n if (someChildHasMore) {\n // $FlowFixMe[incompatible-use]\n newState.last = ii;\n break;\n }\n }\n }\n if (\n newState != null &&\n newState.first === state.first &&\n newState.last === state.last\n ) {\n newState = null;\n }\n return newState;\n });\n };\n\n _createViewToken = (index: number, isViewable: boolean) => {\n const {data, getItem} = this.props;\n const item = getItem(data, index);\n return {index, item, key: this._keyExtractor(item, index), isViewable};\n };\n\n _getFrameMetricsApprox = (\n index: number,\n ): {\n length: number,\n offset: number,\n ...\n } => {\n const frame = this._getFrameMetrics(index);\n if (frame && frame.index === index) {\n // check for invalid frames due to row re-ordering\n return frame;\n } else {\n const {getItemLayout} = this.props;\n invariant(\n !getItemLayout,\n 'Should not have to estimate frames when a measurement metrics function is provided',\n );\n return {\n length: this._averageCellLength,\n offset: this._averageCellLength * index,\n };\n }\n };\n\n _getFrameMetrics = (\n index: number,\n ): ?{\n length: number,\n offset: number,\n index: number,\n inLayout?: boolean,\n ...\n } => {\n const {data, getItem, getItemCount, getItemLayout} = this.props;\n invariant(\n getItemCount(data) > index,\n 'Tried to get frame for out of range index ' + index,\n );\n const item = getItem(data, index);\n let frame = item && this._frames[this._keyExtractor(item, index)];\n if (!frame || frame.index !== index) {\n if (getItemLayout) {\n frame = getItemLayout(data, index);\n }\n }\n /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.63 was deployed. To see the error\n * delete this comment and run Flow. */\n return frame;\n };\n\n _updateViewableItems(data: any) {\n const {getItemCount} = this.props;\n\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.onUpdate(\n getItemCount(data),\n this._scrollMetrics.offset,\n this._scrollMetrics.visibleLength,\n this._getFrameMetrics,\n this._createViewToken,\n tuple.onViewableItemsChanged,\n this.state,\n );\n });\n }\n}\n\ntype CellRendererProps = {\n CellRendererComponent?: ?React.ComponentType,\n ItemSeparatorComponent: ?React.ComponentType<\n any | {highlighted: boolean, leadingItem: ?Item},\n >,\n cellKey: string,\n fillRateHelper: FillRateHelper,\n horizontal: ?boolean,\n index: number,\n inversionStyle: ViewStyleProp,\n item: Item,\n // This is extracted by ScrollViewStickyHeader\n onLayout: (event: Object) => void,\n onUnmount: (cellKey: string) => void,\n onUpdateSeparators: (cellKeys: Array, props: Object) => void,\n parentProps: {\n // e.g. height, y,\n getItemLayout?: (\n data: any,\n index: number,\n ) => {\n length: number,\n offset: number,\n index: number,\n ...\n },\n renderItem?: ?RenderItemType,\n ListItemComponent?: ?(React.ComponentType | React.Element),\n ...\n },\n prevCellKey: ?string,\n ...\n};\n\ntype CellRendererState = {\n separatorProps: $ReadOnly<{|\n highlighted: boolean,\n leadingItem: ?Item,\n |}>,\n ...\n};\n\nclass CellRenderer extends React.Component<\n CellRendererProps,\n CellRendererState,\n> {\n state = {\n separatorProps: {\n highlighted: false,\n leadingItem: this.props.item,\n },\n };\n\n static getDerivedStateFromProps(\n props: CellRendererProps,\n prevState: CellRendererState,\n ): ?CellRendererState {\n return {\n separatorProps: {\n ...prevState.separatorProps,\n leadingItem: props.item,\n },\n };\n }\n\n // TODO: consider factoring separator stuff out of VirtualizedList into FlatList since it's not\n // reused by SectionList and we can keep VirtualizedList simpler.\n _separators = {\n highlight: () => {\n const {cellKey, prevCellKey} = this.props;\n this.props.onUpdateSeparators([cellKey, prevCellKey], {\n highlighted: true,\n });\n },\n unhighlight: () => {\n const {cellKey, prevCellKey} = this.props;\n this.props.onUpdateSeparators([cellKey, prevCellKey], {\n highlighted: false,\n });\n },\n updateProps: (select: 'leading' | 'trailing', newProps: Object) => {\n const {cellKey, prevCellKey} = this.props;\n this.props.onUpdateSeparators(\n [select === 'leading' ? prevCellKey : cellKey],\n newProps,\n );\n },\n };\n\n updateSeparatorProps(newProps: Object) {\n this.setState(state => ({\n separatorProps: {...state.separatorProps, ...newProps},\n }));\n }\n\n componentWillUnmount() {\n this.props.onUnmount(this.props.cellKey);\n }\n\n _renderElement(renderItem, ListItemComponent, item, index) {\n if (renderItem && ListItemComponent) {\n console.warn(\n 'VirtualizedList: Both ListItemComponent and renderItem props are present. ListItemComponent will take' +\n ' precedence over renderItem.',\n );\n }\n\n if (ListItemComponent) {\n /* $FlowFixMe[not-a-component] (>=0.108.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.108 was deployed. To\n * see the error, delete this comment and run Flow. */\n /* $FlowFixMe[incompatible-type-arg] (>=0.108.0 site=react_native_fb)\n * This comment suppresses an error found when Flow v0.108 was deployed.\n * To see the error, delete this comment and run Flow. */\n return React.createElement(ListItemComponent, {\n item,\n index,\n separators: this._separators,\n });\n }\n\n if (renderItem) {\n return renderItem({\n item,\n index,\n separators: this._separators,\n });\n }\n\n invariant(\n false,\n 'VirtualizedList: Either ListItemComponent or renderItem props are required but none were found.',\n );\n }\n\n render() {\n const {\n CellRendererComponent,\n ItemSeparatorComponent,\n fillRateHelper,\n horizontal,\n item,\n index,\n inversionStyle,\n parentProps,\n } = this.props;\n const {renderItem, getItemLayout, ListItemComponent} = parentProps;\n const element = this._renderElement(\n renderItem,\n ListItemComponent,\n item,\n index,\n );\n\n const onLayout =\n /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.68 was deployed. To see the\n * error delete this comment and run Flow. */\n getItemLayout && !parentProps.debug && !fillRateHelper.enabled()\n ? undefined\n : this.props.onLayout;\n // NOTE: that when this is a sticky header, `onLayout` will get automatically extracted and\n // called explicitly by `ScrollViewStickyHeader`.\n const itemSeparator = ItemSeparatorComponent && (\n \n );\n const cellStyle = inversionStyle\n ? horizontal\n ? [styles.rowReverse, inversionStyle]\n : [styles.columnReverse, inversionStyle]\n : horizontal\n ? [styles.row, inversionStyle]\n : inversionStyle;\n const result = !CellRendererComponent ? (\n /* $FlowFixMe[incompatible-type-arg] (>=0.89.0 site=react_native_fb) *\n This comment suppresses an error found when Flow v0.89 was deployed. *\n To see the error, delete this comment and run Flow. */\n \n {element}\n {itemSeparator}\n \n ) : (\n \n {element}\n {itemSeparator}\n \n );\n\n return (\n \n {result}\n \n );\n }\n}\n\nfunction describeNestedLists(childList: {\n +cellKey: string,\n +key: string,\n +ref: VirtualizedList,\n +parentDebugInfo: ListDebugInfo,\n +horizontal: boolean,\n ...\n}) {\n let trace =\n 'VirtualizedList trace:\\n' +\n ` Child (${childList.horizontal ? 'horizontal' : 'vertical'}):\\n` +\n ` listKey: ${childList.key}\\n` +\n ` cellKey: ${childList.cellKey}`;\n\n let debugInfo = childList.parentDebugInfo;\n while (debugInfo) {\n trace +=\n `\\n Parent (${debugInfo.horizontal ? 'horizontal' : 'vertical'}):\\n` +\n ` listKey: ${debugInfo.listKey}\\n` +\n ` cellKey: ${debugInfo.cellKey}`;\n debugInfo = debugInfo.parent;\n }\n return trace;\n}\n\nconst styles = StyleSheet.create({\n verticallyInverted: {\n transform: [{scaleY: -1}],\n },\n horizontallyInverted: {\n transform: [{scaleX: -1}],\n },\n row: {\n flexDirection: 'row',\n },\n rowReverse: {\n flexDirection: 'row-reverse',\n },\n columnReverse: {\n flexDirection: 'column-reverse',\n },\n debug: {\n flex: 1,\n },\n debugOverlayBase: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n debugOverlay: {\n bottom: 0,\n width: 20,\n borderColor: 'blue',\n borderWidth: 1,\n },\n debugOverlayFrame: {\n left: 0,\n backgroundColor: 'orange',\n },\n debugOverlayFrameLast: {\n left: 0,\n borderColor: 'green',\n borderWidth: 2,\n },\n debugOverlayFrameVis: {\n left: 0,\n borderColor: 'red',\n borderWidth: 2,\n },\n});\n\nmodule.exports = VirtualizedList;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type VirtualizedList from './VirtualizedList.js';\nimport * as React from 'react';\nimport {useMemo, useContext} from 'react';\n\ntype Frame = $ReadOnly<{\n offset: number,\n length: number,\n index: number,\n inLayout: boolean,\n}>;\n\nexport type ChildListState = $ReadOnly<{\n first: number,\n last: number,\n frames: {[key: number]: Frame},\n}>;\n\n// Data propagated through nested lists (regardless of orientation) that is\n// useful for producing diagnostics for usage errors involving nesting (e.g\n// missing/duplicate keys).\nexport type ListDebugInfo = $ReadOnly<{\n cellKey: string,\n listKey: string,\n parent: ?ListDebugInfo,\n // We include all ancestors regardless of orientation, so this is not always\n // identical to the child's orientation.\n horizontal: boolean,\n}>;\n\ntype Context = $ReadOnly<{\n cellKey: ?string,\n getScrollMetrics: () => {\n contentLength: number,\n dOffset: number,\n dt: number,\n offset: number,\n timestamp: number,\n velocity: number,\n visibleLength: number,\n },\n horizontal: ?boolean,\n getOutermostParentListRef: () => VirtualizedList,\n getNestedChildState: string => ?ChildListState,\n registerAsNestedChild: ({\n cellKey: string,\n key: string,\n ref: VirtualizedList,\n parentDebugInfo: ListDebugInfo,\n }) => ?ChildListState,\n unregisterAsNestedChild: ({\n key: string,\n state: ChildListState,\n }) => void,\n debugInfo: ListDebugInfo,\n}>;\n\nexport const VirtualizedListContext: React.Context = React.createContext(\n null,\n);\nif (__DEV__) {\n VirtualizedListContext.displayName = 'VirtualizedListContext';\n}\n\n/**\n * Resets the context. Intended for use by portal-like components (e.g. Modal).\n */\nexport function VirtualizedListContextResetter({\n children,\n}: {\n children: React.Node,\n}): React.Node {\n return (\n \n {children}\n \n );\n}\n\n/**\n * Sets the context with memoization. Intended to be used by `VirtualizedList`.\n */\nexport function VirtualizedListContextProvider({\n children,\n value,\n}: {\n children: React.Node,\n value: Context,\n}): React.Node {\n // Avoid setting a newly created context object if the values are identical.\n const context = useMemo(\n () => ({\n cellKey: null,\n getScrollMetrics: value.getScrollMetrics,\n horizontal: value.horizontal,\n getOutermostParentListRef: value.getOutermostParentListRef,\n getNestedChildState: value.getNestedChildState,\n registerAsNestedChild: value.registerAsNestedChild,\n unregisterAsNestedChild: value.unregisterAsNestedChild,\n debugInfo: {\n cellKey: value.debugInfo.cellKey,\n horizontal: value.debugInfo.horizontal,\n listKey: value.debugInfo.listKey,\n parent: value.debugInfo.parent,\n },\n }),\n [\n value.getScrollMetrics,\n value.horizontal,\n value.getOutermostParentListRef,\n value.getNestedChildState,\n value.registerAsNestedChild,\n value.unregisterAsNestedChild,\n value.debugInfo.cellKey,\n value.debugInfo.horizontal,\n value.debugInfo.listKey,\n value.debugInfo.parent,\n ],\n );\n return (\n \n {children}\n \n );\n}\n\n/**\n * Sets the `cellKey`. Intended to be used by `VirtualizedList` for each cell.\n */\nexport function VirtualizedListCellContextProvider({\n cellKey,\n children,\n}: {\n cellKey: string,\n children: React.Node,\n}): React.Node {\n const context = useContext(VirtualizedListContext);\n return (\n \n {children}\n \n );\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nconst InteractionManager = require('./InteractionManager');\n\n/**\n * A simple class for batching up invocations of a low-pri callback. A timeout is set to run the\n * callback once after a delay, no matter how many times it's scheduled. Once the delay is reached,\n * InteractionManager.runAfterInteractions is used to invoke the callback after any hi-pri\n * interactions are done running.\n *\n * Make sure to cleanup with dispose(). Example:\n *\n * class Widget extends React.Component {\n * _batchedSave: new Batchinator(() => this._saveState, 1000);\n * _saveSate() {\n * // save this.state to disk\n * }\n * componentDidUpdate() {\n * this._batchedSave.schedule();\n * }\n * componentWillUnmount() {\n * this._batchedSave.dispose();\n * }\n * ...\n * }\n */\nclass Batchinator {\n _callback: () => void;\n _delay: number;\n _taskHandle: ?{cancel: () => void, ...};\n constructor(callback: () => void, delayMS: number) {\n this._delay = delayMS;\n this._callback = callback;\n }\n /*\n * Cleanup any pending tasks.\n *\n * By default, if there is a pending task the callback is run immediately. Set the option abort to\n * true to not call the callback if it was pending.\n */\n dispose(options: {abort: boolean, ...} = {abort: false}) {\n if (this._taskHandle) {\n this._taskHandle.cancel();\n if (!options.abort) {\n this._callback();\n }\n this._taskHandle = null;\n }\n }\n schedule() {\n if (this._taskHandle) {\n return;\n }\n const timeoutHandle = setTimeout(() => {\n this._taskHandle = InteractionManager.runAfterInteractions(() => {\n // Note that we clear the handle before invoking the callback so that if the callback calls\n // schedule again, it will actually schedule another task.\n this._taskHandle = null;\n this._callback();\n });\n }, this._delay);\n this._taskHandle = {cancel: () => clearTimeout(timeoutHandle)};\n }\n}\n\nmodule.exports = Batchinator;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nexport type FillRateInfo = Info;\n\nclass Info {\n any_blank_count: number = 0;\n any_blank_ms: number = 0;\n any_blank_speed_sum: number = 0;\n mostly_blank_count: number = 0;\n mostly_blank_ms: number = 0;\n pixels_blank: number = 0;\n pixels_sampled: number = 0;\n pixels_scrolled: number = 0;\n total_time_spent: number = 0;\n sample_count: number = 0;\n}\n\ntype FrameMetrics = {\n inLayout?: boolean,\n length: number,\n offset: number,\n ...\n};\n\nconst DEBUG = false;\n\nlet _listeners: Array<(Info) => void> = [];\nlet _minSampleCount = 10;\nlet _sampleRate = DEBUG ? 1 : null;\n\n/**\n * A helper class for detecting when the maximem fill rate of `VirtualizedList` is exceeded.\n * By default the sampling rate is set to zero and this will do nothing. If you want to collect\n * samples (e.g. to log them), make sure to call `FillRateHelper.setSampleRate(0.0-1.0)`.\n *\n * Listeners and sample rate are global for all `VirtualizedList`s - typical usage will combine with\n * `SceneTracker.getActiveScene` to determine the context of the events.\n */\nclass FillRateHelper {\n _anyBlankStartTime = (null: ?number);\n _enabled = false;\n _getFrameMetrics: (index: number) => ?FrameMetrics;\n _info = new Info();\n _mostlyBlankStartTime = (null: ?number);\n _samplesStartTime = (null: ?number);\n\n static addListener(\n callback: FillRateInfo => void,\n ): {remove: () => void, ...} {\n if (_sampleRate === null) {\n console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.');\n }\n _listeners.push(callback);\n return {\n remove: () => {\n _listeners = _listeners.filter(listener => callback !== listener);\n },\n };\n }\n\n static setSampleRate(sampleRate: number) {\n _sampleRate = sampleRate;\n }\n\n static setMinSampleCount(minSampleCount: number) {\n _minSampleCount = minSampleCount;\n }\n\n constructor(getFrameMetrics: (index: number) => ?FrameMetrics) {\n this._getFrameMetrics = getFrameMetrics;\n this._enabled = (_sampleRate || 0) > Math.random();\n this._resetData();\n }\n\n activate() {\n if (this._enabled && this._samplesStartTime == null) {\n DEBUG && console.debug('FillRateHelper: activate');\n this._samplesStartTime = global.performance.now();\n }\n }\n\n deactivateAndFlush() {\n if (!this._enabled) {\n return;\n }\n const start = this._samplesStartTime; // const for flow\n if (start == null) {\n DEBUG &&\n console.debug('FillRateHelper: bail on deactivate with no start time');\n return;\n }\n if (this._info.sample_count < _minSampleCount) {\n // Don't bother with under-sampled events.\n this._resetData();\n return;\n }\n const total_time_spent = global.performance.now() - start;\n const info: any = {\n ...this._info,\n total_time_spent,\n };\n if (DEBUG) {\n const derived = {\n avg_blankness: this._info.pixels_blank / this._info.pixels_sampled,\n avg_speed: this._info.pixels_scrolled / (total_time_spent / 1000),\n avg_speed_when_any_blank:\n this._info.any_blank_speed_sum / this._info.any_blank_count,\n any_blank_per_min:\n this._info.any_blank_count / (total_time_spent / 1000 / 60),\n any_blank_time_frac: this._info.any_blank_ms / total_time_spent,\n mostly_blank_per_min:\n this._info.mostly_blank_count / (total_time_spent / 1000 / 60),\n mostly_blank_time_frac: this._info.mostly_blank_ms / total_time_spent,\n };\n for (const key in derived) {\n derived[key] = Math.round(1000 * derived[key]) / 1000;\n }\n console.debug('FillRateHelper deactivateAndFlush: ', {derived, info});\n }\n _listeners.forEach(listener => listener(info));\n this._resetData();\n }\n\n computeBlankness(\n props: {\n data: any,\n getItemCount: (data: any) => number,\n initialNumToRender?: ?number,\n ...\n },\n state: {\n first: number,\n last: number,\n ...\n },\n scrollMetrics: {\n dOffset: number,\n offset: number,\n velocity: number,\n visibleLength: number,\n ...\n },\n ): number {\n if (\n !this._enabled ||\n props.getItemCount(props.data) === 0 ||\n this._samplesStartTime == null\n ) {\n return 0;\n }\n const {dOffset, offset, velocity, visibleLength} = scrollMetrics;\n\n // Denominator metrics that we track for all events - most of the time there is no blankness and\n // we want to capture that.\n this._info.sample_count++;\n this._info.pixels_sampled += Math.round(visibleLength);\n this._info.pixels_scrolled += Math.round(Math.abs(dOffset));\n const scrollSpeed = Math.round(Math.abs(velocity) * 1000); // px / sec\n\n // Whether blank now or not, record the elapsed time blank if we were blank last time.\n const now = global.performance.now();\n if (this._anyBlankStartTime != null) {\n this._info.any_blank_ms += now - this._anyBlankStartTime;\n }\n this._anyBlankStartTime = null;\n if (this._mostlyBlankStartTime != null) {\n this._info.mostly_blank_ms += now - this._mostlyBlankStartTime;\n }\n this._mostlyBlankStartTime = null;\n\n let blankTop = 0;\n let first = state.first;\n let firstFrame = this._getFrameMetrics(first);\n while (first <= state.last && (!firstFrame || !firstFrame.inLayout)) {\n firstFrame = this._getFrameMetrics(first);\n first++;\n }\n // Only count blankTop if we aren't rendering the first item, otherwise we will count the header\n // as blank.\n if (firstFrame && first > 0) {\n blankTop = Math.min(\n visibleLength,\n Math.max(0, firstFrame.offset - offset),\n );\n }\n let blankBottom = 0;\n let last = state.last;\n let lastFrame = this._getFrameMetrics(last);\n while (last >= state.first && (!lastFrame || !lastFrame.inLayout)) {\n lastFrame = this._getFrameMetrics(last);\n last--;\n }\n // Only count blankBottom if we aren't rendering the last item, otherwise we will count the\n // footer as blank.\n if (lastFrame && last < props.getItemCount(props.data) - 1) {\n const bottomEdge = lastFrame.offset + lastFrame.length;\n blankBottom = Math.min(\n visibleLength,\n Math.max(0, offset + visibleLength - bottomEdge),\n );\n }\n const pixels_blank = Math.round(blankTop + blankBottom);\n const blankness = pixels_blank / visibleLength;\n if (blankness > 0) {\n this._anyBlankStartTime = now;\n this._info.any_blank_speed_sum += scrollSpeed;\n this._info.any_blank_count++;\n this._info.pixels_blank += pixels_blank;\n if (blankness > 0.5) {\n this._mostlyBlankStartTime = now;\n this._info.mostly_blank_count++;\n }\n } else if (scrollSpeed < 0.01 || Math.abs(dOffset) < 1) {\n this.deactivateAndFlush();\n }\n return blankness;\n }\n\n enabled(): boolean {\n return this._enabled;\n }\n\n _resetData() {\n this._anyBlankStartTime = null;\n this._info = new Info();\n this._mostlyBlankStartTime = null;\n this._samplesStartTime = null;\n }\n}\n\nmodule.exports = FillRateHelper;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nconst Platform = require('../../Utilities/Platform');\nconst React = require('react');\n\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport AndroidSwipeRefreshLayoutNativeComponent, {\n Commands as AndroidSwipeRefreshLayoutCommands,\n} from './AndroidSwipeRefreshLayoutNativeComponent';\nimport PullToRefreshViewNativeComponent, {\n Commands as PullToRefreshCommands,\n} from './PullToRefreshViewNativeComponent';\n\ntype IOSProps = $ReadOnly<{|\n /**\n * The color of the refresh indicator.\n */\n tintColor?: ?ColorValue,\n /**\n * Title color.\n */\n titleColor?: ?ColorValue,\n /**\n * The title displayed under the refresh indicator.\n */\n title?: ?string,\n|}>;\n\ntype AndroidProps = $ReadOnly<{|\n /**\n * Whether the pull to refresh functionality is enabled.\n */\n enabled?: ?boolean,\n /**\n * The colors (at least one) that will be used to draw the refresh indicator.\n */\n colors?: ?$ReadOnlyArray,\n /**\n * The background color of the refresh indicator.\n */\n progressBackgroundColor?: ?ColorValue,\n /**\n * Size of the refresh indicator.\n */\n size?: ?('default' | 'large'),\n|}>;\n\nexport type RefreshControlProps = $ReadOnly<{|\n ...ViewProps,\n ...IOSProps,\n ...AndroidProps,\n\n /**\n * Called when the view starts refreshing.\n */\n onRefresh?: ?() => void | Promise,\n\n /**\n * Whether the view should be indicating an active refresh.\n */\n refreshing: boolean,\n\n /**\n * Progress view top offset\n */\n progressViewOffset?: ?number,\n|}>;\n\n/**\n * This component is used inside a ScrollView or ListView to add pull to refresh\n * functionality. When the ScrollView is at `scrollY: 0`, swiping down\n * triggers an `onRefresh` event.\n *\n * ### Usage example\n *\n * ``` js\n * class RefreshableList extends Component {\n * constructor(props) {\n * super(props);\n * this.state = {\n * refreshing: false,\n * };\n * }\n *\n * _onRefresh() {\n * this.setState({refreshing: true});\n * fetchData().then(() => {\n * this.setState({refreshing: false});\n * });\n * }\n *\n * render() {\n * return (\n * \n * }\n * ...\n * >\n * ...\n * \n * );\n * }\n * ...\n * }\n * ```\n *\n * __Note:__ `refreshing` is a controlled prop, this is why it needs to be set to true\n * in the `onRefresh` function otherwise the refresh indicator will stop immediately.\n */\nclass RefreshControl extends React.Component {\n _nativeRef: ?React.ElementRef<\n | typeof PullToRefreshViewNativeComponent\n | typeof AndroidSwipeRefreshLayoutNativeComponent,\n >;\n _lastNativeRefreshing = false;\n\n componentDidMount() {\n this._lastNativeRefreshing = this.props.refreshing;\n }\n\n componentDidUpdate(prevProps: RefreshControlProps) {\n // RefreshControl is a controlled component so if the native refreshing\n // value doesn't match the current js refreshing prop update it to\n // the js value.\n if (this.props.refreshing !== prevProps.refreshing) {\n this._lastNativeRefreshing = this.props.refreshing;\n } else if (\n this.props.refreshing !== this._lastNativeRefreshing &&\n this._nativeRef\n ) {\n if (Platform.OS === 'android') {\n AndroidSwipeRefreshLayoutCommands.setNativeRefreshing(\n this._nativeRef,\n this.props.refreshing,\n );\n } else {\n PullToRefreshCommands.setNativeRefreshing(\n this._nativeRef,\n this.props.refreshing,\n );\n }\n this._lastNativeRefreshing = this.props.refreshing;\n }\n }\n\n render(): React.Node {\n if (Platform.OS === 'ios') {\n const {\n enabled,\n colors,\n progressBackgroundColor,\n size,\n ...props\n } = this.props;\n return (\n \n );\n } else {\n const {tintColor, titleColor, title, ...props} = this.props;\n return (\n \n );\n }\n }\n\n _onRefresh = () => {\n this._lastNativeRefreshing = true;\n\n this.props.onRefresh && this.props.onRefresh();\n\n // The native component will start refreshing so force an update to\n // make sure it stays in sync with the js component.\n this.forceUpdate();\n };\n\n _setNativeRef = (\n ref: ?React.ElementRef<\n | typeof PullToRefreshViewNativeComponent\n | typeof AndroidSwipeRefreshLayoutNativeComponent,\n >,\n ) => {\n this._nativeRef = ref;\n };\n}\n\nmodule.exports = RefreshControl;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport * as React from 'react';\n\nimport codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\nimport type {\n DirectEventHandler,\n Float,\n Int32,\n WithDefault,\n} from '../../Types/CodegenTypes';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n /**\n * Whether the pull to refresh functionality is enabled.\n */\n enabled?: WithDefault,\n /**\n * The colors (at least one) that will be used to draw the refresh indicator.\n */\n colors?: ?$ReadOnlyArray,\n /**\n * The background color of the refresh indicator.\n */\n progressBackgroundColor?: ?ColorValue,\n /**\n * Size of the refresh indicator.\n */\n size?: WithDefault<'default' | 'large', 'default'>,\n /**\n * Progress view top offset\n */\n progressViewOffset?: WithDefault,\n\n /**\n * Called when the view starts refreshing.\n */\n onRefresh?: ?DirectEventHandler,\n\n /**\n * Whether the view should be indicating an active refresh.\n */\n refreshing: boolean,\n|}>;\n\ntype NativeType = HostComponent;\n\ninterface NativeCommands {\n +setNativeRefreshing: (\n viewRef: React.ElementRef,\n value: boolean,\n ) => void;\n}\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['setNativeRefreshing'],\n});\n\nexport default (codegenNativeComponent(\n 'AndroidSwipeRefreshLayout',\n): NativeType);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {\n DirectEventHandler,\n Float,\n WithDefault,\n} from '../../Types/CodegenTypes';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport * as React from 'react';\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n /**\n * The color of the refresh indicator.\n */\n tintColor?: ?ColorValue,\n /**\n * Title color.\n */\n titleColor?: ?ColorValue,\n /**\n * The title displayed under the refresh indicator.\n */\n title?: WithDefault,\n /**\n * Progress view top offset\n */\n progressViewOffset?: WithDefault,\n\n /**\n * Called when the view starts refreshing.\n */\n onRefresh?: ?DirectEventHandler,\n\n /**\n * Whether the view should be indicating an active refresh.\n */\n refreshing: boolean,\n|}>;\n\ntype ComponentType = HostComponent;\n\ninterface NativeCommands {\n +setNativeRefreshing: (\n viewRef: React.ElementRef,\n refreshing: boolean,\n ) => void;\n}\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['setNativeRefreshing'],\n});\n\nexport default (codegenNativeComponent('PullToRefreshView', {\n paperComponentName: 'RCTRefreshControl',\n excludedPlatforms: ['android'],\n}): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport AnimatedImplementation from '../../Animated/AnimatedImplementation';\nimport Dimensions from '../../Utilities/Dimensions';\nimport Platform from '../../Utilities/Platform';\nimport * as React from 'react';\nimport ReactNative from '../../Renderer/shims/ReactNative';\nrequire('../../Renderer/shims/ReactNative'); // Force side effects to prevent T55744311\nimport ScrollViewStickyHeader from './ScrollViewStickyHeader';\nimport StyleSheet from '../../StyleSheet/StyleSheet';\nimport View from '../View/View';\nimport UIManager from '../../ReactNative/UIManager';\nimport Keyboard from '../Keyboard/Keyboard';\nimport FrameRateLogger from '../../Interaction/FrameRateLogger';\nimport TextInputState from '../TextInput/TextInputState';\n\nimport dismissKeyboard from '../../Utilities/dismissKeyboard';\nimport flattenStyle from '../../StyleSheet/flattenStyle';\nimport invariant from 'invariant';\nimport processDecelerationRate from './processDecelerationRate';\nimport splitLayoutProps from '../../StyleSheet/splitLayoutProps';\nimport setAndForwardRef from '../../Utilities/setAndForwardRef';\n\nimport type {EdgeInsetsProp} from '../../StyleSheet/EdgeInsetsPropType';\nimport type {PointProp} from '../../StyleSheet/PointPropType';\nimport type {ViewStyleProp} from '../../StyleSheet/StyleSheet';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {\n PressEvent,\n ScrollEvent,\n LayoutEvent,\n} from '../../Types/CoreEventTypes';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport ScrollViewContext, {HORIZONTAL, VERTICAL} from './ScrollViewContext';\nimport type {Props as ScrollViewStickyHeaderProps} from './ScrollViewStickyHeader';\nimport type {KeyboardEvent} from '../Keyboard/Keyboard';\nimport type {EventSubscription} from '../../vendor/emitter/EventEmitter';\n\nimport Commands from './ScrollViewCommands';\nimport AndroidHorizontalScrollContentViewNativeComponent from './AndroidHorizontalScrollContentViewNativeComponent';\nimport AndroidHorizontalScrollViewNativeComponent from './AndroidHorizontalScrollViewNativeComponent';\nimport ScrollContentViewNativeComponent from './ScrollContentViewNativeComponent';\nimport ScrollViewNativeComponent from './ScrollViewNativeComponent';\n\nconst {NativeHorizontalScrollViewTuple, NativeVerticalScrollViewTuple} =\n Platform.OS === 'android'\n ? {\n NativeHorizontalScrollViewTuple: [\n AndroidHorizontalScrollViewNativeComponent,\n AndroidHorizontalScrollContentViewNativeComponent,\n ],\n NativeVerticalScrollViewTuple: [ScrollViewNativeComponent, View],\n }\n : {\n NativeHorizontalScrollViewTuple: [\n ScrollViewNativeComponent,\n ScrollContentViewNativeComponent,\n ],\n NativeVerticalScrollViewTuple: [\n ScrollViewNativeComponent,\n ScrollContentViewNativeComponent,\n ],\n };\n\n/*\n * iOS scroll event timing nuances:\n * ===============================\n *\n *\n * Scrolling without bouncing, if you touch down:\n * -------------------------------\n *\n * 1. `onMomentumScrollBegin` (when animation begins after letting up)\n * ... physical touch starts ...\n * 2. `onTouchStartCapture` (when you press down to stop the scroll)\n * 3. `onTouchStart` (same, but bubble phase)\n * 4. `onResponderRelease` (when lifting up - you could pause forever before * lifting)\n * 5. `onMomentumScrollEnd`\n *\n *\n * Scrolling with bouncing, if you touch down:\n * -------------------------------\n *\n * 1. `onMomentumScrollBegin` (when animation begins after letting up)\n * ... bounce begins ...\n * ... some time elapses ...\n * ... physical touch during bounce ...\n * 2. `onMomentumScrollEnd` (Makes no sense why this occurs first during bounce)\n * 3. `onTouchStartCapture` (immediately after `onMomentumScrollEnd`)\n * 4. `onTouchStart` (same, but bubble phase)\n * 5. `onTouchEnd` (You could hold the touch start for a long time)\n * 6. `onMomentumScrollBegin` (When releasing the view starts bouncing back)\n *\n * So when we receive an `onTouchStart`, how can we tell if we are touching\n * *during* an animation (which then causes the animation to stop)? The only way\n * to tell is if the `touchStart` occurred immediately after the\n * `onMomentumScrollEnd`.\n *\n * This is abstracted out for you, so you can just call this.scrollResponderIsAnimating() if\n * necessary\n *\n * `ScrollView` also includes logic for blurring a currently focused input\n * if one is focused while scrolling. This is a natural place\n * to put this logic since it can support not dismissing the keyboard while\n * scrolling, unless a recognized \"tap\"-like gesture has occurred.\n *\n * The public lifecycle API includes events for keyboard interaction, responder\n * interaction, and scrolling (among others). The keyboard callbacks\n * `onKeyboardWill/Did/*` are *global* events, but are invoked on scroll\n * responder's props so that you can guarantee that the scroll responder's\n * internal state has been updated accordingly (and deterministically) by\n * the time the props callbacks are invoke. Otherwise, you would always wonder\n * if the scroll responder is currently in a state where it recognizes new\n * keyboard positions etc. If coordinating scrolling with keyboard movement,\n * *always* use these hooks instead of listening to your own global keyboard\n * events.\n *\n * Public keyboard lifecycle API: (props callbacks)\n *\n * Standard Keyboard Appearance Sequence:\n *\n * this.props.onKeyboardWillShow\n * this.props.onKeyboardDidShow\n *\n * `onScrollResponderKeyboardDismissed` will be invoked if an appropriate\n * tap inside the scroll responder's scrollable region was responsible\n * for the dismissal of the keyboard. There are other reasons why the\n * keyboard could be dismissed.\n *\n * this.props.onScrollResponderKeyboardDismissed\n *\n * Standard Keyboard Hide Sequence:\n *\n * this.props.onKeyboardWillHide\n * this.props.onKeyboardDidHide\n */\n\n// Public methods for ScrollView\nexport type ScrollViewImperativeMethods = $ReadOnly<{|\n getScrollResponder: $PropertyType,\n getScrollableNode: $PropertyType,\n getInnerViewNode: $PropertyType,\n getInnerViewRef: $PropertyType,\n getNativeScrollRef: $PropertyType,\n scrollTo: $PropertyType,\n scrollToEnd: $PropertyType,\n flashScrollIndicators: $PropertyType,\n scrollResponderZoomTo: $PropertyType,\n scrollResponderScrollNativeHandleToKeyboard: $PropertyType<\n ScrollView,\n 'scrollResponderScrollNativeHandleToKeyboard',\n >,\n|}>;\n\nexport type ScrollResponderType = ScrollViewImperativeMethods;\n\ntype IOSProps = $ReadOnly<{|\n /**\n * Controls whether iOS should automatically adjust the content inset\n * for scroll views that are placed behind a navigation bar or\n * tab bar/ toolbar. The default value is true.\n * @platform ios\n */\n automaticallyAdjustContentInsets?: ?boolean,\n /**\n * Controls whether iOS should automatically adjust the scroll indicator\n * insets. The default value is true. Available on iOS 13 and later.\n * @platform ios\n */\n automaticallyAdjustsScrollIndicatorInsets?: ?boolean,\n /**\n * The amount by which the scroll view content is inset from the edges\n * of the scroll view. Defaults to `{top: 0, left: 0, bottom: 0, right: 0}`.\n * @platform ios\n */\n contentInset?: ?EdgeInsetsProp,\n /**\n * Used to manually set the starting scroll offset.\n * The default value is `{x: 0, y: 0}`.\n * @platform ios\n */\n contentOffset?: ?PointProp,\n /**\n * When true, the scroll view bounces when it reaches the end of the\n * content if the content is larger then the scroll view along the axis of\n * the scroll direction. When false, it disables all bouncing even if\n * the `alwaysBounce*` props are true. The default value is true.\n * @platform ios\n */\n bounces?: ?boolean,\n /**\n * By default, ScrollView has an active pan responder that hijacks panresponders\n * deeper in the render tree in order to prevent accidental touches while scrolling.\n * However, in certain occasions (such as when using snapToInterval) in a vertical scrollview\n * You may want to disable this behavior in order to prevent the ScrollView from blocking touches\n */\n disableScrollViewPanResponder?: ?boolean,\n /**\n * When true, gestures can drive zoom past min/max and the zoom will animate\n * to the min/max value at gesture end, otherwise the zoom will not exceed\n * the limits.\n * @platform ios\n */\n bouncesZoom?: ?boolean,\n /**\n * When true, the scroll view bounces horizontally when it reaches the end\n * even if the content is smaller than the scroll view itself. The default\n * value is true when `horizontal={true}` and false otherwise.\n * @platform ios\n */\n alwaysBounceHorizontal?: ?boolean,\n /**\n * When true, the scroll view bounces vertically when it reaches the end\n * even if the content is smaller than the scroll view itself. The default\n * value is false when `horizontal={true}` and true otherwise.\n * @platform ios\n */\n alwaysBounceVertical?: ?boolean,\n /**\n * When true, the scroll view automatically centers the content when the\n * content is smaller than the scroll view bounds; when the content is\n * larger than the scroll view, this property has no effect. The default\n * value is false.\n * @platform ios\n */\n centerContent?: ?boolean,\n /**\n * The style of the scroll indicators.\n *\n * - `'default'` (the default), same as `black`.\n * - `'black'`, scroll indicator is black. This style is good against a light background.\n * - `'white'`, scroll indicator is white. This style is good against a dark background.\n *\n * @platform ios\n */\n indicatorStyle?: ?('default' | 'black' | 'white'),\n /**\n * When true, the ScrollView will try to lock to only vertical or horizontal\n * scrolling while dragging. The default value is false.\n * @platform ios\n */\n directionalLockEnabled?: ?boolean,\n /**\n * When false, once tracking starts, won't try to drag if the touch moves.\n * The default value is true.\n * @platform ios\n */\n canCancelContentTouches?: ?boolean,\n /**\n * When set, the scroll view will adjust the scroll position so that the first child that is\n * currently visible and at or beyond `minIndexForVisible` will not change position. This is\n * useful for lists that are loading content in both directions, e.g. a chat thread, where new\n * messages coming in might otherwise cause the scroll position to jump. A value of 0 is common,\n * but other values such as 1 can be used to skip loading spinners or other content that should\n * not maintain position.\n *\n * The optional `autoscrollToTopThreshold` can be used to make the content automatically scroll\n * to the top after making the adjustment if the user was within the threshold of the top before\n * the adjustment was made. This is also useful for chat-like applications where you want to see\n * new messages scroll into place, but not if the user has scrolled up a ways and it would be\n * disruptive to scroll a bunch.\n *\n * Caveat 1: Reordering elements in the scrollview with this enabled will probably cause\n * jumpiness and jank. It can be fixed, but there are currently no plans to do so. For now,\n * don't re-order the content of any ScrollViews or Lists that use this feature.\n *\n * Caveat 2: This simply uses `contentOffset` and `frame.origin` in native code to compute\n * visibility. Occlusion, transforms, and other complexity won't be taken into account as to\n * whether content is \"visible\" or not.\n *\n * @platform ios\n */\n maintainVisibleContentPosition?: ?$ReadOnly<{|\n minIndexForVisible: number,\n autoscrollToTopThreshold?: ?number,\n |}>,\n /**\n * The maximum allowed zoom scale. The default value is 1.0.\n * @platform ios\n */\n maximumZoomScale?: ?number,\n /**\n * The minimum allowed zoom scale. The default value is 1.0.\n * @platform ios\n */\n minimumZoomScale?: ?number,\n /**\n * When true, ScrollView allows use of pinch gestures to zoom in and out.\n * The default value is true.\n * @platform ios\n */\n pinchGestureEnabled?: ?boolean,\n /**\n * This controls how often the scroll event will be fired while scrolling\n * (as a time interval in ms). A lower number yields better accuracy for code\n * that is tracking the scroll position, but can lead to scroll performance\n * problems due to the volume of information being send over the bridge.\n *\n * Values between 0 and 17ms indicate 60fps updates are needed and throttling\n * will be disabled.\n *\n * If you do not need precise scroll position tracking, set this value higher\n * to limit the information being sent across the bridge.\n *\n * The default value is zero, which results in the scroll event being sent only\n * once each time the view is scrolled.\n *\n * @platform ios\n */\n scrollEventThrottle?: ?number,\n /**\n * The amount by which the scroll view indicators are inset from the edges\n * of the scroll view. This should normally be set to the same value as\n * the `contentInset`. Defaults to `{0, 0, 0, 0}`.\n * @platform ios\n */\n scrollIndicatorInsets?: ?EdgeInsetsProp,\n /**\n * When true, the scroll view can be programmatically scrolled beyond its\n * content size. The default value is false.\n * @platform ios\n */\n scrollToOverflowEnabled?: ?boolean,\n /**\n * When true, the scroll view scrolls to top when the status bar is tapped.\n * The default value is true.\n * @platform ios\n */\n scrollsToTop?: ?boolean,\n /**\n * Fires when the scroll view scrolls to top after the status bar has been tapped\n * @platform ios\n */\n onScrollToTop?: (event: ScrollEvent) => void,\n /**\n * When true, shows a horizontal scroll indicator.\n * The default value is true.\n */\n showsHorizontalScrollIndicator?: ?boolean,\n /**\n * When `snapToInterval` is set, `snapToAlignment` will define the relationship\n * of the snapping to the scroll view.\n *\n * - `'start'` (the default) will align the snap at the left (horizontal) or top (vertical)\n * - `'center'` will align the snap in the center\n * - `'end'` will align the snap at the right (horizontal) or bottom (vertical)\n *\n * @platform ios\n */\n snapToAlignment?: ?('start' | 'center' | 'end'),\n /**\n * The current scale of the scroll view content. The default value is 1.0.\n * @platform ios\n */\n zoomScale?: ?number,\n /**\n * This property specifies how the safe area insets are used to modify the\n * content area of the scroll view. The default value of this property is\n * \"never\". Available on iOS 11 and later.\n * @platform ios\n */\n contentInsetAdjustmentBehavior?: ?(\n | 'automatic'\n | 'scrollableAxes'\n | 'never'\n | 'always'\n ),\n|}>;\n\ntype AndroidProps = $ReadOnly<{|\n /**\n * Enables nested scrolling for Android API level 21+.\n * Nested scrolling is supported by default on iOS\n * @platform android\n */\n nestedScrollEnabled?: ?boolean,\n /**\n * Sometimes a scrollview takes up more space than its content fills. When this is\n * the case, this prop will fill the rest of the scrollview with a color to avoid setting\n * a background and creating unnecessary overdraw. This is an advanced optimization\n * that is not needed in the general case.\n * @platform android\n */\n endFillColor?: ?ColorValue,\n /**\n * Tag used to log scroll performance on this scroll view. Will force\n * momentum events to be turned on (see sendMomentumEvents). This doesn't do\n * anything out of the box and you need to implement a custom native\n * FpsListener for it to be useful.\n * @platform android\n */\n scrollPerfTag?: ?string,\n /**\n * Used to override default value of overScroll mode.\n *\n * Possible values:\n *\n * - `'auto'` - Default value, allow a user to over-scroll\n * this view only if the content is large enough to meaningfully scroll.\n * - `'always'` - Always allow a user to over-scroll this view.\n * - `'never'` - Never allow a user to over-scroll this view.\n *\n * @platform android\n */\n overScrollMode?: ?('auto' | 'always' | 'never'),\n /**\n * Causes the scrollbars not to turn transparent when they are not in use.\n * The default value is false.\n *\n * @platform android\n */\n persistentScrollbar?: ?boolean,\n /**\n * Fades out the edges of the the scroll content.\n *\n * If the value is greater than 0, the fading edges will be set accordingly\n * to the current scroll direction and position,\n * indicating if there is more content to show.\n *\n * The default value is 0.\n *\n * @platform android\n */\n fadingEdgeLength?: ?number,\n|}>;\n\ntype StickyHeaderComponentType = React.AbstractComponent<\n ScrollViewStickyHeaderProps,\n $ReadOnly void}>,\n>;\n\nexport type Props = $ReadOnly<{|\n ...ViewProps,\n ...IOSProps,\n ...AndroidProps,\n\n /**\n * These styles will be applied to the scroll view content container which\n * wraps all of the child views. Example:\n *\n * ```\n * return (\n * \n * \n * );\n * ...\n * const styles = StyleSheet.create({\n * contentContainer: {\n * paddingVertical: 20\n * }\n * });\n * ```\n */\n contentContainerStyle?: ?ViewStyleProp,\n /**\n * When true, the scroll view stops on the next index (in relation to scroll\n * position at release) regardless of how fast the gesture is. This can be\n * used for pagination when the page is less than the width of the\n * horizontal ScrollView or the height of the vertical ScrollView. The default value is false.\n */\n disableIntervalMomentum?: ?boolean,\n /**\n * A floating-point number that determines how quickly the scroll view\n * decelerates after the user lifts their finger. You may also use string\n * shortcuts `\"normal\"` and `\"fast\"` which match the underlying iOS settings\n * for `UIScrollViewDecelerationRateNormal` and\n * `UIScrollViewDecelerationRateFast` respectively.\n *\n * - `'normal'`: 0.998 on iOS, 0.985 on Android (the default)\n * - `'fast'`: 0.99 on iOS, 0.9 on Android\n */\n decelerationRate?: ?('fast' | 'normal' | number),\n /**\n * When true, the scroll view's children are arranged horizontally in a row\n * instead of vertically in a column. The default value is false.\n */\n horizontal?: ?boolean,\n /**\n * If sticky headers should stick at the bottom instead of the top of the\n * ScrollView. This is usually used with inverted ScrollViews.\n */\n invertStickyHeaders?: ?boolean,\n /**\n * Determines whether the keyboard gets dismissed in response to a drag.\n *\n * *Cross platform*\n *\n * - `'none'` (the default), drags do not dismiss the keyboard.\n * - `'on-drag'`, the keyboard is dismissed when a drag begins.\n *\n * *iOS Only*\n *\n * - `'interactive'`, the keyboard is dismissed interactively with the drag and moves in\n * synchrony with the touch; dragging upwards cancels the dismissal.\n * On android this is not supported and it will have the same behavior as 'none'.\n */\n keyboardDismissMode?: ?// default\n // cross-platform\n ('none' | 'on-drag' | 'interactive'), // ios only\n /**\n * Determines when the keyboard should stay visible after a tap.\n *\n * - `'never'` (the default), tapping outside of the focused text input when the keyboard\n * is up dismisses the keyboard. When this happens, children won't receive the tap.\n * - `'always'`, the keyboard will not dismiss automatically, and the scroll view will not\n * catch taps, but children of the scroll view can catch taps.\n * - `'handled'`, the keyboard will not dismiss automatically when the tap was handled by\n * a children, (or captured by an ancestor).\n * - `false`, deprecated, use 'never' instead\n * - `true`, deprecated, use 'always' instead\n */\n keyboardShouldPersistTaps?: ?('always' | 'never' | 'handled' | true | false),\n /**\n * Called when the momentum scroll starts (scroll which occurs as the ScrollView glides to a stop).\n */\n onMomentumScrollBegin?: ?(event: ScrollEvent) => void,\n /**\n * Called when the momentum scroll ends (scroll which occurs as the ScrollView glides to a stop).\n */\n onMomentumScrollEnd?: ?(event: ScrollEvent) => void,\n\n /**\n * Fires at most once per frame during scrolling. The frequency of the\n * events can be controlled using the `scrollEventThrottle` prop.\n */\n onScroll?: ?(event: ScrollEvent) => void,\n /**\n * Called when the user begins to drag the scroll view.\n */\n onScrollBeginDrag?: ?(event: ScrollEvent) => void,\n /**\n * Called when the user stops dragging the scroll view and it either stops\n * or begins to glide.\n */\n onScrollEndDrag?: ?(event: ScrollEvent) => void,\n /**\n * Called when scrollable content view of the ScrollView changes.\n *\n * Handler function is passed the content width and content height as parameters:\n * `(contentWidth, contentHeight)`\n *\n * It's implemented using onLayout handler attached to the content container\n * which this ScrollView renders.\n */\n onContentSizeChange?: (contentWidth: number, contentHeight: number) => void,\n onKeyboardDidShow?: (event: KeyboardEvent) => void,\n onKeyboardDidHide?: (event: KeyboardEvent) => void,\n onKeyboardWillShow?: (event: KeyboardEvent) => void,\n onKeyboardWillHide?: (event: KeyboardEvent) => void,\n /**\n * When true, the scroll view stops on multiples of the scroll view's size\n * when scrolling. This can be used for horizontal pagination. The default\n * value is false.\n *\n * Note: Vertical pagination is not supported on Android.\n */\n pagingEnabled?: ?boolean,\n\n /**\n * When false, the view cannot be scrolled via touch interaction.\n * The default value is true.\n *\n * Note that the view can always be scrolled by calling `scrollTo`.\n */\n scrollEnabled?: ?boolean,\n /**\n * When true, shows a vertical scroll indicator.\n * The default value is true.\n */\n showsVerticalScrollIndicator?: ?boolean,\n /**\n * When true, Sticky header is hidden when scrolling down, and dock at the top\n * when scrolling up\n */\n stickyHeaderHiddenOnScroll?: ?boolean,\n /**\n * An array of child indices determining which children get docked to the\n * top of the screen when scrolling. For example, passing\n * `stickyHeaderIndices={[0]}` will cause the first child to be fixed to the\n * top of the scroll view. This property is not supported in conjunction\n * with `horizontal={true}`.\n */\n stickyHeaderIndices?: ?$ReadOnlyArray,\n /**\n * A React Component that will be used to render sticky headers.\n * To be used together with `stickyHeaderIndices` or with `SectionList`, defaults to `ScrollViewStickyHeader`.\n * You may need to set this if your sticky header uses custom transforms (eg. translation),\n * for example when you want your list to have an animated hidable header.\n */\n StickyHeaderComponent?: StickyHeaderComponentType,\n /**\n * When set, causes the scroll view to stop at multiples of the value of\n * `snapToInterval`. This can be used for paginating through children\n * that have lengths smaller than the scroll view. Typically used in\n * combination with `snapToAlignment` and `decelerationRate=\"fast\"`.\n *\n * Overrides less configurable `pagingEnabled` prop.\n */\n snapToInterval?: ?number,\n /**\n * When set, causes the scroll view to stop at the defined offsets.\n * This can be used for paginating through variously sized children\n * that have lengths smaller than the scroll view. Typically used in\n * combination with `decelerationRate=\"fast\"`.\n *\n * Overrides less configurable `pagingEnabled` and `snapToInterval` props.\n */\n snapToOffsets?: ?$ReadOnlyArray,\n /**\n * Use in conjunction with `snapToOffsets`. By default, the beginning\n * of the list counts as a snap offset. Set `snapToStart` to false to disable\n * this behavior and allow the list to scroll freely between its start and\n * the first `snapToOffsets` offset.\n * The default value is true.\n */\n snapToStart?: ?boolean,\n /**\n * Use in conjunction with `snapToOffsets`. By default, the end\n * of the list counts as a snap offset. Set `snapToEnd` to false to disable\n * this behavior and allow the list to scroll freely between its end and\n * the last `snapToOffsets` offset.\n * The default value is true.\n */\n snapToEnd?: ?boolean,\n /**\n * Experimental: When true, offscreen child views (whose `overflow` value is\n * `hidden`) are removed from their native backing superview when offscreen.\n * This can improve scrolling performance on long lists. The default value is\n * true.\n */\n removeClippedSubviews?: ?boolean,\n /**\n * A RefreshControl component, used to provide pull-to-refresh\n * functionality for the ScrollView. Only works for vertical ScrollViews\n * (`horizontal` prop must be `false`).\n *\n * See [RefreshControl](docs/refreshcontrol.html).\n */\n /* $FlowFixMe[unclear-type] - how to handle generic type without existential\n * operator? */\n refreshControl?: ?React.Element,\n children?: React.Node,\n /**\n * A ref to the inner View element of the ScrollView. This should be used\n * instead of calling `getInnerViewRef`.\n */\n innerViewRef?: React.Ref,\n /**\n * A ref to the Native ScrollView component. This ref can be used to call\n * all of ScrollView's public methods, in addition to native methods like\n * measure, measureLayout, etc.\n */\n scrollViewRef?: React.Ref<\n typeof ScrollViewNativeComponent & ScrollViewImperativeMethods,\n >,\n|}>;\n\ntype State = {|\n layoutHeight: ?number,\n|};\n\nconst IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16;\n\ntype ScrollViewComponentStatics = $ReadOnly<{|\n Context: typeof ScrollViewContext,\n|}>;\n\n/**\n * Component that wraps platform ScrollView while providing\n * integration with touch locking \"responder\" system.\n *\n * Keep in mind that ScrollViews must have a bounded height in order to work,\n * since they contain unbounded-height children into a bounded container (via\n * a scroll interaction). In order to bound the height of a ScrollView, either\n * set the height of the view directly (discouraged) or make sure all parent\n * views have bounded height. Forgetting to transfer `{flex: 1}` down the\n * view stack can lead to errors here, which the element inspector makes\n * easy to debug.\n *\n * Doesn't yet support other contained responders from blocking this scroll\n * view from becoming the responder.\n *\n *\n * `` vs [``](https://reactnative.dev/docs/flatlist.html) - which one to use?\n *\n * `ScrollView` simply renders all its react child components at once. That\n * makes it very easy to understand and use.\n *\n * On the other hand, this has a performance downside. Imagine you have a very\n * long list of items you want to display, maybe several screens worth of\n * content. Creating JS components and native views for everything all at once,\n * much of which may not even be shown, will contribute to slow rendering and\n * increased memory usage.\n *\n * This is where `FlatList` comes into play. `FlatList` renders items lazily,\n * just when they are about to appear, and removes items that scroll way off\n * screen to save memory and processing time.\n *\n * `FlatList` is also handy if you want to render separators between your items,\n * multiple columns, infinite scroll loading, or any number of other features it\n * supports out of the box.\n */\nclass ScrollView extends React.Component {\n static Context: typeof ScrollViewContext = ScrollViewContext;\n\n constructor(props: Props) {\n super(props);\n\n this._scrollAnimatedValue = new AnimatedImplementation.Value(\n this.props.contentOffset?.y ?? 0,\n );\n this._scrollAnimatedValue.setOffset(this.props.contentInset?.top ?? 0);\n }\n\n _scrollAnimatedValue: AnimatedImplementation.Value;\n _scrollAnimatedValueAttachment: ?{detach: () => void, ...} = null;\n _stickyHeaderRefs: Map<\n string,\n React.ElementRef,\n > = new Map();\n _headerLayoutYs: Map = new Map();\n\n _keyboardWillOpenTo: ?KeyboardEvent = null;\n _additionalScrollOffset: number = 0;\n _isTouching: boolean = false;\n _lastMomentumScrollBeginTime: number = 0;\n _lastMomentumScrollEndTime: number = 0;\n\n // Reset to false every time becomes responder. This is used to:\n // - Determine if the scroll view has been scrolled and therefore should\n // refuse to give up its responder lock.\n // - Determine if releasing should dismiss the keyboard when we are in\n // tap-to-dismiss mode (this.props.keyboardShouldPersistTaps !== 'always').\n _observedScrollSinceBecomingResponder: boolean = false;\n _becameResponderWhileAnimating: boolean = false;\n _preventNegativeScrollOffset: ?boolean = null;\n\n _animated = null;\n\n _subscriptionKeyboardWillShow: ?EventSubscription = null;\n _subscriptionKeyboardWillHide: ?EventSubscription = null;\n _subscriptionKeyboardDidShow: ?EventSubscription = null;\n _subscriptionKeyboardDidHide: ?EventSubscription = null;\n\n state: State = {\n layoutHeight: null,\n };\n\n componentDidMount() {\n if (typeof this.props.keyboardShouldPersistTaps === 'boolean') {\n console.warn(\n `'keyboardShouldPersistTaps={${\n this.props.keyboardShouldPersistTaps === true ? 'true' : 'false'\n }}' is deprecated. ` +\n `Use 'keyboardShouldPersistTaps=\"${\n this.props.keyboardShouldPersistTaps ? 'always' : 'never'\n }\"' instead`,\n );\n }\n\n this._keyboardWillOpenTo = null;\n this._additionalScrollOffset = 0;\n\n this._subscriptionKeyboardWillShow = Keyboard.addListener(\n 'keyboardWillShow',\n this.scrollResponderKeyboardWillShow,\n );\n this._subscriptionKeyboardWillHide = Keyboard.addListener(\n 'keyboardWillHide',\n this.scrollResponderKeyboardWillHide,\n );\n this._subscriptionKeyboardDidShow = Keyboard.addListener(\n 'keyboardDidShow',\n this.scrollResponderKeyboardDidShow,\n );\n this._subscriptionKeyboardDidHide = Keyboard.addListener(\n 'keyboardDidHide',\n this.scrollResponderKeyboardDidHide,\n );\n\n this._updateAnimatedNodeAttachment();\n }\n\n componentDidUpdate(prevProps: Props) {\n const prevContentInsetTop = prevProps.contentInset\n ? prevProps.contentInset.top\n : 0;\n const newContentInsetTop = this.props.contentInset\n ? this.props.contentInset.top\n : 0;\n if (prevContentInsetTop !== newContentInsetTop) {\n this._scrollAnimatedValue.setOffset(newContentInsetTop || 0);\n }\n\n this._updateAnimatedNodeAttachment();\n }\n\n componentWillUnmount() {\n if (this._subscriptionKeyboardWillShow != null) {\n this._subscriptionKeyboardWillShow.remove();\n }\n if (this._subscriptionKeyboardWillHide != null) {\n this._subscriptionKeyboardWillHide.remove();\n }\n if (this._subscriptionKeyboardDidShow != null) {\n this._subscriptionKeyboardDidShow.remove();\n }\n if (this._subscriptionKeyboardDidHide != null) {\n this._subscriptionKeyboardDidHide.remove();\n }\n\n if (this._scrollAnimatedValueAttachment) {\n this._scrollAnimatedValueAttachment.detach();\n }\n }\n\n _setNativeRef = setAndForwardRef({\n getForwardedRef: () => this.props.scrollViewRef,\n setLocalRef: ref => {\n this._scrollViewRef = ref;\n\n /*\n This is a hack. Ideally we would forwardRef to the underlying\n host component. However, since ScrollView has it's own methods that can be\n called as well, if we used the standard forwardRef then these\n methods wouldn't be accessible and thus be a breaking change.\n\n Therefore we edit ref to include ScrollView's public methods so that\n they are callable from the ref.\n */\n if (ref) {\n ref.getScrollResponder = this.getScrollResponder;\n ref.getScrollableNode = this.getScrollableNode;\n ref.getInnerViewNode = this.getInnerViewNode;\n ref.getInnerViewRef = this.getInnerViewRef;\n ref.getNativeScrollRef = this.getNativeScrollRef;\n ref.scrollTo = this.scrollTo;\n ref.scrollToEnd = this.scrollToEnd;\n ref.flashScrollIndicators = this.flashScrollIndicators;\n ref.scrollResponderZoomTo = this.scrollResponderZoomTo;\n ref.scrollResponderScrollNativeHandleToKeyboard = this.scrollResponderScrollNativeHandleToKeyboard;\n }\n },\n });\n\n /**\n * Returns a reference to the underlying scroll responder, which supports\n * operations like `scrollTo`. All ScrollView-like components should\n * implement this method so that they can be composed while providing access\n * to the underlying scroll responder's methods.\n */\n getScrollResponder: () => ScrollResponderType = () => {\n // $FlowFixMe[unclear-type]\n return ((this: any): ScrollResponderType);\n };\n\n getScrollableNode: () => ?number = () => {\n return ReactNative.findNodeHandle(this._scrollViewRef);\n };\n\n getInnerViewNode: () => ?number = () => {\n return ReactNative.findNodeHandle(this._innerViewRef);\n };\n\n getInnerViewRef: () => ?React.ElementRef = () => {\n return this._innerViewRef;\n };\n\n getNativeScrollRef: () => ?React.ElementRef> = () => {\n return this._scrollViewRef;\n };\n\n /**\n * Scrolls to a given x, y offset, either immediately or with a smooth animation.\n *\n * Example:\n *\n * `scrollTo({x: 0, y: 0, animated: true})`\n *\n * Note: The weird function signature is due to the fact that, for historical reasons,\n * the function also accepts separate arguments as an alternative to the options object.\n * This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.\n */\n scrollTo: (\n options?:\n | {\n x?: number,\n y?: number,\n animated?: boolean,\n ...\n }\n | number,\n deprecatedX?: number,\n deprecatedAnimated?: boolean,\n ) => void = (\n options?:\n | {\n x?: number,\n y?: number,\n animated?: boolean,\n ...\n }\n | number,\n deprecatedX?: number,\n deprecatedAnimated?: boolean,\n ) => {\n let x, y, animated;\n if (typeof options === 'number') {\n console.warn(\n '`scrollTo(y, x, animated)` is deprecated. Use `scrollTo({x: 5, y: 5, ' +\n 'animated: true})` instead.',\n );\n y = options;\n x = deprecatedX;\n animated = deprecatedAnimated;\n } else if (options) {\n y = options.y;\n x = options.x;\n animated = options.animated;\n }\n if (this._scrollViewRef == null) {\n return;\n }\n Commands.scrollTo(this._scrollViewRef, x || 0, y || 0, animated !== false);\n };\n\n /**\n * If this is a vertical ScrollView scrolls to the bottom.\n * If this is a horizontal ScrollView scrolls to the right.\n *\n * Use `scrollToEnd({animated: true})` for smooth animated scrolling,\n * `scrollToEnd({animated: false})` for immediate scrolling.\n * If no options are passed, `animated` defaults to true.\n */\n scrollToEnd: (options?: ?{animated?: boolean, ...}) => void = (\n options?: ?{animated?: boolean, ...},\n ) => {\n // Default to true\n const animated = (options && options.animated) !== false;\n if (this._scrollViewRef == null) {\n return;\n }\n Commands.scrollToEnd(this._scrollViewRef, animated);\n };\n\n /**\n * Displays the scroll indicators momentarily.\n *\n * @platform ios\n */\n flashScrollIndicators: () => void = () => {\n if (this._scrollViewRef == null) {\n return;\n }\n Commands.flashScrollIndicators(this._scrollViewRef);\n };\n\n /**\n * This method should be used as the callback to onFocus in a TextInputs'\n * parent view. Note that any module using this mixin needs to return\n * the parent view's ref in getScrollViewRef() in order to use this method.\n * @param {number} nodeHandle The TextInput node handle\n * @param {number} additionalOffset The scroll view's bottom \"contentInset\".\n * Default is 0.\n * @param {bool} preventNegativeScrolling Whether to allow pulling the content\n * down to make it meet the keyboard's top. Default is false.\n */\n scrollResponderScrollNativeHandleToKeyboard: (\n nodeHandle: number | React.ElementRef>,\n additionalOffset?: number,\n preventNegativeScrollOffset?: boolean,\n ) => void = (\n nodeHandle: number | React.ElementRef>,\n additionalOffset?: number,\n preventNegativeScrollOffset?: boolean,\n ) => {\n this._additionalScrollOffset = additionalOffset || 0;\n this._preventNegativeScrollOffset = !!preventNegativeScrollOffset;\n\n if (this._innerViewRef == null) {\n return;\n }\n\n if (typeof nodeHandle === 'number') {\n UIManager.measureLayout(\n nodeHandle,\n ReactNative.findNodeHandle(this),\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._textInputFocusError,\n this._inputMeasureAndScrollToKeyboard,\n );\n } else {\n nodeHandle.measureLayout(\n this._innerViewRef,\n this._inputMeasureAndScrollToKeyboard,\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._textInputFocusError,\n );\n }\n };\n\n /**\n * A helper function to zoom to a specific rect in the scrollview. The argument has the shape\n * {x: number; y: number; width: number; height: number; animated: boolean = true}\n *\n * @platform ios\n */\n scrollResponderZoomTo: (\n rect: {|\n x: number,\n y: number,\n width: number,\n height: number,\n animated?: boolean,\n |},\n animated?: boolean, // deprecated, put this inside the rect argument instead\n ) => void = (\n rect: {|\n x: number,\n y: number,\n width: number,\n height: number,\n animated?: boolean,\n |},\n animated?: boolean, // deprecated, put this inside the rect argument instead\n ) => {\n invariant(Platform.OS === 'ios', 'zoomToRect is not implemented');\n if ('animated' in rect) {\n this._animated = rect.animated;\n delete rect.animated;\n } else if (typeof animated !== 'undefined') {\n console.warn(\n '`scrollResponderZoomTo` `animated` argument is deprecated. Use `options.animated` instead',\n );\n }\n\n if (this._scrollViewRef == null) {\n return;\n }\n Commands.zoomToRect(this._scrollViewRef, rect, animated !== false);\n };\n\n _textInputFocusError() {\n console.warn('Error measuring text field.');\n }\n\n /**\n * The calculations performed here assume the scroll view takes up the entire\n * screen - even if has some content inset. We then measure the offsets of the\n * keyboard, and compensate both for the scroll view's \"contentInset\".\n *\n * @param {number} left Position of input w.r.t. table view.\n * @param {number} top Position of input w.r.t. table view.\n * @param {number} width Width of the text input.\n * @param {number} height Height of the text input.\n */\n _inputMeasureAndScrollToKeyboard: (\n left: number,\n top: number,\n width: number,\n height: number,\n ) => void = (left: number, top: number, width: number, height: number) => {\n let keyboardScreenY = Dimensions.get('window').height;\n\n const scrollTextInputIntoVisibleRect = () => {\n if (this._keyboardWillOpenTo != null) {\n keyboardScreenY = this._keyboardWillOpenTo.endCoordinates.screenY;\n }\n let scrollOffsetY =\n top - keyboardScreenY + height + this._additionalScrollOffset;\n\n // By default, this can scroll with negative offset, pulling the content\n // down so that the target component's bottom meets the keyboard's top.\n // If requested otherwise, cap the offset at 0 minimum to avoid content\n // shifting down.\n if (this._preventNegativeScrollOffset === true) {\n scrollOffsetY = Math.max(0, scrollOffsetY);\n }\n this.scrollTo({x: 0, y: scrollOffsetY, animated: true});\n\n this._additionalScrollOffset = 0;\n this._preventNegativeScrollOffset = false;\n };\n\n if (this._keyboardWillOpenTo == null) {\n // `_keyboardWillOpenTo` is set inside `scrollResponderKeyboardWillShow` which\n // is not guaranteed to be called before `_inputMeasureAndScrollToKeyboard` but native has already scheduled it.\n // In case it was not called before `_inputMeasureAndScrollToKeyboard`, we postpone scrolling to\n // text input.\n setTimeout(() => {\n scrollTextInputIntoVisibleRect();\n }, 0);\n } else {\n scrollTextInputIntoVisibleRect();\n }\n };\n\n _getKeyForIndex(index, childArray) {\n const child = childArray[index];\n return child && child.key;\n }\n\n _updateAnimatedNodeAttachment() {\n if (this._scrollAnimatedValueAttachment) {\n this._scrollAnimatedValueAttachment.detach();\n }\n if (\n this.props.stickyHeaderIndices &&\n this.props.stickyHeaderIndices.length > 0\n ) {\n this._scrollAnimatedValueAttachment = AnimatedImplementation.attachNativeEvent(\n this._scrollViewRef,\n 'onScroll',\n [{nativeEvent: {contentOffset: {y: this._scrollAnimatedValue}}}],\n );\n }\n }\n\n _setStickyHeaderRef(\n key: string,\n ref: ?React.ElementRef,\n ) {\n if (ref) {\n this._stickyHeaderRefs.set(key, ref);\n } else {\n this._stickyHeaderRefs.delete(key);\n }\n }\n\n _onStickyHeaderLayout(index, event, key) {\n const {stickyHeaderIndices} = this.props;\n if (!stickyHeaderIndices) {\n return;\n }\n const childArray = React.Children.toArray(this.props.children);\n if (key !== this._getKeyForIndex(index, childArray)) {\n // ignore stale layout update\n return;\n }\n\n const layoutY = event.nativeEvent.layout.y;\n this._headerLayoutYs.set(key, layoutY);\n\n const indexOfIndex = stickyHeaderIndices.indexOf(index);\n const previousHeaderIndex = stickyHeaderIndices[indexOfIndex - 1];\n if (previousHeaderIndex != null) {\n const previousHeader = this._stickyHeaderRefs.get(\n this._getKeyForIndex(previousHeaderIndex, childArray),\n );\n previousHeader &&\n previousHeader.setNextHeaderY &&\n previousHeader.setNextHeaderY(layoutY);\n }\n }\n\n _handleScroll = (e: ScrollEvent) => {\n if (__DEV__) {\n if (\n this.props.onScroll &&\n this.props.scrollEventThrottle == null &&\n Platform.OS === 'ios'\n ) {\n console.log(\n 'You specified `onScroll` on a but not ' +\n '`scrollEventThrottle`. You will only receive one event. ' +\n 'Using `16` you get all the events but be aware that it may ' +\n \"cause frame drops, use a bigger number if you don't need as \" +\n 'much precision.',\n );\n }\n }\n if (Platform.OS === 'android') {\n if (this.props.keyboardDismissMode === 'on-drag' && this._isTouching) {\n dismissKeyboard();\n }\n }\n this._observedScrollSinceBecomingResponder = true;\n this.props.onScroll && this.props.onScroll(e);\n };\n\n _handleLayout = (e: LayoutEvent) => {\n if (this.props.invertStickyHeaders === true) {\n this.setState({layoutHeight: e.nativeEvent.layout.height});\n }\n if (this.props.onLayout) {\n this.props.onLayout(e);\n }\n };\n\n _handleContentOnLayout = (e: LayoutEvent) => {\n const {width, height} = e.nativeEvent.layout;\n this.props.onContentSizeChange &&\n this.props.onContentSizeChange(width, height);\n };\n\n _scrollViewRef: ?React.ElementRef> = null;\n\n _innerViewRef: ?React.ElementRef = null;\n _setInnerViewRef = setAndForwardRef({\n getForwardedRef: () => this.props.innerViewRef,\n setLocalRef: ref => {\n this._innerViewRef = ref;\n },\n });\n\n /**\n * Warning, this may be called several times for a single keyboard opening.\n * It's best to store the information in this method and then take any action\n * at a later point (either in `keyboardDidShow` or other).\n *\n * Here's the order that events occur in:\n * - focus\n * - willShow {startCoordinates, endCoordinates} several times\n * - didShow several times\n * - blur\n * - willHide {startCoordinates, endCoordinates} several times\n * - didHide several times\n *\n * The `ScrollResponder` module callbacks for each of these events.\n * Even though any user could have easily listened to keyboard events\n * themselves, using these `props` callbacks ensures that ordering of events\n * is consistent - and not dependent on the order that the keyboard events are\n * subscribed to. This matters when telling the scroll view to scroll to where\n * the keyboard is headed - the scroll responder better have been notified of\n * the keyboard destination before being instructed to scroll to where the\n * keyboard will be. Stick to the `ScrollResponder` callbacks, and everything\n * will work.\n *\n * WARNING: These callbacks will fire even if a keyboard is displayed in a\n * different navigation pane. Filter out the events to determine if they are\n * relevant to you. (For example, only if you receive these callbacks after\n * you had explicitly focused a node etc).\n */\n\n scrollResponderKeyboardWillShow: (e: KeyboardEvent) => void = (\n e: KeyboardEvent,\n ) => {\n this._keyboardWillOpenTo = e;\n this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);\n };\n\n scrollResponderKeyboardWillHide: (e: KeyboardEvent) => void = (\n e: KeyboardEvent,\n ) => {\n this._keyboardWillOpenTo = null;\n this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e);\n };\n\n scrollResponderKeyboardDidShow: (e: KeyboardEvent) => void = (\n e: KeyboardEvent,\n ) => {\n // TODO(7693961): The event for DidShow is not available on iOS yet.\n // Use the one from WillShow and do not assign.\n if (e) {\n this._keyboardWillOpenTo = e;\n }\n this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e);\n };\n\n scrollResponderKeyboardDidHide: (e: KeyboardEvent) => void = (\n e: KeyboardEvent,\n ) => {\n this._keyboardWillOpenTo = null;\n this.props.onKeyboardDidHide && this.props.onKeyboardDidHide(e);\n };\n\n /**\n * Invoke this from an `onMomentumScrollBegin` event.\n */\n _handleMomentumScrollBegin: (e: ScrollEvent) => void = (e: ScrollEvent) => {\n this._lastMomentumScrollBeginTime = global.performance.now();\n this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n };\n\n /**\n * Invoke this from an `onMomentumScrollEnd` event.\n */\n _handleMomentumScrollEnd: (e: ScrollEvent) => void = (e: ScrollEvent) => {\n FrameRateLogger.endScroll();\n this._lastMomentumScrollEndTime = global.performance.now();\n this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n };\n\n /**\n * Unfortunately, `onScrollBeginDrag` also fires when *stopping* the scroll\n * animation, and there's not an easy way to distinguish a drag vs. stopping\n * momentum.\n *\n * Invoke this from an `onScrollBeginDrag` event.\n */\n _handleScrollBeginDrag: (e: ScrollEvent) => void = (e: ScrollEvent) => {\n FrameRateLogger.beginScroll(); // TODO: track all scrolls after implementing onScrollEndAnimation\n this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n };\n\n /**\n * Invoke this from an `onScrollEndDrag` event.\n */\n _handleScrollEndDrag: (e: ScrollEvent) => void = (e: ScrollEvent) => {\n const {velocity} = e.nativeEvent;\n // - If we are animating, then this is a \"drag\" that is stopping the scrollview and momentum end\n // will fire.\n // - If velocity is non-zero, then the interaction will stop when momentum scroll ends or\n // another drag starts and ends.\n // - If we don't get velocity, better to stop the interaction twice than not stop it.\n if (\n !this._isAnimating() &&\n (!velocity || (velocity.x === 0 && velocity.y === 0))\n ) {\n FrameRateLogger.endScroll();\n }\n this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n };\n\n /**\n * A helper function for this class that lets us quickly determine if the\n * view is currently animating. This is particularly useful to know when\n * a touch has just started or ended.\n */\n _isAnimating: () => boolean = () => {\n const now = global.performance.now();\n const timeSinceLastMomentumScrollEnd =\n now - this._lastMomentumScrollEndTime;\n const isAnimating =\n timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS ||\n this._lastMomentumScrollEndTime < this._lastMomentumScrollBeginTime;\n return isAnimating;\n };\n\n /**\n * Invoke this from an `onResponderGrant` event.\n */\n _handleResponderGrant: (e: PressEvent) => void = (e: PressEvent) => {\n this._observedScrollSinceBecomingResponder = false;\n this.props.onResponderGrant && this.props.onResponderGrant(e);\n this._becameResponderWhileAnimating = this._isAnimating();\n };\n\n /**\n * Invoke this from an `onResponderReject` event.\n *\n * Some other element is not yielding its role as responder. Normally, we'd\n * just disable the `UIScrollView`, but a touch has already began on it, the\n * `UIScrollView` will not accept being disabled after that. The easiest\n * solution for now is to accept the limitation of disallowing this\n * altogether. To improve this, find a way to disable the `UIScrollView` after\n * a touch has already started.\n */\n _handleResponderReject: () => void = () => {};\n\n /**\n * Invoke this from an `onResponderRelease` event.\n */\n _handleResponderRelease: (e: PressEvent) => void = (e: PressEvent) => {\n this._isTouching = e.nativeEvent.touches.length !== 0;\n this.props.onResponderRelease && this.props.onResponderRelease(e);\n\n if (typeof e.target === 'number') {\n if (__DEV__) {\n console.error(\n 'Did not expect event target to be a number. Should have been a native component',\n );\n }\n\n return;\n }\n\n // By default scroll views will unfocus a textField\n // if another touch occurs outside of it\n const currentlyFocusedTextInput = TextInputState.currentlyFocusedInput();\n if (\n this.props.keyboardShouldPersistTaps !== true &&\n this.props.keyboardShouldPersistTaps !== 'always' &&\n this._keyboardIsDismissible() &&\n e.target !== currentlyFocusedTextInput &&\n !this._observedScrollSinceBecomingResponder &&\n !this._becameResponderWhileAnimating\n ) {\n TextInputState.blurTextInput(currentlyFocusedTextInput);\n }\n };\n\n /**\n * We will allow the scroll view to give up its lock iff it acquired the lock\n * during an animation. This is a very useful default that happens to satisfy\n * many common user experiences.\n *\n * - Stop a scroll on the left edge, then turn that into an outer view's\n * backswipe.\n * - Stop a scroll mid-bounce at the top, continue pulling to have the outer\n * view dismiss.\n * - However, without catching the scroll view mid-bounce (while it is\n * motionless), if you drag far enough for the scroll view to become\n * responder (and therefore drag the scroll view a bit), any backswipe\n * navigation of a swipe gesture higher in the view hierarchy, should be\n * rejected.\n */\n _handleResponderTerminationRequest: () => boolean = () => {\n return !this._observedScrollSinceBecomingResponder;\n };\n\n /**\n * Invoke this from an `onScroll` event.\n */\n _handleScrollShouldSetResponder: () => boolean = () => {\n // Allow any event touch pass through if the default pan responder is disabled\n if (this.props.disableScrollViewPanResponder === true) {\n return false;\n }\n return this._isTouching;\n };\n\n /**\n * Merely touch starting is not sufficient for a scroll view to become the\n * responder. Being the \"responder\" means that the very next touch move/end\n * event will result in an action/movement.\n *\n * Invoke this from an `onStartShouldSetResponder` event.\n *\n * `onStartShouldSetResponder` is used when the next move/end will trigger\n * some UI movement/action, but when you want to yield priority to views\n * nested inside of the view.\n *\n * There may be some cases where scroll views actually should return `true`\n * from `onStartShouldSetResponder`: Any time we are detecting a standard tap\n * that gives priority to nested views.\n *\n * - If a single tap on the scroll view triggers an action such as\n * recentering a map style view yet wants to give priority to interaction\n * views inside (such as dropped pins or labels), then we would return true\n * from this method when there is a single touch.\n *\n * - Similar to the previous case, if a two finger \"tap\" should trigger a\n * zoom, we would check the `touches` count, and if `>= 2`, we would return\n * true.\n *\n */\n _handleStartShouldSetResponder: (e: PressEvent) => boolean = (\n e: PressEvent,\n ) => {\n // Allow any event touch pass through if the default pan responder is disabled\n if (this.props.disableScrollViewPanResponder === true) {\n return false;\n }\n\n const currentlyFocusedInput = TextInputState.currentlyFocusedInput();\n\n if (\n this.props.keyboardShouldPersistTaps === 'handled' &&\n this._keyboardIsDismissible() &&\n e.target !== currentlyFocusedInput\n ) {\n return true;\n }\n return false;\n };\n\n /**\n * There are times when the scroll view wants to become the responder\n * (meaning respond to the next immediate `touchStart/touchEnd`), in a way\n * that *doesn't* give priority to nested views (hence the capture phase):\n *\n * - Currently animating.\n * - Tapping anywhere that is not a text input, while the keyboard is\n * up (which should dismiss the keyboard).\n *\n * Invoke this from an `onStartShouldSetResponderCapture` event.\n */\n _handleStartShouldSetResponderCapture: (e: PressEvent) => boolean = (\n e: PressEvent,\n ) => {\n // The scroll view should receive taps instead of its descendants if:\n // * it is already animating/decelerating\n if (this._isAnimating()) {\n return true;\n }\n\n // Allow any event touch pass through if the default pan responder is disabled\n if (this.props.disableScrollViewPanResponder === true) {\n return false;\n }\n\n // * the keyboard is up, keyboardShouldPersistTaps is 'never' (the default),\n // and a new touch starts with a non-textinput target (in which case the\n // first tap should be sent to the scroll view and dismiss the keyboard,\n // then the second tap goes to the actual interior view)\n const {keyboardShouldPersistTaps} = this.props;\n const keyboardNeverPersistTaps =\n !keyboardShouldPersistTaps || keyboardShouldPersistTaps === 'never';\n\n if (typeof e.target === 'number') {\n if (__DEV__) {\n console.error(\n 'Did not expect event target to be a number. Should have been a native component',\n );\n }\n\n return false;\n }\n\n if (\n keyboardNeverPersistTaps &&\n this._keyboardIsDismissible() &&\n e.target != null &&\n !TextInputState.isTextInput(e.target)\n ) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Do we consider there to be a dismissible soft-keyboard open?\n */\n _keyboardIsDismissible: () => boolean = () => {\n const currentlyFocusedInput = TextInputState.currentlyFocusedInput();\n\n // We cannot dismiss the keyboard without an input to blur, even if a soft\n // keyboard is open (e.g. when keyboard is open due to a native component\n // not participating in TextInputState). It's also possible that the\n // currently focused input isn't a TextInput (such as by calling ref.focus\n // on a non-TextInput).\n const hasFocusedTextInput =\n currentlyFocusedInput != null &&\n TextInputState.isTextInput(currentlyFocusedInput);\n\n // Even if an input is focused, we may not have a keyboard to dismiss. E.g\n // when using a physical keyboard. Ensure we have an event for an opened\n // keyboard, except on Android where setting windowSoftInputMode to\n // adjustNone leads to missing keyboard events.\n const softKeyboardMayBeOpen =\n this._keyboardWillOpenTo != null || Platform.OS === 'android';\n\n return hasFocusedTextInput && softKeyboardMayBeOpen;\n };\n\n /**\n * Invoke this from an `onTouchEnd` event.\n *\n * @param {PressEvent} e Event.\n */\n _handleTouchEnd: (e: PressEvent) => void = (e: PressEvent) => {\n const nativeEvent = e.nativeEvent;\n this._isTouching = nativeEvent.touches.length !== 0;\n this.props.onTouchEnd && this.props.onTouchEnd(e);\n };\n\n /**\n * Invoke this from an `onTouchCancel` event.\n *\n * @param {PressEvent} e Event.\n */\n _handleTouchCancel: (e: PressEvent) => void = (e: PressEvent) => {\n this._isTouching = false;\n this.props.onTouchCancel && this.props.onTouchCancel(e);\n };\n\n /**\n * Invoke this from an `onTouchStart` event.\n *\n * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n * order, after `ResponderEventPlugin`, we can detect that we were *not*\n * permitted to be the responder (presumably because a contained view became\n * responder). The `onResponderReject` won't fire in that case - it only\n * fires when a *current* responder rejects our request.\n *\n * @param {PressEvent} e Touch Start event.\n */\n _handleTouchStart: (e: PressEvent) => void = (e: PressEvent) => {\n this._isTouching = true;\n this.props.onTouchStart && this.props.onTouchStart(e);\n };\n\n /**\n * Invoke this from an `onTouchMove` event.\n *\n * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n * order, after `ResponderEventPlugin`, we can detect that we were *not*\n * permitted to be the responder (presumably because a contained view became\n * responder). The `onResponderReject` won't fire in that case - it only\n * fires when a *current* responder rejects our request.\n *\n * @param {PressEvent} e Touch Start event.\n */\n _handleTouchMove: (e: PressEvent) => void = (e: PressEvent) => {\n this.props.onTouchMove && this.props.onTouchMove(e);\n };\n\n render(): React.Node | React.Element {\n const [NativeDirectionalScrollView, NativeDirectionalScrollContentView] =\n this.props.horizontal === true\n ? NativeHorizontalScrollViewTuple\n : NativeVerticalScrollViewTuple;\n\n const contentContainerStyle = [\n this.props.horizontal === true && styles.contentContainerHorizontal,\n this.props.contentContainerStyle,\n ];\n if (__DEV__ && this.props.style !== undefined) {\n const style = flattenStyle(this.props.style);\n const childLayoutProps = ['alignItems', 'justifyContent'].filter(\n prop => style && style[prop] !== undefined,\n );\n invariant(\n childLayoutProps.length === 0,\n 'ScrollView child layout (' +\n JSON.stringify(childLayoutProps) +\n ') must be applied through the contentContainerStyle prop.',\n );\n }\n\n const contentSizeChangeProps =\n this.props.onContentSizeChange == null\n ? null\n : {\n onLayout: this._handleContentOnLayout,\n };\n\n const {stickyHeaderIndices} = this.props;\n let children = this.props.children;\n\n if (stickyHeaderIndices != null && stickyHeaderIndices.length > 0) {\n const childArray = React.Children.toArray(this.props.children);\n\n children = childArray.map((child, index) => {\n const indexOfIndex = child ? stickyHeaderIndices.indexOf(index) : -1;\n if (indexOfIndex > -1) {\n const key = child.key;\n const nextIndex = stickyHeaderIndices[indexOfIndex + 1];\n const StickyHeaderComponent =\n this.props.StickyHeaderComponent || ScrollViewStickyHeader;\n return (\n this._setStickyHeaderRef(key, ref)}\n nextHeaderLayoutY={this._headerLayoutYs.get(\n this._getKeyForIndex(nextIndex, childArray),\n )}\n onLayout={event => this._onStickyHeaderLayout(index, event, key)}\n scrollAnimatedValue={this._scrollAnimatedValue}\n inverted={this.props.invertStickyHeaders}\n hiddenOnScroll={this.props.stickyHeaderHiddenOnScroll}\n scrollViewHeight={this.state.layoutHeight}>\n {child}\n \n );\n } else {\n return child;\n }\n });\n }\n children = (\n \n {children}\n \n );\n\n const hasStickyHeaders =\n Array.isArray(stickyHeaderIndices) && stickyHeaderIndices.length > 0;\n\n const contentContainer = (\n \n {children}\n \n );\n\n const alwaysBounceHorizontal =\n this.props.alwaysBounceHorizontal !== undefined\n ? this.props.alwaysBounceHorizontal\n : this.props.horizontal;\n\n const alwaysBounceVertical =\n this.props.alwaysBounceVertical !== undefined\n ? this.props.alwaysBounceVertical\n : !this.props.horizontal;\n\n const baseStyle =\n this.props.horizontal === true\n ? styles.baseHorizontal\n : styles.baseVertical;\n const props = {\n ...this.props,\n alwaysBounceHorizontal,\n alwaysBounceVertical,\n style: StyleSheet.compose(baseStyle, this.props.style),\n // Override the onContentSizeChange from props, since this event can\n // bubble up from TextInputs\n onContentSizeChange: null,\n onLayout: this._handleLayout,\n onMomentumScrollBegin: this._handleMomentumScrollBegin,\n onMomentumScrollEnd: this._handleMomentumScrollEnd,\n onResponderGrant: this._handleResponderGrant,\n onResponderReject: this._handleResponderReject,\n onResponderRelease: this._handleResponderRelease,\n onResponderTerminationRequest: this._handleResponderTerminationRequest,\n onScrollBeginDrag: this._handleScrollBeginDrag,\n onScrollEndDrag: this._handleScrollEndDrag,\n onScrollShouldSetResponder: this._handleScrollShouldSetResponder,\n onStartShouldSetResponder: this._handleStartShouldSetResponder,\n onStartShouldSetResponderCapture: this\n ._handleStartShouldSetResponderCapture,\n onTouchEnd: this._handleTouchEnd,\n onTouchMove: this._handleTouchMove,\n onTouchStart: this._handleTouchStart,\n onTouchCancel: this._handleTouchCancel,\n onScroll: this._handleScroll,\n scrollEventThrottle: hasStickyHeaders\n ? 1\n : this.props.scrollEventThrottle,\n sendMomentumEvents:\n this.props.onMomentumScrollBegin || this.props.onMomentumScrollEnd\n ? true\n : false,\n // default to true\n snapToStart: this.props.snapToStart !== false,\n // default to true\n snapToEnd: this.props.snapToEnd !== false,\n // pagingEnabled is overridden by snapToInterval / snapToOffsets\n pagingEnabled: Platform.select({\n // on iOS, pagingEnabled must be set to false to have snapToInterval / snapToOffsets work\n ios:\n this.props.pagingEnabled === true &&\n this.props.snapToInterval == null &&\n this.props.snapToOffsets == null,\n // on Android, pagingEnabled must be set to true to have snapToInterval / snapToOffsets work\n android:\n this.props.pagingEnabled === true ||\n this.props.snapToInterval != null ||\n this.props.snapToOffsets != null,\n }),\n };\n\n const {decelerationRate} = this.props;\n if (decelerationRate != null) {\n props.decelerationRate = processDecelerationRate(decelerationRate);\n }\n\n const refreshControl = this.props.refreshControl;\n\n if (refreshControl) {\n if (Platform.OS === 'ios') {\n // On iOS the RefreshControl is a child of the ScrollView.\n return (\n \n {refreshControl}\n {contentContainer}\n \n );\n } else if (Platform.OS === 'android') {\n // On Android wrap the ScrollView with a AndroidSwipeRefreshLayout.\n // Since the ScrollView is wrapped add the style props to the\n // AndroidSwipeRefreshLayout and use flex: 1 for the ScrollView.\n // Note: we should split props.style on the inner and outer props\n // however, the ScrollView still needs the baseStyle to be scrollable\n const {outer, inner} = splitLayoutProps(flattenStyle(props.style));\n return React.cloneElement(\n refreshControl,\n {style: StyleSheet.compose(baseStyle, outer)},\n \n {contentContainer}\n ,\n );\n }\n }\n return (\n \n {contentContainer}\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n baseVertical: {\n flexGrow: 1,\n flexShrink: 1,\n flexDirection: 'column',\n overflow: 'scroll',\n },\n baseHorizontal: {\n flexGrow: 1,\n flexShrink: 1,\n flexDirection: 'row',\n overflow: 'scroll',\n },\n contentContainerHorizontal: {\n flexDirection: 'row',\n },\n});\n\nfunction Wrapper(props, ref) {\n return ;\n}\nWrapper.displayName = 'ScrollView';\nconst ForwardedScrollView = React.forwardRef(Wrapper);\n\n// $FlowFixMe[prop-missing] Add static context to ForwardedScrollView\nForwardedScrollView.Context = ScrollViewContext;\n\nForwardedScrollView.displayName = 'ScrollView';\n\nmodule.exports = ((ForwardedScrollView: $FlowFixMe): React.AbstractComponent<\n React.ElementConfig,\n $ReadOnly<{|\n ...$Exact>>,\n ...ScrollViewImperativeMethods,\n |}>,\n> &\n ScrollViewComponentStatics);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {LayoutEvent} from '../../Types/CoreEventTypes';\nimport setAndForwardRef from 'react-native/Libraries/Utilities/setAndForwardRef';\nimport Platform from '../../Utilities/Platform';\nimport StyleSheet from '../../StyleSheet/StyleSheet';\nimport Animated from '../../Animated/Animated';\nimport * as React from 'react';\nimport {useEffect, useMemo, useRef, useCallback} from 'react';\n\nconst AnimatedView = Animated.View;\n\nexport type Props = $ReadOnly<{\n children?: React.Element<$FlowFixMe>,\n nextHeaderLayoutY: ?number,\n onLayout: (event: LayoutEvent) => void,\n scrollAnimatedValue: Animated.Value,\n // Will cause sticky headers to stick at the bottom of the ScrollView instead\n // of the top.\n inverted: ?boolean,\n // The height of the parent ScrollView. Currently only set when inverted.\n scrollViewHeight: ?number,\n nativeID?: ?string,\n hiddenOnScroll?: ?boolean,\n}>;\n\nconst ScrollViewStickyHeaderWithForwardedRef: React.AbstractComponent<\n Props,\n $ReadOnly<{\n setNextHeaderY: number => void,\n ...$Exact>,\n }>,\n> = React.forwardRef(function ScrollViewStickyHeader(props, forwardedRef) {\n const {\n inverted,\n scrollViewHeight,\n hiddenOnScroll,\n scrollAnimatedValue,\n nextHeaderLayoutY: _nextHeaderLayoutY,\n } = props;\n\n const [measured, setMeasured] = React.useState(false);\n const [layoutY, setLayoutY] = React.useState(0);\n const [layoutHeight, setLayoutHeight] = React.useState(0);\n const [translateY, setTranslateY] = React.useState(null);\n const [nextHeaderLayoutY, setNextHeaderLayoutY] = React.useState(\n _nextHeaderLayoutY,\n );\n const [isFabric, setIsFabric] = React.useState(false);\n\n const componentRef = React.useRef>();\n const _setNativeRef = setAndForwardRef({\n getForwardedRef: () => forwardedRef,\n setLocalRef: ref => {\n componentRef.current = ref;\n if (ref) {\n ref.setNextHeaderY = value => {\n setNextHeaderLayoutY(value);\n };\n setIsFabric(\n !!(\n // An internal transform mangles variables with leading \"_\" as private.\n // eslint-disable-next-line dot-notation\n ref['_internalInstanceHandle']?.stateNode?.canonical\n ),\n );\n }\n },\n });\n\n const offset = useMemo(\n () =>\n hiddenOnScroll === true\n ? Animated.diffClamp(\n scrollAnimatedValue\n .interpolate({\n extrapolateLeft: 'clamp',\n inputRange: [layoutY, layoutY + 1],\n outputRange: ([0, 1]: Array),\n })\n .interpolate({\n inputRange: [0, 1],\n outputRange: ([0, -1]: Array),\n }),\n -layoutHeight,\n 0,\n )\n : null,\n [scrollAnimatedValue, layoutHeight, layoutY, hiddenOnScroll],\n );\n\n const [\n animatedTranslateY,\n setAnimatedTranslateY,\n ] = React.useState(() => {\n const inputRange: Array = [-1, 0];\n const outputRange: Array = [0, 0];\n const initialTranslateY: Animated.Interpolation = scrollAnimatedValue.interpolate(\n {\n inputRange,\n outputRange,\n },\n );\n\n if (offset != null) {\n return Animated.add(initialTranslateY, offset);\n }\n return initialTranslateY;\n });\n\n const _haveReceivedInitialZeroTranslateY = useRef(true);\n const _timer = useRef(null);\n\n useEffect(() => {\n if (translateY !== 0 && translateY != null) {\n _haveReceivedInitialZeroTranslateY.current = false;\n }\n }, [translateY]);\n\n // This is called whenever the (Interpolated) Animated Value\n // updates, which is several times per frame during scrolling.\n // To ensure that the Fabric ShadowTree has the most recent\n // translate style of this node, we debounce the value and then\n // pass it through to the underlying node during render.\n // This is:\n // 1. Only an issue in Fabric.\n // 2. Worse in Android than iOS. In Android, but not iOS, you\n // can touch and move your finger slightly and still trigger\n // a \"tap\" event. In iOS, moving will cancel the tap in\n // both Fabric and non-Fabric. On Android when you move\n // your finger, the hit-detection moves from the Android\n // platform to JS, so we need the ShadowTree to have knowledge\n // of the current position.\n const animatedValueListener = useCallback(\n ({value}) => {\n const _debounceTimeout: number = Platform.OS === 'android' ? 15 : 64;\n // When the AnimatedInterpolation is recreated, it always initializes\n // to a value of zero and emits a value change of 0 to its listeners.\n if (value === 0 && !_haveReceivedInitialZeroTranslateY.current) {\n _haveReceivedInitialZeroTranslateY.current = true;\n return;\n }\n if (_timer.current != null) {\n clearTimeout(_timer.current);\n }\n _timer.current = setTimeout(() => {\n if (value !== translateY) {\n setTranslateY(value);\n }\n }, _debounceTimeout);\n },\n [translateY],\n );\n\n useEffect(() => {\n const inputRange: Array = [-1, 0];\n const outputRange: Array = [0, 0];\n\n if (measured) {\n if (inverted === true) {\n // The interpolation looks like:\n // - Negative scroll: no translation\n // - `stickStartPoint` is the point at which the header will start sticking.\n // It is calculated using the ScrollView viewport height so it is a the bottom.\n // - Headers that are in the initial viewport will never stick, `stickStartPoint`\n // will be negative.\n // - From 0 to `stickStartPoint` no translation. This will cause the header\n // to scroll normally until it reaches the top of the scroll view.\n // - From `stickStartPoint` to when the next header y hits the bottom edge of the header: translate\n // equally to scroll. This will cause the header to stay at the top of the scroll view.\n // - Past the collision with the next header y: no more translation. This will cause the\n // header to continue scrolling up and make room for the next sticky header.\n // In the case that there is no next header just translate equally to\n // scroll indefinitely.\n if (scrollViewHeight != null) {\n const stickStartPoint = layoutY + layoutHeight - scrollViewHeight;\n if (stickStartPoint > 0) {\n inputRange.push(stickStartPoint);\n outputRange.push(0);\n inputRange.push(stickStartPoint + 1);\n outputRange.push(1);\n // If the next sticky header has not loaded yet (probably windowing) or is the last\n // we can just keep it sticked forever.\n const collisionPoint =\n (nextHeaderLayoutY || 0) - layoutHeight - scrollViewHeight;\n if (collisionPoint > stickStartPoint) {\n inputRange.push(collisionPoint, collisionPoint + 1);\n outputRange.push(\n collisionPoint - stickStartPoint,\n collisionPoint - stickStartPoint,\n );\n }\n }\n }\n } else {\n // The interpolation looks like:\n // - Negative scroll: no translation\n // - From 0 to the y of the header: no translation. This will cause the header\n // to scroll normally until it reaches the top of the scroll view.\n // - From header y to when the next header y hits the bottom edge of the header: translate\n // equally to scroll. This will cause the header to stay at the top of the scroll view.\n // - Past the collision with the next header y: no more translation. This will cause the\n // header to continue scrolling up and make room for the next sticky header.\n // In the case that there is no next header just translate equally to\n // scroll indefinitely.\n inputRange.push(layoutY);\n outputRange.push(0);\n // If the next sticky header has not loaded yet (probably windowing) or is the last\n // we can just keep it sticked forever.\n const collisionPoint = (nextHeaderLayoutY || 0) - layoutHeight;\n if (collisionPoint >= layoutY) {\n inputRange.push(collisionPoint, collisionPoint + 1);\n outputRange.push(collisionPoint - layoutY, collisionPoint - layoutY);\n } else {\n inputRange.push(layoutY + 1);\n outputRange.push(1);\n }\n }\n }\n\n let newAnimatedTranslateY: Animated.Node = scrollAnimatedValue.interpolate({\n inputRange,\n outputRange,\n });\n\n if (offset != null) {\n newAnimatedTranslateY = Animated.add(newAnimatedTranslateY, offset);\n }\n\n // add the event listener\n let animatedListenerId;\n if (isFabric) {\n animatedListenerId = newAnimatedTranslateY.addListener(\n animatedValueListener,\n );\n }\n\n setAnimatedTranslateY(newAnimatedTranslateY);\n\n // clean up the event listener and timer\n return () => {\n if (animatedListenerId) {\n newAnimatedTranslateY.removeListener(animatedListenerId);\n }\n if (_timer.current != null) {\n clearTimeout(_timer.current);\n }\n };\n }, [nextHeaderLayoutY, measured, layoutHeight, layoutY, scrollViewHeight, scrollAnimatedValue, inverted, offset, animatedValueListener, isFabric]);\n\n const _onLayout = (event: LayoutEvent) => {\n setLayoutY(event.nativeEvent.layout.y);\n setLayoutHeight(event.nativeEvent.layout.height);\n setMeasured(true);\n\n props.onLayout(event);\n const child = React.Children.only(props.children);\n if (child.props.onLayout) {\n child.props.onLayout(event);\n }\n };\n\n const child = React.Children.only(props.children);\n\n // TODO T68319535: remove this if NativeAnimated is rewritten for Fabric\n const passthroughAnimatedPropExplicitValues =\n isFabric && translateY != null\n ? {\n style: {transform: [{translateY: translateY}]},\n }\n : null;\n\n return (\n /* $FlowFixMe[prop-missing] passthroughAnimatedPropExplicitValues isn't properly\n included in the Animated.View flow type. */\n \n {React.cloneElement(child, {\n style: styles.fill, // We transfer the child style to the wrapper.\n onLayout: undefined, // we call this manually through our this._onLayout\n })}\n \n );\n});\n\nconst styles = StyleSheet.create({\n header: {\n zIndex: 10,\n position: 'relative',\n },\n fill: {\n flex: 1,\n },\n});\n\nexport default ScrollViewStickyHeaderWithForwardedRef;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport NativeEventEmitter from '../../EventEmitter/NativeEventEmitter';\nimport LayoutAnimation from '../../LayoutAnimation/LayoutAnimation';\nimport dismissKeyboard from '../../Utilities/dismissKeyboard';\nimport Platform from '../../Utilities/Platform';\nimport NativeKeyboardObserver from './NativeKeyboardObserver';\nimport type {EventSubscription} from '../../vendor/emitter/EventEmitter';\n\nexport type KeyboardEventName = $Keys;\n\nexport type KeyboardEventEasing =\n | 'easeIn'\n | 'easeInEaseOut'\n | 'easeOut'\n | 'linear'\n | 'keyboard';\n\nexport type KeyboardEventCoordinates = $ReadOnly<{|\n screenX: number,\n screenY: number,\n width: number,\n height: number,\n|}>;\n\nexport type KeyboardEvent = AndroidKeyboardEvent | IOSKeyboardEvent;\n\ntype BaseKeyboardEvent = {|\n duration: number,\n easing: KeyboardEventEasing,\n endCoordinates: KeyboardEventCoordinates,\n|};\n\nexport type AndroidKeyboardEvent = $ReadOnly<{|\n ...BaseKeyboardEvent,\n duration: 0,\n easing: 'keyboard',\n|}>;\n\nexport type IOSKeyboardEvent = $ReadOnly<{|\n ...BaseKeyboardEvent,\n startCoordinates: KeyboardEventCoordinates,\n isEventFromThisApp: boolean,\n|}>;\n\ntype KeyboardEventDefinitions = {\n keyboardWillShow: [KeyboardEvent],\n keyboardDidShow: [KeyboardEvent],\n keyboardWillHide: [KeyboardEvent],\n keyboardDidHide: [KeyboardEvent],\n keyboardWillChangeFrame: [KeyboardEvent],\n keyboardDidChangeFrame: [KeyboardEvent],\n};\n\n/**\n * `Keyboard` module to control keyboard events.\n *\n * ### Usage\n *\n * The Keyboard module allows you to listen for native events and react to them, as\n * well as make changes to the keyboard, like dismissing it.\n *\n *```\n * import React, { Component } from 'react';\n * import { Keyboard, TextInput } from 'react-native';\n *\n * class Example extends Component {\n * componentWillMount () {\n * this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow);\n * this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);\n * }\n *\n * componentWillUnmount () {\n * this.keyboardDidShowListener.remove();\n * this.keyboardDidHideListener.remove();\n * }\n *\n * _keyboardDidShow () {\n * alert('Keyboard Shown');\n * }\n *\n * _keyboardDidHide () {\n * alert('Keyboard Hidden');\n * }\n *\n * render() {\n * return (\n * \n * );\n * }\n * }\n *```\n */\n\nclass Keyboard {\n _emitter: NativeEventEmitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeKeyboardObserver,\n );\n\n /**\n * The `addListener` function connects a JavaScript function to an identified native\n * keyboard notification event.\n *\n * This function then returns the reference to the listener.\n *\n * @param {string} eventName The `nativeEvent` is the string that identifies the event you're listening for. This\n *can be any of the following:\n *\n * - `keyboardWillShow`\n * - `keyboardDidShow`\n * - `keyboardWillHide`\n * - `keyboardDidHide`\n * - `keyboardWillChangeFrame`\n * - `keyboardDidChangeFrame`\n *\n * Note that if you set `android:windowSoftInputMode` to `adjustResize` or `adjustNothing`,\n * only `keyboardDidShow` and `keyboardDidHide` events will be available on Android.\n * `keyboardWillShow` as well as `keyboardWillHide` are generally not available on Android\n * since there is no native corresponding event.\n *\n * @param {function} callback function to be called when the event fires.\n */\n addListener>(\n eventType: K,\n listener: (...$ElementType) => mixed,\n context?: mixed,\n ): EventSubscription {\n return this._emitter.addListener(eventType, listener);\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addEventListener`.\n */\n removeEventListener>(\n eventType: K,\n listener: (...$ElementType) => mixed,\n ): void {\n // NOTE: This will report a deprecation notice via `console.error`.\n this._emitter.removeListener(eventType, listener);\n }\n\n /**\n * Removes all listeners for a specific event type.\n *\n * @param {string} eventType The native event string listeners are watching which will be removed.\n */\n removeAllListeners>(eventType: ?K): void {\n this._emitter.removeAllListeners(eventType);\n }\n\n /**\n * Dismisses the active keyboard and removes focus.\n */\n dismiss(): void {\n dismissKeyboard();\n }\n\n /**\n * Useful for syncing TextInput (or other keyboard accessory view) size of\n * position changes with keyboard movements.\n */\n scheduleLayoutAnimation(event: KeyboardEvent): void {\n const {duration, easing} = event;\n if (duration != null && duration !== 0) {\n LayoutAnimation.configureNext({\n duration: duration,\n update: {\n duration: duration,\n type: (easing != null && LayoutAnimation.Types[easing]) || 'keyboard',\n },\n });\n }\n }\n}\n\nmodule.exports = (new Keyboard(): Keyboard);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n'use strict';\n\nconst UIManager = require('../ReactNative/UIManager');\nimport type {Spec as FabricUIManagerSpec} from '../ReactNative/FabricUIManager';\nimport type {\n LayoutAnimationConfig as LayoutAnimationConfig_,\n LayoutAnimationType,\n LayoutAnimationProperty,\n} from '../Renderer/shims/ReactNativeTypes';\n\nimport Platform from '../Utilities/Platform';\n\n// Reexport type\nexport type LayoutAnimationConfig = LayoutAnimationConfig_;\n\ntype OnAnimationDidEndCallback = () => void;\ntype OnAnimationDidFailCallback = () => void;\n\n/**\n * Configures the next commit to be animated.\n *\n * onAnimationDidEnd is guaranteed to be called when the animation completes.\n * onAnimationDidFail is *never* called in the classic, pre-Fabric renderer,\n * and never has been. In the new renderer (Fabric) it is called only if configuration\n * parsing fails.\n */\nfunction configureNext(\n config: LayoutAnimationConfig,\n onAnimationDidEnd?: OnAnimationDidEndCallback,\n onAnimationDidFail?: OnAnimationDidFailCallback,\n) {\n if (Platform.isTesting) {\n return;\n }\n\n // Since LayoutAnimations may possibly be disabled for now on iOS (Fabric),\n // or Android (non-Fabric) we race a setTimeout with animation completion,\n // in case onComplete is never called\n // from native. Once LayoutAnimations+Fabric unconditionally ship everywhere, we can\n // delete this mechanism at least in the Fabric branch.\n let animationCompletionHasRun = false;\n const onAnimationComplete = () => {\n if (animationCompletionHasRun) {\n return;\n }\n animationCompletionHasRun = true;\n clearTimeout(raceWithAnimationId);\n onAnimationDidEnd?.();\n };\n const raceWithAnimationId = setTimeout(\n onAnimationComplete,\n (config.duration ?? 0) + 17 /* one frame + 1ms */,\n );\n\n // In Fabric, LayoutAnimations are unconditionally enabled for Android, and\n // conditionally enabled on iOS (pending fully shipping; this is a temporary state).\n const FabricUIManager: FabricUIManagerSpec = global?.nativeFabricUIManager;\n if (FabricUIManager?.configureNextLayoutAnimation) {\n global?.nativeFabricUIManager?.configureNextLayoutAnimation(\n config,\n onAnimationComplete,\n onAnimationDidFail ??\n function() {} /* this will only be called if configuration parsing fails */,\n );\n return;\n }\n\n // This will only run if Fabric is *not* installed.\n // If you have Fabric + non-Fabric running in the same VM, non-Fabric LayoutAnimations\n // will not work.\n if (UIManager?.configureNextLayoutAnimation) {\n UIManager.configureNextLayoutAnimation(\n config,\n onAnimationComplete ?? function() {},\n onAnimationDidFail ??\n function() {} /* this should never be called in Non-Fabric */,\n );\n }\n}\n\nfunction create(\n duration: number,\n type: LayoutAnimationType,\n property: LayoutAnimationProperty,\n): LayoutAnimationConfig {\n return {\n duration,\n create: {type, property},\n update: {type},\n delete: {type, property},\n };\n}\n\nconst Presets = {\n easeInEaseOut: (create(\n 300,\n 'easeInEaseOut',\n 'opacity',\n ): LayoutAnimationConfig),\n linear: (create(500, 'linear', 'opacity'): LayoutAnimationConfig),\n spring: {\n duration: 700,\n create: {\n type: 'linear',\n property: 'opacity',\n },\n update: {\n type: 'spring',\n springDamping: 0.4,\n },\n delete: {\n type: 'linear',\n property: 'opacity',\n },\n },\n};\n\n/**\n * Automatically animates views to their new positions when the\n * next layout happens.\n *\n * A common way to use this API is to call it before calling `setState`.\n *\n * Note that in order to get this to work on **Android** you need to set the following flags via `UIManager`:\n *\n * UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);\n */\nconst LayoutAnimation = {\n /**\n * Schedules an animation to happen on the next layout.\n *\n * @param config Specifies animation properties:\n *\n * - `duration` in milliseconds\n * - `create`, `AnimationConfig` for animating in new views\n * - `update`, `AnimationConfig` for animating views that have been updated\n *\n * @param onAnimationDidEnd Called when the animation finished.\n * Only supported on iOS.\n * @param onError Called on error. Only supported on iOS.\n */\n configureNext,\n /**\n * Helper for creating a config for `configureNext`.\n */\n create,\n Types: Object.freeze({\n spring: 'spring',\n linear: 'linear',\n easeInEaseOut: 'easeInEaseOut',\n easeIn: 'easeIn',\n easeOut: 'easeOut',\n keyboard: 'keyboard',\n }),\n Properties: Object.freeze({\n opacity: 'opacity',\n scaleX: 'scaleX',\n scaleY: 'scaleY',\n scaleXY: 'scaleXY',\n }),\n checkConfig(...args: Array) {\n console.error('LayoutAnimation.checkConfig(...) has been disabled.');\n },\n Presets,\n easeInEaseOut: (configureNext.bind(null, Presets.easeInEaseOut): (\n onAnimationDidEnd?: OnAnimationDidEndCallback,\n ) => void),\n linear: (configureNext.bind(null, Presets.linear): (\n onAnimationDidEnd?: OnAnimationDidEndCallback,\n ) => void),\n spring: (configureNext.bind(null, Presets.spring): (\n onAnimationDidEnd?: OnAnimationDidEndCallback,\n ) => void),\n};\n\nmodule.exports = LayoutAnimation;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\n// This function dismisses the currently-open keyboard, if any.\n\n'use strict';\n\nconst TextInputState = require('../Components/TextInput/TextInputState');\n\nfunction dismissKeyboard() {\n TextInputState.blurTextInput(TextInputState.currentlyFocusedInput());\n}\n\nmodule.exports = dismissKeyboard;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.get('KeyboardObserver'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport NativeFrameRateLogger from './NativeFrameRateLogger';\n\nconst invariant = require('invariant');\n\n/**\n * Flow API for native FrameRateLogger module. If the native module is not installed, function calls\n * are just no-ops.\n *\n * Typical behavior is that `setContext` is called when a new screen is loaded (e.g. via a\n * navigation integration), and then `beginScroll` is called by `ScrollResponder` at which point the\n * native module then begins tracking frame drops. When `ScrollResponder` calls `endScroll`, the\n * native module gathers up all it's frame drop data and reports it via an analytics pipeline for\n * analysis.\n *\n * Note that `beginScroll` may be called multiple times by `ScrollResponder` - unclear if that's a\n * bug, but the native module should be robust to that.\n *\n * In the future we may add support for tracking frame drops in other types of interactions beyond\n * scrolling.\n */\nconst FrameRateLogger = {\n /**\n * Enable `debug` to see local logs of what's going on. `reportStackTraces` will grab stack traces\n * during UI thread stalls and upload them if the native module supports it.\n */\n setGlobalOptions: function(options: {\n debug?: boolean,\n reportStackTraces?: boolean,\n ...\n }) {\n if (options.debug !== undefined) {\n invariant(\n NativeFrameRateLogger,\n 'Trying to debug FrameRateLogger without the native module!',\n );\n }\n if (NativeFrameRateLogger) {\n // Needs to clone the object first to avoid modifying the argument.\n const optionsClone = {\n debug: !!options.debug,\n reportStackTraces: !!options.reportStackTraces,\n };\n NativeFrameRateLogger.setGlobalOptions(optionsClone);\n }\n },\n\n /**\n * Must call `setContext` before any events can be properly tracked, which is done automatically\n * in `AppRegistry`, but navigation is also a common place to hook in.\n */\n setContext: function(context: string) {\n NativeFrameRateLogger && NativeFrameRateLogger.setContext(context);\n },\n\n /**\n * Called in `ScrollResponder` so any component that uses that module will handle this\n * automatically.\n */\n beginScroll() {\n NativeFrameRateLogger && NativeFrameRateLogger.beginScroll();\n },\n\n /**\n * Called in `ScrollResponder` so any component that uses that module will handle this\n * automatically.\n */\n endScroll() {\n NativeFrameRateLogger && NativeFrameRateLogger.endScroll();\n },\n};\n\nmodule.exports = FrameRateLogger;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +setGlobalOptions: (options: {|\n +debug?: ?boolean,\n +reportStackTraces?: ?boolean,\n |}) => void;\n +setContext: (context: string) => void;\n +beginScroll: () => void;\n +endScroll: () => void;\n}\n\nexport default (TurboModuleRegistry.get('FrameRateLogger'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport Platform from '../../Utilities/Platform';\n\nfunction processDecelerationRate(\n decelerationRate: number | 'normal' | 'fast',\n): number {\n if (decelerationRate === 'normal') {\n return Platform.select({\n ios: 0.998,\n android: 0.985,\n });\n } else if (decelerationRate === 'fast') {\n return Platform.select({\n ios: 0.99,\n android: 0.9,\n });\n }\n return decelerationRate;\n}\n\nmodule.exports = processDecelerationRate;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {____ViewStyle_Internal} from './StyleSheetTypes';\n\nexport default function splitLayoutProps(\n props: ?____ViewStyle_Internal,\n): {\n outer: ?____ViewStyle_Internal,\n inner: ?____ViewStyle_Internal,\n} {\n let outer: ?____ViewStyle_Internal = null;\n let inner: ?____ViewStyle_Internal = null;\n\n if (props != null) {\n // $FlowIgnore[incompatible-exact] Will contain a subset of keys from `props`.\n outer = {};\n // $FlowIgnore[incompatible-exact] Will contain a subset of keys from `props`.\n inner = {};\n\n for (const prop of Object.keys(props)) {\n switch (prop) {\n case 'margin':\n case 'marginHorizontal':\n case 'marginVertical':\n case 'marginBottom':\n case 'marginTop':\n case 'marginLeft':\n case 'marginRight':\n case 'flex':\n case 'flexGrow':\n case 'flexShrink':\n case 'flexBasis':\n case 'alignSelf':\n case 'height':\n case 'minHeight':\n case 'maxHeight':\n case 'width':\n case 'minWidth':\n case 'maxWidth':\n case 'position':\n case 'left':\n case 'right':\n case 'bottom':\n case 'top':\n case 'transform':\n // $FlowFixMe[cannot-write]\n outer[prop] = props[prop];\n break;\n default:\n // $FlowFixMe[cannot-write]\n inner[prop] = props[prop];\n break;\n }\n }\n }\n\n return {outer, inner};\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport * as React from 'react';\n\ntype Value = {horizontal: boolean} | null;\n\nconst ScrollViewContext: React.Context = React.createContext(null);\nif (__DEV__) {\n ScrollViewContext.displayName = 'ScrollViewContext';\n}\nexport default ScrollViewContext;\n\nexport const HORIZONTAL: Value = Object.freeze({horizontal: true});\nexport const VERTICAL: Value = Object.freeze({horizontal: false});\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport codegenNativeCommands from '../../Utilities/codegenNativeCommands';\nimport * as React from 'react';\nimport type {Double} from 'react-native/Libraries/Types/CodegenTypes';\n\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\ntype ScrollViewNativeComponentType = HostComponent;\ninterface NativeCommands {\n +flashScrollIndicators: (\n viewRef: React.ElementRef,\n ) => void;\n +scrollTo: (\n viewRef: React.ElementRef,\n x: Double,\n y: Double,\n animated: boolean,\n ) => void;\n +scrollToEnd: (\n viewRef: React.ElementRef,\n animated: boolean,\n ) => void;\n +zoomToRect: (\n viewRef: React.ElementRef,\n rect: {|\n x: Double,\n y: Double,\n width: Double,\n height: Double,\n animated?: boolean,\n |},\n animated?: boolean,\n ) => void;\n}\n\nexport default (codegenNativeCommands({\n supportedCommands: [\n 'flashScrollIndicators',\n 'scrollTo',\n 'scrollToEnd',\n 'zoomToRect',\n ],\n}): NativeCommands);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n|}>;\n\ntype NativeType = HostComponent;\n\nexport default (codegenNativeComponent(\n 'AndroidHorizontalScrollContentView',\n): NativeType);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {ScrollViewNativeProps as Props} from './ScrollViewNativeComponentType';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport * as NativeComponentRegistry from '../../NativeComponent/NativeComponentRegistry';\n\nconst AndroidHorizontalScrollViewNativeComponent: HostComponent = NativeComponentRegistry.get(\n 'AndroidHorizontalScrollView',\n () => ({\n uiViewClassName: 'AndroidHorizontalScrollView',\n bubblingEventTypes: {},\n directEventTypes: {},\n validAttributes: {\n decelerationRate: true,\n disableIntervalMomentum: true,\n endFillColor: {process: require('../../StyleSheet/processColor')},\n fadingEdgeLength: true,\n nestedScrollEnabled: true,\n overScrollMode: true,\n pagingEnabled: true,\n persistentScrollbar: true,\n scrollEnabled: true,\n scrollPerfTag: true,\n sendMomentumEvents: true,\n showsHorizontalScrollIndicator: true,\n snapToEnd: true,\n snapToInterval: true,\n snapToStart: true,\n snapToOffsets: true,\n contentOffset: true,\n },\n }),\n);\n\nexport default AndroidHorizontalScrollViewNativeComponent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport * as NativeComponentRegistry from '../../NativeComponent/NativeComponentRegistry';\nimport type {ViewProps as Props} from '../View/ViewPropTypes';\n\nconst ScrollContentViewNativeComponent: HostComponent = NativeComponentRegistry.get(\n 'RCTScrollContentView',\n () => ({\n uiViewClassName: 'RCTScrollContentView',\n bubblingEventTypes: {},\n directEventTypes: {},\n validAttributes: {},\n }),\n);\n\nexport default ScrollContentViewNativeComponent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {ScrollViewNativeProps as Props} from './ScrollViewNativeComponentType';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport * as NativeComponentRegistry from '../../NativeComponent/NativeComponentRegistry';\n\nconst ScrollViewNativeComponent: HostComponent = NativeComponentRegistry.get(\n 'RCTScrollView',\n () => ({\n uiViewClassName: 'RCTScrollView',\n bubblingEventTypes: {},\n directEventTypes: {\n topScrollToTop: {\n registrationName: 'onScrollToTop',\n },\n },\n validAttributes: {\n alwaysBounceHorizontal: true,\n alwaysBounceVertical: true,\n automaticallyAdjustContentInsets: true,\n automaticallyAdjustsScrollIndicatorInsets: true,\n bounces: true,\n bouncesZoom: true,\n canCancelContentTouches: true,\n centerContent: true,\n contentInset: {\n diff: require('../../Utilities/differ/pointsDiffer'),\n },\n contentOffset: {\n diff: require('../../Utilities/differ/pointsDiffer'),\n },\n contentInsetAdjustmentBehavior: true,\n decelerationRate: true,\n directionalLockEnabled: true,\n disableIntervalMomentum: true,\n endFillColor: {\n process: require('../../StyleSheet/processColor'),\n },\n fadingEdgeLength: true,\n indicatorStyle: true,\n inverted: true,\n keyboardDismissMode: true,\n maintainVisibleContentPosition: true,\n maximumZoomScale: true,\n minimumZoomScale: true,\n nestedScrollEnabled: true,\n onMomentumScrollBegin: true,\n onMomentumScrollEnd: true,\n onScroll: true,\n onScrollBeginDrag: true,\n onScrollEndDrag: true,\n onScrollToTop: true,\n overScrollMode: true,\n pagingEnabled: true,\n persistentScrollbar: true,\n pinchGestureEnabled: true,\n scrollEnabled: true,\n scrollEventThrottle: true,\n scrollIndicatorInsets: {\n diff: require('../../Utilities/differ/pointsDiffer'),\n },\n scrollPerfTag: true,\n scrollToOverflowEnabled: true,\n scrollsToTop: true,\n sendMomentumEvents: true,\n showsHorizontalScrollIndicator: true,\n showsVerticalScrollIndicator: true,\n snapToAlignment: true,\n snapToEnd: true,\n snapToInterval: true,\n snapToOffsets: true,\n snapToStart: true,\n zoomScale: true,\n },\n }),\n);\n\nexport default ScrollViewNativeComponent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst invariant = require('invariant');\n\nexport type ViewToken = {\n item: any,\n key: string,\n index: ?number,\n isViewable: boolean,\n section?: any,\n ...\n};\n\nexport type ViewabilityConfigCallbackPair = {\n viewabilityConfig: ViewabilityConfig,\n onViewableItemsChanged: (info: {\n viewableItems: Array,\n changed: Array,\n ...\n }) => void,\n ...\n};\n\nexport type ViewabilityConfig = {|\n /**\n * Minimum amount of time (in milliseconds) that an item must be physically viewable before the\n * viewability callback will be fired. A high number means that scrolling through content without\n * stopping will not mark the content as viewable.\n */\n minimumViewTime?: number,\n\n /**\n * Percent of viewport that must be covered for a partially occluded item to count as\n * \"viewable\", 0-100. Fully visible items are always considered viewable. A value of 0 means\n * that a single pixel in the viewport makes the item viewable, and a value of 100 means that\n * an item must be either entirely visible or cover the entire viewport to count as viewable.\n */\n viewAreaCoveragePercentThreshold?: number,\n\n /**\n * Similar to `viewAreaPercentThreshold`, but considers the percent of the item that is visible,\n * rather than the fraction of the viewable area it covers.\n */\n itemVisiblePercentThreshold?: number,\n\n /**\n * Nothing is considered viewable until the user scrolls or `recordInteraction` is called after\n * render.\n */\n waitForInteraction?: boolean,\n|};\n\n/**\n * A Utility class for calculating viewable items based on current metrics like scroll position and\n * layout.\n *\n * An item is said to be in a \"viewable\" state when any of the following\n * is true for longer than `minimumViewTime` milliseconds (after an interaction if `waitForInteraction`\n * is true):\n *\n * - Occupying >= `viewAreaCoveragePercentThreshold` of the view area XOR fraction of the item\n * visible in the view area >= `itemVisiblePercentThreshold`.\n * - Entirely visible on screen\n */\nclass ViewabilityHelper {\n _config: ViewabilityConfig;\n _hasInteracted: boolean = false;\n _timers: Set = new Set();\n _viewableIndices: Array = [];\n _viewableItems: Map = new Map();\n\n constructor(\n config: ViewabilityConfig = {viewAreaCoveragePercentThreshold: 0},\n ) {\n this._config = config;\n }\n\n /**\n * Cleanup, e.g. on unmount. Clears any pending timers.\n */\n dispose() {\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To see\n * the error delete this comment and run Flow. */\n this._timers.forEach(clearTimeout);\n }\n\n /**\n * Determines which items are viewable based on the current metrics and config.\n */\n computeViewableItems(\n itemCount: number,\n scrollOffset: number,\n viewportHeight: number,\n getFrameMetrics: (\n index: number,\n ) => ?{\n length: number,\n offset: number,\n ...\n },\n // Optional optimization to reduce the scan size\n renderRange?: {\n first: number,\n last: number,\n ...\n },\n ): Array {\n const {\n itemVisiblePercentThreshold,\n viewAreaCoveragePercentThreshold,\n } = this._config;\n const viewAreaMode = viewAreaCoveragePercentThreshold != null;\n const viewablePercentThreshold = viewAreaMode\n ? viewAreaCoveragePercentThreshold\n : itemVisiblePercentThreshold;\n invariant(\n viewablePercentThreshold != null &&\n (itemVisiblePercentThreshold != null) !==\n (viewAreaCoveragePercentThreshold != null),\n 'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold',\n );\n const viewableIndices = [];\n if (itemCount === 0) {\n return viewableIndices;\n }\n let firstVisible = -1;\n const {first, last} = renderRange || {first: 0, last: itemCount - 1};\n if (last >= itemCount) {\n console.warn(\n 'Invalid render range computing viewability ' +\n JSON.stringify({renderRange, itemCount}),\n );\n return [];\n }\n for (let idx = first; idx <= last; idx++) {\n const metrics = getFrameMetrics(idx);\n if (!metrics) {\n continue;\n }\n const top = metrics.offset - scrollOffset;\n const bottom = top + metrics.length;\n if (top < viewportHeight && bottom > 0) {\n firstVisible = idx;\n if (\n _isViewable(\n viewAreaMode,\n viewablePercentThreshold,\n top,\n bottom,\n viewportHeight,\n metrics.length,\n )\n ) {\n viewableIndices.push(idx);\n }\n } else if (firstVisible >= 0) {\n break;\n }\n }\n return viewableIndices;\n }\n\n /**\n * Figures out which items are viewable and how that has changed from before and calls\n * `onViewableItemsChanged` as appropriate.\n */\n onUpdate(\n itemCount: number,\n scrollOffset: number,\n viewportHeight: number,\n getFrameMetrics: (\n index: number,\n ) => ?{\n length: number,\n offset: number,\n ...\n },\n createViewToken: (index: number, isViewable: boolean) => ViewToken,\n onViewableItemsChanged: ({\n viewableItems: Array,\n changed: Array,\n ...\n }) => void,\n // Optional optimization to reduce the scan size\n renderRange?: {\n first: number,\n last: number,\n ...\n },\n ): void {\n if (\n (this._config.waitForInteraction && !this._hasInteracted) ||\n itemCount === 0 ||\n !getFrameMetrics(0)\n ) {\n return;\n }\n let viewableIndices = [];\n if (itemCount) {\n viewableIndices = this.computeViewableItems(\n itemCount,\n scrollOffset,\n viewportHeight,\n getFrameMetrics,\n renderRange,\n );\n }\n if (\n this._viewableIndices.length === viewableIndices.length &&\n this._viewableIndices.every((v, ii) => v === viewableIndices[ii])\n ) {\n // We might get a lot of scroll events where visibility doesn't change and we don't want to do\n // extra work in those cases.\n return;\n }\n this._viewableIndices = viewableIndices;\n if (this._config.minimumViewTime) {\n const handle = setTimeout(() => {\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To\n * see the error delete this comment and run Flow. */\n this._timers.delete(handle);\n this._onUpdateSync(\n viewableIndices,\n onViewableItemsChanged,\n createViewToken,\n );\n }, this._config.minimumViewTime);\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To see\n * the error delete this comment and run Flow. */\n this._timers.add(handle);\n } else {\n this._onUpdateSync(\n viewableIndices,\n onViewableItemsChanged,\n createViewToken,\n );\n }\n }\n\n /**\n * clean-up cached _viewableIndices to evaluate changed items on next update\n */\n resetViewableIndices() {\n this._viewableIndices = [];\n }\n\n /**\n * Records that an interaction has happened even if there has been no scroll.\n */\n recordInteraction() {\n this._hasInteracted = true;\n }\n\n _onUpdateSync(\n viewableIndicesToCheck,\n onViewableItemsChanged,\n createViewToken,\n ) {\n // Filter out indices that have gone out of view since this call was scheduled.\n viewableIndicesToCheck = viewableIndicesToCheck.filter(ii =>\n this._viewableIndices.includes(ii),\n );\n const prevItems = this._viewableItems;\n const nextItems = new Map(\n viewableIndicesToCheck.map(ii => {\n const viewable = createViewToken(ii, true);\n return [viewable.key, viewable];\n }),\n );\n\n const changed = [];\n for (const [key, viewable] of nextItems) {\n if (!prevItems.has(key)) {\n changed.push(viewable);\n }\n }\n for (const [key, viewable] of prevItems) {\n if (!nextItems.has(key)) {\n changed.push({...viewable, isViewable: false});\n }\n }\n if (changed.length > 0) {\n this._viewableItems = nextItems;\n onViewableItemsChanged({\n viewableItems: Array.from(nextItems.values()),\n changed,\n viewabilityConfig: this._config,\n });\n }\n }\n}\n\nfunction _isViewable(\n viewAreaMode: boolean,\n viewablePercentThreshold: number,\n top: number,\n bottom: number,\n viewportHeight: number,\n itemLength: number,\n): boolean {\n if (_isEntirelyVisible(top, bottom, viewportHeight)) {\n return true;\n } else {\n const pixels = _getPixelsVisible(top, bottom, viewportHeight);\n const percent =\n 100 * (viewAreaMode ? pixels / viewportHeight : pixels / itemLength);\n return percent >= viewablePercentThreshold;\n }\n}\n\nfunction _getPixelsVisible(\n top: number,\n bottom: number,\n viewportHeight: number,\n): number {\n const visibleHeight = Math.min(bottom, viewportHeight) - Math.max(top, 0);\n return Math.max(0, visibleHeight);\n}\n\nfunction _isEntirelyVisible(\n top: number,\n bottom: number,\n viewportHeight: number,\n): boolean {\n return top >= 0 && bottom <= viewportHeight && bottom > top;\n}\n\nmodule.exports = ViewabilityHelper;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\nconst Image = require('../../Image/Image');\nconst createAnimatedComponent = require('../createAnimatedComponent');\n\nimport type {AnimatedComponentType} from '../createAnimatedComponent';\n\nmodule.exports = (createAnimatedComponent((Image: $FlowFixMe), {\n collapsable: false,\n}): AnimatedComponentType<\n React.ElementConfig,\n React.ElementRef,\n>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport DeprecatedImagePropType from '../DeprecatedPropTypes/DeprecatedImagePropType';\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet/StyleSheet';\n\nimport ImageAnalyticsTagContext from './ImageAnalyticsTagContext';\nimport flattenStyle from '../StyleSheet/flattenStyle';\nimport resolveAssetSource from './resolveAssetSource';\n\nimport type {ImageProps as ImagePropsType} from './ImageProps';\n\nimport type {ImageStyleProp} from '../StyleSheet/StyleSheet';\nimport NativeImageLoaderIOS from './NativeImageLoaderIOS';\n\nimport ImageViewNativeComponent from './ImageViewNativeComponent';\nimport type {RootTag} from 'react-native/Libraries/Types/RootTagTypes';\n\nfunction getSize(\n uri: string,\n success: (width: number, height: number) => void,\n failure?: (error: any) => void,\n) {\n NativeImageLoaderIOS.getSize(uri)\n .then(([width, height]) => success(width, height))\n .catch(\n failure ||\n function() {\n console.warn('Failed to get size for image ' + uri);\n },\n );\n}\n\nfunction getSizeWithHeaders(\n uri: string,\n headers: {[string]: string, ...},\n success: (width: number, height: number) => void,\n failure?: (error: any) => void,\n): any {\n return NativeImageLoaderIOS.getSizeWithHeaders(uri, headers)\n .then(function(sizes) {\n success(sizes.width, sizes.height);\n })\n .catch(\n failure ||\n function() {\n console.warn('Failed to get size for image: ' + uri);\n },\n );\n}\n\nfunction prefetchWithMetadata(\n url: string,\n queryRootName: string,\n rootTag?: ?RootTag,\n): any {\n if (NativeImageLoaderIOS.prefetchImageWithMetadata) {\n // number params like rootTag cannot be nullable before TurboModules is available\n return NativeImageLoaderIOS.prefetchImageWithMetadata(\n url,\n queryRootName,\n // NOTE: RootTag type\n // $FlowFixMe[incompatible-call] RootTag: number is incompatible with RootTag\n rootTag ? rootTag : 0,\n );\n } else {\n return NativeImageLoaderIOS.prefetchImage(url);\n }\n}\n\nfunction prefetch(url: string): any {\n return NativeImageLoaderIOS.prefetchImage(url);\n}\n\nasync function queryCache(\n urls: Array,\n): Promise<{[string]: 'memory' | 'disk' | 'disk/memory', ...}> {\n return await NativeImageLoaderIOS.queryCache(urls);\n}\n\ntype ImageComponentStatics = $ReadOnly<{|\n getSize: typeof getSize,\n getSizeWithHeaders: typeof getSizeWithHeaders,\n prefetch: typeof prefetch,\n prefetchWithMetadata: typeof prefetchWithMetadata,\n queryCache: typeof queryCache,\n resolveAssetSource: typeof resolveAssetSource,\n propTypes: typeof DeprecatedImagePropType,\n|}>;\n\n/**\n * A React component for displaying different types of images,\n * including network images, static resources, temporary local images, and\n * images from local disk, such as the camera roll.\n *\n * See https://reactnative.dev/docs/image.html\n */\nlet Image = (props: ImagePropsType, forwardedRef) => {\n const source = resolveAssetSource(props.source) || {\n uri: undefined,\n width: undefined,\n height: undefined,\n };\n\n let sources;\n let style: ImageStyleProp;\n if (Array.isArray(source)) {\n style = flattenStyle([styles.base, props.style]) || {};\n sources = source;\n } else {\n const {width, height, uri} = source;\n style = flattenStyle([{width, height}, styles.base, props.style]) || {};\n sources = [source];\n\n if (uri === '') {\n console.warn('source.uri should not be an empty string');\n }\n }\n\n // $FlowFixMe[incompatible-use]\n // $FlowFixMe[incompatible-type]\n const resizeMode = props.resizeMode || style.resizeMode || 'cover';\n // $FlowFixMe[prop-missing]\n // $FlowFixMe[incompatible-use]\n const tintColor = style.tintColor;\n\n if (props.src != null) {\n console.warn(\n 'The component requires a `source` property rather than `src`.',\n );\n }\n\n if (props.children != null) {\n throw new Error(\n 'The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.',\n );\n }\n\n return (\n \n {analyticTag => {\n return (\n \n );\n }}\n \n );\n};\n\nImage = React.forwardRef<\n ImagePropsType,\n React.ElementRef,\n>(Image);\nImage.displayName = 'Image';\n\n/**\n * Retrieve the width and height (in pixels) of an image prior to displaying it.\n *\n * See https://reactnative.dev/docs/image.html#getsize\n */\n/* $FlowFixMe[prop-missing] (>=0.89.0 site=react_native_ios_fb) This comment\n * suppresses an error found when Flow v0.89 was deployed. To see the error,\n * delete this comment and run Flow. */\nImage.getSize = getSize;\n\n/**\n * Retrieve the width and height (in pixels) of an image prior to displaying it\n * with the ability to provide the headers for the request.\n *\n * See https://reactnative.dev/docs/image.html#getsizewithheaders\n */\n/* $FlowFixMe[prop-missing] (>=0.89.0 site=react_native_ios_fb) This comment\n * suppresses an error found when Flow v0.89 was deployed. To see the error,\n * delete this comment and run Flow. */\nImage.getSizeWithHeaders = getSizeWithHeaders;\n\n/**\n * Prefetches a remote image for later use by downloading it to the disk\n * cache.\n *\n * See https://reactnative.dev/docs/image.html#prefetch\n */\n/* $FlowFixMe[prop-missing] (>=0.89.0 site=react_native_ios_fb) This comment\n * suppresses an error found when Flow v0.89 was deployed. To see the error,\n * delete this comment and run Flow. */\nImage.prefetch = prefetch;\n\n/**\n * Prefetches a remote image for later use by downloading it to the disk\n * cache, and adds metadata for queryRootName and rootTag.\n *\n * See https://reactnative.dev/docs/image.html#prefetch\n */\n/* $FlowFixMe[prop-missing] (>=0.89.0 site=react_native_ios_fb) This comment\n * suppresses an error found when Flow v0.89 was deployed. To see the error,\n * delete this comment and run Flow. */\nImage.prefetchWithMetadata = prefetchWithMetadata;\n\n/**\n * Performs cache interrogation.\n *\n * See https://reactnative.dev/docs/image.html#querycache\n */\n/* $FlowFixMe[prop-missing] (>=0.89.0 site=react_native_ios_fb) This comment\n * suppresses an error found when Flow v0.89 was deployed. To see the error,\n * delete this comment and run Flow. */\nImage.queryCache = queryCache;\n\n/**\n * Resolves an asset reference into an object.\n *\n * See https://reactnative.dev/docs/image.html#resolveassetsource\n */\n/* $FlowFixMe[prop-missing] (>=0.89.0 site=react_native_ios_fb) This comment\n * suppresses an error found when Flow v0.89 was deployed. To see the error,\n * delete this comment and run Flow. */\nImage.resolveAssetSource = resolveAssetSource;\n\nImage.propTypes = DeprecatedImagePropType;\n\nconst styles = StyleSheet.create({\n base: {\n overflow: 'hidden',\n },\n});\n\nmodule.exports = ((Image: any): React.AbstractComponent<\n ImagePropsType,\n React.ElementRef,\n> &\n ImageComponentStatics);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst DeprecatedEdgeInsetsPropType = require('./DeprecatedEdgeInsetsPropType');\nconst DeprecatedImageSourcePropType = require('./DeprecatedImageSourcePropType');\nconst DeprecatedImageStylePropTypes = require('./DeprecatedImageStylePropTypes');\nconst DeprecatedStyleSheetPropType = require('./DeprecatedStyleSheetPropType');\nconst PropTypes = require('prop-types');\n\nmodule.exports = {\n style: (DeprecatedStyleSheetPropType(\n DeprecatedImageStylePropTypes,\n ): ReactPropsCheckType),\n source: DeprecatedImageSourcePropType,\n defaultSource: (PropTypes.oneOfType([\n PropTypes.shape({\n uri: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n scale: PropTypes.number,\n }),\n PropTypes.number,\n ]): React$PropType$Primitive<\n | {\n height?: number,\n scale?: number,\n uri?: string,\n width?: number,\n ...\n }\n | number,\n >),\n\n accessible: PropTypes.bool,\n\n accessibilityLabel: PropTypes.node,\n\n blurRadius: PropTypes.number,\n\n capInsets: DeprecatedEdgeInsetsPropType,\n\n resizeMethod: (PropTypes.oneOf([\n 'auto',\n 'resize',\n 'scale',\n ]): React$PropType$Primitive<'auto' | 'resize' | 'scale'>),\n\n resizeMode: (PropTypes.oneOf([\n 'cover',\n 'contain',\n 'stretch',\n 'repeat',\n 'center',\n ]): React$PropType$Primitive<\n 'cover' | 'contain' | 'stretch' | 'repeat' | 'center',\n >),\n\n testID: PropTypes.string,\n\n onLayout: PropTypes.func,\n\n onLoadStart: PropTypes.func,\n\n onProgress: PropTypes.func,\n\n onError: PropTypes.func,\n\n onPartialLoad: PropTypes.func,\n\n onLoad: PropTypes.func,\n\n onLoadEnd: PropTypes.func,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @no-flow\n * @format\n */\n\n'use strict';\n\nconst PropTypes = require('prop-types');\n\nconst ImageURISourcePropType = PropTypes.shape({\n uri: PropTypes.string,\n bundle: PropTypes.string,\n method: PropTypes.string,\n headers: PropTypes.objectOf(PropTypes.string),\n body: PropTypes.string,\n cache: PropTypes.oneOf([\n 'default',\n 'reload',\n 'force-cache',\n 'only-if-cached',\n ]),\n width: PropTypes.number,\n height: PropTypes.number,\n scale: PropTypes.number,\n});\n\nconst ImageSourcePropType = PropTypes.oneOfType([\n ImageURISourcePropType,\n // Opaque type returned by require('./image.jpg')\n PropTypes.number,\n // Multiple sources\n PropTypes.arrayOf(ImageURISourcePropType),\n]);\n\nmodule.exports = ImageSourcePropType;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst DeprecatedColorPropType = require('./DeprecatedColorPropType');\nconst DeprecatedLayoutPropTypes = require('./DeprecatedLayoutPropTypes');\nconst DeprecatedShadowPropTypesIOS = require('./DeprecatedShadowPropTypesIOS');\nconst DeprecatedTransformPropTypes = require('./DeprecatedTransformPropTypes');\nconst ReactPropTypes = require('prop-types');\n\nconst ImageStylePropTypes = {\n ...DeprecatedLayoutPropTypes,\n ...DeprecatedShadowPropTypesIOS,\n ...DeprecatedTransformPropTypes,\n resizeMode: (ReactPropTypes.oneOf([\n 'center',\n 'contain',\n 'cover',\n 'repeat',\n 'stretch',\n ]): React$PropType$Primitive<\n 'center' | 'contain' | 'cover' | 'repeat' | 'stretch',\n >),\n backfaceVisibility: (ReactPropTypes.oneOf([\n 'visible',\n 'hidden',\n ]): React$PropType$Primitive<'visible' | 'hidden'>),\n backgroundColor: DeprecatedColorPropType,\n borderColor: DeprecatedColorPropType,\n borderWidth: ReactPropTypes.number,\n borderRadius: ReactPropTypes.number,\n overflow: (ReactPropTypes.oneOf([\n 'visible',\n 'hidden',\n ]): React$PropType$Primitive<'visible' | 'hidden'>),\n\n /**\n * Changes the color of all the non-transparent pixels to the tintColor.\n */\n tintColor: DeprecatedColorPropType,\n opacity: ReactPropTypes.number,\n /**\n * When the image has rounded corners, specifying an overlayColor will\n * cause the remaining space in the corners to be filled with a solid color.\n * This is useful in cases which are not supported by the Android\n * implementation of rounded corners:\n * - Certain resize modes, such as 'contain'\n * - Animated GIFs\n *\n * A typical way to use this prop is with images displayed on a solid\n * background and setting the `overlayColor` to the same color\n * as the background.\n *\n * For details of how this works under the hood, see\n * http://frescolib.org/docs/rounded-corners-and-circles.html\n *\n * @platform android\n */\n overlayColor: ReactPropTypes.string,\n\n // Android-Specific styles\n borderTopLeftRadius: ReactPropTypes.number,\n borderTopRightRadius: ReactPropTypes.number,\n borderBottomLeftRadius: ReactPropTypes.number,\n borderBottomRightRadius: ReactPropTypes.number,\n};\n\nmodule.exports = ImageStylePropTypes;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport * as React from 'react';\n\ntype ContextType = ?string;\n\nconst Context: React.Context = React.createContext(\n null,\n);\n\nif (__DEV__) {\n Context.displayName = 'ImageAnalyticsTagContext';\n}\n\nexport default Context;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {RootTag} from '../TurboModule/RCTExport';\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {||};\n // Return [width, height] of image uri\n +getSize: (uri: string) => Promise<$ReadOnlyArray>;\n +getSizeWithHeaders: (\n uri: string,\n headers: Object,\n ) => Promise<{\n width: number,\n height: number,\n ...\n }>;\n +prefetchImage: (uri: string) => Promise;\n +prefetchImageWithMetadata?: (\n uri: string,\n queryRootName: string,\n rootTag: RootTag,\n ) => Promise;\n +queryCache: (uris: Array) => Promise;\n}\n\nexport default (TurboModuleRegistry.getEnforcing('ImageLoader'): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {ResolvedAssetSource} from './AssetSourceResolver';\nimport type {ImageProps} from './ImageProps';\nimport type {ViewProps} from '../Components/View/ViewPropTypes';\nimport * as NativeComponentRegistry from '../NativeComponent/NativeComponentRegistry';\nimport type {HostComponent} from '../Renderer/shims/ReactNativeTypes';\nimport type {\n ColorValue,\n DangerouslyImpreciseStyle,\n ImageStyleProp,\n} from '../StyleSheet/StyleSheet';\n\ntype Props = $ReadOnly<{\n ...ImageProps,\n ...ViewProps,\n\n style?: ImageStyleProp | DangerouslyImpreciseStyle,\n\n // iOS native props\n tintColor?: ColorValue,\n\n // Android native props\n shouldNotifyLoadEvents?: boolean,\n src?: ?ResolvedAssetSource | $ReadOnlyArray<{uri: string, ...}>,\n headers?: ?string,\n defaultSrc?: ?string,\n loadingIndicatorSrc?: ?string,\n}>;\n\nconst ImageViewNativeComponent: HostComponent = NativeComponentRegistry.get(\n 'RCTImageView',\n () => ({\n uiViewClassName: 'RCTImageView',\n bubblingEventTypes: {},\n directEventTypes: {\n topLoadStart: {\n registrationName: 'onLoadStart',\n },\n topProgress: {\n registrationName: 'onProgress',\n },\n topError: {\n registrationName: 'onError',\n },\n topPartialLoad: {\n registrationName: 'onPartialLoad',\n },\n topLoad: {\n registrationName: 'onLoad',\n },\n topLoadEnd: {\n registrationName: 'onLoadEnd',\n },\n },\n validAttributes: {\n blurRadius: true,\n capInsets: {\n diff: require('../Utilities/differ/insetsDiffer'),\n },\n defaultSource: {\n process: require('./resolveAssetSource'),\n },\n defaultSrc: true,\n fadeDuration: true,\n headers: true,\n internal_analyticTag: true,\n loadingIndicatorSrc: true,\n onError: true,\n onLoad: true,\n onLoadEnd: true,\n onLoadStart: true,\n onPartialLoad: true,\n onProgress: true,\n overlayColor: {\n process: require('../StyleSheet/processColor'),\n },\n progressiveRenderingEnabled: true,\n resizeMethod: true,\n resizeMode: true,\n shouldNotifyLoadEvents: true,\n source: true,\n src: true,\n tintColor: {\n process: require('../StyleSheet/processColor'),\n },\n },\n }),\n);\n\nexport default ImageViewNativeComponent;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\nconst ScrollView = require('../../Components/ScrollView/ScrollView');\nconst createAnimatedComponent = require('../createAnimatedComponent');\n\nimport type {AnimatedComponentType} from '../createAnimatedComponent';\n\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nconst ScrollViewWithEventThrottle = React.forwardRef((props, ref) => (\n \n));\n\nmodule.exports = (createAnimatedComponent(ScrollViewWithEventThrottle, {\n collapsable: false,\n}): AnimatedComponentType<\n React.ElementConfig,\n React.ElementRef,\n>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\nimport SectionList from '../../Lists/SectionList';\nconst createAnimatedComponent = require('../createAnimatedComponent');\n\nimport type {AnimatedComponentType} from '../createAnimatedComponent';\n\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nconst SectionListWithEventThrottle = React.forwardRef((props, ref) => (\n \n));\n\nmodule.exports = (createAnimatedComponent(\n SectionListWithEventThrottle,\n): AnimatedComponentType<\n React.ElementConfig,\n React.ElementRef,\n>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nimport Platform from '../Utilities/Platform';\nimport * as React from 'react';\nimport VirtualizedSectionList from './VirtualizedSectionList';\n\nimport type {ScrollResponderType} from '../Components/ScrollView/ScrollView';\nimport type {\n SectionBase as _SectionBase,\n Props as VirtualizedSectionListProps,\n ScrollToLocationParamsType,\n} from './VirtualizedSectionList';\n\ntype Item = any;\n\nexport type SectionBase = _SectionBase;\n\ntype RequiredProps> = {|\n /**\n * The actual data to render, akin to the `data` prop in [``](https://reactnative.dev/docs/flatlist.html).\n *\n * General shape:\n *\n * sections: $ReadOnlyArray<{\n * data: $ReadOnlyArray,\n * renderItem?: ({item: SectionItem, ...}) => ?React.Element<*>,\n * ItemSeparatorComponent?: ?ReactClass<{highlighted: boolean, ...}>,\n * }>\n */\n sections: $ReadOnlyArray,\n|};\n\ntype OptionalProps> = {|\n /**\n * Default renderer for every item in every section. Can be over-ridden on a per-section basis.\n */\n renderItem?: (info: {\n item: Item,\n index: number,\n section: SectionT,\n separators: {\n highlight: () => void,\n unhighlight: () => void,\n updateProps: (select: 'leading' | 'trailing', newProps: Object) => void,\n ...\n },\n ...\n }) => null | React.Element,\n /**\n * A marker property for telling the list to re-render (since it implements `PureComponent`). If\n * any of your `renderItem`, Header, Footer, etc. functions depend on anything outside of the\n * `data` prop, stick it here and treat it immutably.\n */\n extraData?: any,\n /**\n * How many items to render in the initial batch. This should be enough to fill the screen but not\n * much more. Note these items will never be unmounted as part of the windowed rendering in order\n * to improve perceived performance of scroll-to-top actions.\n */\n initialNumToRender?: ?number,\n /**\n * Reverses the direction of scroll. Uses scale transforms of -1.\n */\n inverted?: ?boolean,\n /**\n * Used to extract a unique key for a given item at the specified index. Key is used for caching\n * and as the react key to track item re-ordering. The default extractor checks item.key, then\n * falls back to using the index, like react does. Note that this sets keys for each item, but\n * each overall section still needs its own key.\n */\n keyExtractor?: ?(item: Item, index: number) => string,\n /**\n * Called once when the scroll position gets within `onEndReachedThreshold` of the rendered\n * content.\n */\n onEndReached?: ?(info: {distanceFromEnd: number, ...}) => void,\n /**\n * Note: may have bugs (missing content) in some circumstances - use at your own risk.\n *\n * This may improve scroll performance for large lists.\n */\n removeClippedSubviews?: boolean,\n|};\n\nexport type Props = {|\n ...$Diff<\n VirtualizedSectionListProps,\n {\n getItem: $PropertyType, 'getItem'>,\n getItemCount: $PropertyType<\n VirtualizedSectionListProps,\n 'getItemCount',\n >,\n renderItem: $PropertyType<\n VirtualizedSectionListProps,\n 'renderItem',\n >,\n keyExtractor: $PropertyType<\n VirtualizedSectionListProps,\n 'keyExtractor',\n >,\n ...\n },\n >,\n ...RequiredProps,\n ...OptionalProps,\n|};\n\n/**\n * A performant interface for rendering sectioned lists, supporting the most handy features:\n *\n * - Fully cross-platform.\n * - Configurable viewability callbacks.\n * - List header support.\n * - List footer support.\n * - Item separator support.\n * - Section header support.\n * - Section separator support.\n * - Heterogeneous data and item rendering support.\n * - Pull to Refresh.\n * - Scroll loading.\n *\n * If you don't need section support and want a simpler interface, use\n * [``](https://reactnative.dev/docs/flatlist.html).\n *\n * Simple Examples:\n *\n * }\n * renderSectionHeader={({section}) =>
}\n * sections={[ // homogeneous rendering between sections\n * {data: [...], title: ...},\n * {data: [...], title: ...},\n * {data: [...], title: ...},\n * ]}\n * />\n *\n * \n *\n * This is a convenience wrapper around [``](docs/virtualizedlist.html),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate and momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n *\n */\nexport default class SectionList<\n SectionT: SectionBase,\n> extends React.PureComponent, void> {\n props: Props;\n\n /**\n * Scrolls to the item at the specified `sectionIndex` and `itemIndex` (within the section)\n * positioned in the viewable area such that `viewPosition` 0 places it at the top (and may be\n * covered by a sticky header), 1 at the bottom, and 0.5 centered in the middle. `viewOffset` is a\n * fixed number of pixels to offset the final target position, e.g. to compensate for sticky\n * headers.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToLocation(params: ScrollToLocationParamsType) {\n if (this._wrapperListRef != null) {\n this._wrapperListRef.scrollToLocation(params);\n }\n }\n\n /**\n * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n * taps on items or by navigation actions.\n */\n recordInteraction() {\n const listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n listRef && listRef.recordInteraction();\n }\n\n /**\n * Displays the scroll indicators momentarily.\n *\n * @platform ios\n */\n flashScrollIndicators() {\n const listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n listRef && listRef.flashScrollIndicators();\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n */\n getScrollResponder(): ?ScrollResponderType {\n const listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n if (listRef) {\n return listRef.getScrollResponder();\n }\n }\n\n getScrollableNode(): any {\n const listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n if (listRef) {\n return listRef.getScrollableNode();\n }\n }\n\n setNativeProps(props: Object) {\n const listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n if (listRef) {\n listRef.setNativeProps(props);\n }\n }\n\n render(): React.Node {\n const {\n stickySectionHeadersEnabled: _stickySectionHeadersEnabled,\n ...restProps\n } = this.props;\n const stickySectionHeadersEnabled =\n _stickySectionHeadersEnabled ?? Platform.OS === 'ios';\n return (\n items.length}\n getItem={(items, index) => items[index]}\n />\n );\n }\n\n _wrapperListRef: ?React.ElementRef;\n _captureRef = ref => {\n this._wrapperListRef = ref;\n };\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport invariant from 'invariant';\nimport type {ViewToken} from './ViewabilityHelper';\nimport {keyExtractor as defaultKeyExtractor} from './VirtualizeUtils';\nimport {View, VirtualizedList} from 'react-native';\nimport * as React from 'react';\n\ntype Item = any;\n\nexport type SectionBase = {\n /**\n * The data for rendering items in this section.\n */\n data: $ReadOnlyArray,\n /**\n * Optional key to keep track of section re-ordering. If you don't plan on re-ordering sections,\n * the array index will be used by default.\n */\n key?: string,\n // Optional props will override list-wide props just for this section.\n renderItem?: ?(info: {\n item: SectionItemT,\n index: number,\n section: SectionBase,\n separators: {\n highlight: () => void,\n unhighlight: () => void,\n updateProps: (select: 'leading' | 'trailing', newProps: Object) => void,\n ...\n },\n ...\n }) => null | React.Element,\n ItemSeparatorComponent?: ?React.ComponentType,\n keyExtractor?: (item: SectionItemT, index?: ?number) => string,\n ...\n};\n\ntype RequiredProps> = {|\n sections: $ReadOnlyArray,\n|};\n\ntype OptionalProps> = {|\n /**\n * Default renderer for every item in every section.\n */\n renderItem?: (info: {\n item: Item,\n index: number,\n section: SectionT,\n separators: {\n highlight: () => void,\n unhighlight: () => void,\n updateProps: (select: 'leading' | 'trailing', newProps: Object) => void,\n ...\n },\n ...\n }) => null | React.Element,\n /**\n * Rendered at the top of each section. These stick to the top of the `ScrollView` by default on\n * iOS. See `stickySectionHeadersEnabled`.\n */\n renderSectionHeader?: ?(info: {\n section: SectionT,\n ...\n }) => null | React.Element,\n /**\n * Rendered at the bottom of each section.\n */\n renderSectionFooter?: ?(info: {\n section: SectionT,\n ...\n }) => null | React.Element,\n /**\n * Rendered at the top and bottom of each section (note this is different from\n * `ItemSeparatorComponent` which is only rendered between items). These are intended to separate\n * sections from the headers above and below and typically have the same highlight response as\n * `ItemSeparatorComponent`. Also receives `highlighted`, `[leading/trailing][Item/Separator]`,\n * and any custom props from `separators.updateProps`.\n */\n SectionSeparatorComponent?: ?React.ComponentType,\n /**\n * Makes section headers stick to the top of the screen until the next one pushes it off. Only\n * enabled by default on iOS because that is the platform standard there.\n */\n stickySectionHeadersEnabled?: boolean,\n onEndReached?: ?({distanceFromEnd: number, ...}) => void,\n|};\n\ntype VirtualizedListProps = React.ElementConfig;\n\nexport type Props = {|\n ...RequiredProps,\n ...OptionalProps,\n ...$Diff<\n VirtualizedListProps,\n {\n renderItem: $PropertyType,\n data: $PropertyType,\n ...\n },\n >,\n|};\nexport type ScrollToLocationParamsType = {|\n animated?: ?boolean,\n itemIndex: number,\n sectionIndex: number,\n viewOffset?: number,\n viewPosition?: number,\n|};\n\ntype State = {childProps: VirtualizedListProps, ...};\n\n/**\n * Right now this just flattens everything into one list and uses VirtualizedList under the\n * hood. The only operation that might not scale well is concatting the data arrays of all the\n * sections when new props are received, which should be plenty fast for up to ~10,000 items.\n */\nclass VirtualizedSectionList<\n SectionT: SectionBase,\n> extends React.PureComponent, State> {\n scrollToLocation(params: ScrollToLocationParamsType) {\n let index = params.itemIndex;\n for (let i = 0; i < params.sectionIndex; i++) {\n index += this.props.getItemCount(this.props.sections[i].data) + 2;\n }\n let viewOffset = params.viewOffset || 0;\n if (this._listRef == null) {\n return;\n }\n if (params.itemIndex > 0 && this.props.stickySectionHeadersEnabled) {\n // $FlowFixMe[prop-missing] Cannot access private property\n const frame = this._listRef._getFrameMetricsApprox(\n index - params.itemIndex,\n );\n viewOffset += frame.length;\n }\n const toIndexParams = {\n ...params,\n viewOffset,\n index,\n };\n this._listRef.scrollToIndex(toIndexParams);\n }\n\n getListRef(): ?React.ElementRef {\n return this._listRef;\n }\n\n render(): React.Node {\n const {\n ItemSeparatorComponent, // don't pass through, rendered with renderItem\n SectionSeparatorComponent,\n renderItem: _renderItem,\n renderSectionFooter,\n renderSectionHeader,\n sections: _sections,\n stickySectionHeadersEnabled,\n ...passThroughProps\n } = this.props;\n\n const listHeaderOffset = this.props.ListHeaderComponent ? 1 : 0;\n\n const stickyHeaderIndices = this.props.stickySectionHeadersEnabled\n ? []\n : undefined;\n\n let itemCount = 0;\n for (const section of this.props.sections) {\n // Track the section header indices\n if (stickyHeaderIndices != null) {\n stickyHeaderIndices.push(itemCount + listHeaderOffset);\n }\n\n // Add two for the section header and footer.\n itemCount += 2;\n itemCount += this.props.getItemCount(section.data);\n }\n const renderItem = this._renderItem(itemCount);\n\n return (\n \n this._getItem(this.props, sections, index)\n }\n getItemCount={() => itemCount}\n onViewableItemsChanged={\n this.props.onViewableItemsChanged\n ? this._onViewableItemsChanged\n : undefined\n }\n ref={this._captureRef}\n />\n );\n }\n\n _getItem(\n props: Props,\n sections: ?$ReadOnlyArray,\n index: number,\n ): ?Item {\n if (!sections) {\n return null;\n }\n let itemIdx = index - 1;\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n const sectionData = section.data;\n const itemCount = props.getItemCount(sectionData);\n if (itemIdx === -1 || itemIdx === itemCount) {\n // We intend for there to be overflow by one on both ends of the list.\n // This will be for headers and footers. When returning a header or footer\n // item the section itself is the item.\n return section;\n } else if (itemIdx < itemCount) {\n // If we are in the bounds of the list's data then return the item.\n return props.getItem(sectionData, itemIdx);\n } else {\n itemIdx -= itemCount + 2; // Add two for the header and footer\n }\n }\n return null;\n }\n\n _keyExtractor = (item: Item, index: number) => {\n const info = this._subExtractor(index);\n return (info && info.key) || String(index);\n };\n\n _subExtractor(\n index: number,\n ): ?{\n section: SectionT,\n // Key of the section or combined key for section + item\n key: string,\n // Relative index within the section\n index: ?number,\n // True if this is the section header\n header?: ?boolean,\n leadingItem?: ?Item,\n leadingSection?: ?SectionT,\n trailingItem?: ?Item,\n trailingSection?: ?SectionT,\n ...\n } {\n let itemIndex = index;\n const {getItem, getItemCount, keyExtractor, sections} = this.props;\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n const sectionData = section.data;\n const key = section.key || String(i);\n itemIndex -= 1; // The section adds an item for the header\n if (itemIndex >= getItemCount(sectionData) + 1) {\n itemIndex -= getItemCount(sectionData) + 1; // The section adds an item for the footer.\n } else if (itemIndex === -1) {\n return {\n section,\n key: key + ':header',\n index: null,\n header: true,\n trailingSection: sections[i + 1],\n };\n } else if (itemIndex === getItemCount(sectionData)) {\n return {\n section,\n key: key + ':footer',\n index: null,\n header: false,\n trailingSection: sections[i + 1],\n };\n } else {\n const extractor =\n section.keyExtractor || keyExtractor || defaultKeyExtractor;\n return {\n section,\n key:\n key + ':' + extractor(getItem(sectionData, itemIndex), itemIndex),\n index: itemIndex,\n leadingItem: getItem(sectionData, itemIndex - 1),\n leadingSection: sections[i - 1],\n trailingItem: getItem(sectionData, itemIndex + 1),\n trailingSection: sections[i + 1],\n };\n }\n }\n }\n\n _convertViewable = (viewable: ViewToken): ?ViewToken => {\n invariant(viewable.index != null, 'Received a broken ViewToken');\n const info = this._subExtractor(viewable.index);\n if (!info) {\n return null;\n }\n const keyExtractorWithNullableIndex = info.section.keyExtractor;\n const keyExtractorWithNonNullableIndex =\n this.props.keyExtractor || defaultKeyExtractor;\n const key =\n keyExtractorWithNullableIndex != null\n ? keyExtractorWithNullableIndex(viewable.item, info.index)\n : keyExtractorWithNonNullableIndex(viewable.item, info.index ?? 0);\n\n return {\n ...viewable,\n index: info.index,\n key,\n section: info.section,\n };\n };\n\n _onViewableItemsChanged = ({\n viewableItems,\n changed,\n }: {\n viewableItems: Array,\n changed: Array,\n ...\n }) => {\n const onViewableItemsChanged = this.props.onViewableItemsChanged;\n if (onViewableItemsChanged != null) {\n onViewableItemsChanged({\n viewableItems: viewableItems\n .map(this._convertViewable, this)\n .filter(Boolean),\n changed: changed.map(this._convertViewable, this).filter(Boolean),\n });\n }\n };\n\n _renderItem = (listItemCount: number) => ({\n item,\n index,\n }: {\n item: Item,\n index: number,\n ...\n }) => {\n const info = this._subExtractor(index);\n if (!info) {\n return null;\n }\n const infoIndex = info.index;\n if (infoIndex == null) {\n const {section} = info;\n if (info.header === true) {\n const {renderSectionHeader} = this.props;\n return renderSectionHeader ? renderSectionHeader({section}) : null;\n } else {\n const {renderSectionFooter} = this.props;\n return renderSectionFooter ? renderSectionFooter({section}) : null;\n }\n } else {\n const renderItem = info.section.renderItem || this.props.renderItem;\n const SeparatorComponent = this._getSeparatorComponent(\n index,\n info,\n listItemCount,\n );\n invariant(renderItem, 'no renderItem!');\n return (\n \n );\n }\n };\n\n _updatePropsFor = (cellKey, value) => {\n const updateProps = this._updatePropsMap[cellKey];\n if (updateProps != null) {\n updateProps(value);\n }\n };\n\n _updateHighlightFor = (cellKey, value) => {\n const updateHighlight = this._updateHighlightMap[cellKey];\n if (updateHighlight != null) {\n updateHighlight(value);\n }\n };\n\n _setUpdateHighlightFor = (cellKey, updateHighlightFn) => {\n if (updateHighlightFn != null) {\n this._updateHighlightMap[cellKey] = updateHighlightFn;\n } else {\n delete this._updateHighlightFor[cellKey];\n }\n };\n\n _setUpdatePropsFor = (cellKey, updatePropsFn) => {\n if (updatePropsFn != null) {\n this._updatePropsMap[cellKey] = updatePropsFn;\n } else {\n delete this._updatePropsMap[cellKey];\n }\n };\n\n _getSeparatorComponent(\n index: number,\n info?: ?Object,\n listItemCount: number,\n ): ?React.ComponentType {\n info = info || this._subExtractor(index);\n if (!info) {\n return null;\n }\n const ItemSeparatorComponent =\n info.section.ItemSeparatorComponent || this.props.ItemSeparatorComponent;\n const {SectionSeparatorComponent} = this.props;\n const isLastItemInList = index === listItemCount - 1;\n const isLastItemInSection =\n info.index === this.props.getItemCount(info.section.data) - 1;\n if (SectionSeparatorComponent && isLastItemInSection) {\n return SectionSeparatorComponent;\n }\n if (ItemSeparatorComponent && !isLastItemInSection && !isLastItemInList) {\n return ItemSeparatorComponent;\n }\n return null;\n }\n\n _updateHighlightMap = {};\n _updatePropsMap = {};\n _listRef: ?React.ElementRef;\n _captureRef = ref => {\n this._listRef = ref;\n };\n}\n\ntype ItemWithSeparatorCommonProps = $ReadOnly<{|\n leadingItem: ?Item,\n leadingSection: ?Object,\n section: Object,\n trailingItem: ?Item,\n trailingSection: ?Object,\n|}>;\n\ntype ItemWithSeparatorProps = $ReadOnly<{|\n ...ItemWithSeparatorCommonProps,\n LeadingSeparatorComponent: ?React.ComponentType,\n SeparatorComponent: ?React.ComponentType,\n cellKey: string,\n index: number,\n item: Item,\n setSelfHighlightCallback: (\n cellKey: string,\n updateFn: ?(boolean) => void,\n ) => void,\n setSelfUpdatePropsCallback: (\n cellKey: string,\n updateFn: ?(boolean) => void,\n ) => void,\n prevCellKey?: ?string,\n updateHighlightFor: (prevCellKey: string, value: boolean) => void,\n updatePropsFor: (prevCellKey: string, value: Object) => void,\n renderItem: Function,\n inverted: boolean,\n|}>;\n\nfunction ItemWithSeparator(props: ItemWithSeparatorProps): React.Node {\n const {\n LeadingSeparatorComponent,\n // this is the trailing separator and is associated with this item\n SeparatorComponent,\n cellKey,\n prevCellKey,\n setSelfHighlightCallback,\n updateHighlightFor,\n setSelfUpdatePropsCallback,\n updatePropsFor,\n item,\n index,\n section,\n inverted,\n } = props;\n\n const [\n leadingSeparatorHiglighted,\n setLeadingSeparatorHighlighted,\n ] = React.useState(false);\n\n const [separatorHighlighted, setSeparatorHighlighted] = React.useState(false);\n\n const [leadingSeparatorProps, setLeadingSeparatorProps] = React.useState({\n leadingItem: props.leadingItem,\n leadingSection: props.leadingSection,\n section: props.section,\n trailingItem: props.item,\n trailingSection: props.trailingSection,\n });\n const [separatorProps, setSeparatorProps] = React.useState({\n leadingItem: props.item,\n leadingSection: props.leadingSection,\n section: props.section,\n trailingItem: props.trailingItem,\n trailingSection: props.trailingSection,\n });\n\n React.useEffect(() => {\n setSelfHighlightCallback(cellKey, setSeparatorHighlighted);\n setSelfUpdatePropsCallback(cellKey, setSeparatorProps);\n\n return () => {\n setSelfUpdatePropsCallback(cellKey, null);\n setSelfHighlightCallback(cellKey, null);\n };\n }, [\n cellKey,\n setSelfHighlightCallback,\n setSeparatorProps,\n setSelfUpdatePropsCallback,\n ]);\n\n const separators = {\n highlight: () => {\n setLeadingSeparatorHighlighted(true);\n setSeparatorHighlighted(true);\n if (prevCellKey != null) {\n updateHighlightFor(prevCellKey, true);\n }\n },\n unhighlight: () => {\n setLeadingSeparatorHighlighted(false);\n setSeparatorHighlighted(false);\n if (prevCellKey != null) {\n updateHighlightFor(prevCellKey, false);\n }\n },\n updateProps: (\n select: 'leading' | 'trailing',\n newProps: $Shape,\n ) => {\n if (select === 'leading') {\n if (LeadingSeparatorComponent != null) {\n setLeadingSeparatorProps({...leadingSeparatorProps, ...newProps});\n } else if (prevCellKey != null) {\n // update the previous item's separator\n updatePropsFor(prevCellKey, {...leadingSeparatorProps, ...newProps});\n }\n } else if (select === 'trailing' && SeparatorComponent != null) {\n setSeparatorProps({...separatorProps, ...newProps});\n }\n },\n };\n const element = props.renderItem({\n item,\n index,\n section,\n separators,\n });\n const leadingSeparator = LeadingSeparatorComponent != null && (\n \n );\n const separator = SeparatorComponent != null && (\n \n );\n return leadingSeparator || separator ? (\n \n {inverted === false ? leadingSeparator : separator}\n {element}\n {inverted === false ? separator : leadingSeparator}\n \n ) : (\n element\n );\n}\n\n/* $FlowFixMe[class-object-subtyping] added when improving typing for this\n * parameters */\n// $FlowFixMe[method-unbinding]\nmodule.exports = (VirtualizedSectionList: React.AbstractComponent<\n React.ElementConfig,\n $ReadOnly<{\n getListRef: () => ?React.ElementRef,\n scrollToLocation: (params: ScrollToLocationParamsType) => void,\n ...\n }>,\n>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\nconst Text = require('../../Text/Text');\nconst createAnimatedComponent = require('../createAnimatedComponent');\n\nimport type {AnimatedComponentType} from '../createAnimatedComponent';\n\nmodule.exports = (createAnimatedComponent((Text: $FlowFixMe), {\n collapsable: false,\n}): AnimatedComponentType<\n React.ElementConfig,\n React.ElementRef,\n>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\nconst View = require('../../Components/View/View');\nconst createAnimatedComponent = require('../createAnimatedComponent');\n\nimport type {AnimatedComponentType} from '../createAnimatedComponent';\n\nmodule.exports = (createAnimatedComponent(View, {\n collapsable: true,\n}): AnimatedComponentType<\n React.ElementConfig,\n React.ElementRef,\n>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n// This is a controlled component version of RCTDatePickerIOS.\n\nimport * as React from 'react';\nimport RCTDatePickerNativeComponent, {\n Commands as DatePickerCommands,\n} from './RCTDatePickerNativeComponent';\nimport StyleSheet from '../../StyleSheet/StyleSheet';\nimport View from '../View/View';\nimport invariant from 'invariant';\n\nimport type {SyntheticEvent} from '../../Types/CoreEventTypes';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\ntype Event = SyntheticEvent<\n $ReadOnly<{|\n timestamp: number,\n |}>,\n>;\n\ntype Props = $ReadOnly<{|\n ...ViewProps,\n\n /**\n * The currently selected date.\n */\n date?: ?Date,\n\n /**\n * Provides an initial value that will change when the user starts selecting\n * a date. It is useful for simple use-cases where you do not want to deal\n * with listening to events and updating the date prop to keep the\n * controlled state in sync. The controlled state has known bugs which\n * causes it to go out of sync with native. The initialDate prop is intended\n * to allow you to have native be source of truth.\n */\n initialDate?: ?Date,\n\n /**\n * The date picker locale.\n */\n locale?: ?string,\n\n /**\n * Maximum date.\n *\n * Restricts the range of possible date/time values.\n */\n maximumDate?: ?Date,\n\n /**\n * Minimum date.\n *\n * Restricts the range of possible date/time values.\n */\n minimumDate?: ?Date,\n\n /**\n * The interval at which minutes can be selected.\n */\n minuteInterval?: ?(1 | 2 | 3 | 4 | 5 | 6 | 10 | 12 | 15 | 20 | 30),\n\n /**\n * The date picker mode.\n */\n mode?: ?('date' | 'time' | 'datetime'),\n\n /**\n * Date change handler.\n *\n * This is called when the user changes the date or time in the UI.\n * The first and only argument is an Event. For getting the date the picker\n * was changed to, use onDateChange instead.\n */\n onChange?: ?(event: Event) => void,\n\n /**\n * Date change handler.\n *\n * This is called when the user changes the date or time in the UI.\n * The first and only argument is a Date object representing the new\n * date and time.\n */\n onDateChange: (date: Date) => void,\n\n /**\n * Timezone offset in minutes.\n *\n * By default, the date picker will use the device's timezone. With this\n * parameter, it is possible to force a certain timezone offset. For\n * instance, to show times in Pacific Standard Time, pass -7 * 60.\n */\n timeZoneOffsetInMinutes?: ?number,\n\n /**\n * The date picker style\n * This is only available on devices with iOS 14.0 and later.\n * 'spinner' is the default style if this prop isn't set.\n */\n pickerStyle?: ?('compact' | 'spinner' | 'inline'),\n|}>;\n\n/**\n * Use `DatePickerIOS` to render a date/time picker (selector) on iOS. This is\n * a controlled component, so you must hook in to the `onDateChange` callback\n * and update the `date` prop in order for the component to update, otherwise\n * the user's change will be reverted immediately to reflect `props.date` as the\n * source of truth.\n */\nclass DatePickerIOS extends React.Component {\n static DefaultProps: {|mode: $TEMPORARY$string<'datetime'>|} = {\n mode: 'datetime',\n };\n\n _picker: ?React.ElementRef = null;\n\n componentDidUpdate() {\n if (this.props.date) {\n const propsTimeStamp = this.props.date.getTime();\n if (this._picker) {\n DatePickerCommands.setNativeDate(this._picker, propsTimeStamp);\n }\n }\n }\n\n _onChange = (event: Event) => {\n const nativeTimeStamp = event.nativeEvent.timestamp;\n this.props.onDateChange &&\n this.props.onDateChange(new Date(nativeTimeStamp));\n this.props.onChange && this.props.onChange(event);\n this.forceUpdate();\n };\n\n render(): React.Node {\n const props = this.props;\n invariant(\n props.date || props.initialDate,\n 'A selected date or initial date should be specified.',\n );\n return (\n \n {\n this._picker = picker;\n }}\n style={getHeight(props.pickerStyle, props.mode)}\n date={\n props.date\n ? props.date.getTime()\n : props.initialDate\n ? props.initialDate.getTime()\n : undefined\n }\n locale={\n props.locale != null && props.locale !== ''\n ? props.locale\n : undefined\n }\n maximumDate={\n props.maximumDate ? props.maximumDate.getTime() : undefined\n }\n minimumDate={\n props.minimumDate ? props.minimumDate.getTime() : undefined\n }\n mode={props.mode}\n minuteInterval={props.minuteInterval}\n timeZoneOffsetInMinutes={props.timeZoneOffsetInMinutes}\n onChange={this._onChange}\n onStartShouldSetResponder={() => true}\n onResponderTerminationRequest={() => false}\n pickerStyle={props.pickerStyle}\n />\n \n );\n }\n}\n\nconst inlineHeightForDatePicker = 318.5;\nconst inlineHeightForTimePicker = 49.5;\nconst compactHeight = 40;\nconst spinnerHeight = 216;\n\nconst styles = StyleSheet.create({\n datePickerIOS: {\n height: spinnerHeight,\n },\n datePickerIOSCompact: {\n height: compactHeight,\n },\n datePickerIOSInline: {\n height: inlineHeightForDatePicker + inlineHeightForTimePicker * 2,\n },\n datePickerIOSInlineDate: {\n height: inlineHeightForDatePicker + inlineHeightForTimePicker,\n },\n datePickerIOSInlineTime: {\n height: inlineHeightForTimePicker,\n },\n});\n\nfunction getHeight(pickerStyle, mode) {\n if (pickerStyle === 'compact') {\n return styles.datePickerIOSCompact;\n }\n if (pickerStyle === 'inline') {\n switch (mode) {\n case 'date':\n return styles.datePickerIOSInlineDate;\n case 'time':\n return styles.datePickerIOSInlineTime;\n default:\n return styles.datePickerIOSInline;\n }\n }\n return styles.datePickerIOS;\n}\n\nmodule.exports = DatePickerIOS;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport * as React from 'react';\nimport type {\n Float,\n WithDefault,\n BubblingEventHandler,\n} from 'react-native/Libraries/Types/CodegenTypes';\n\ntype Event = $ReadOnly<{|\n timestamp: Float,\n|}>;\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n date?: ?Float,\n initialDate?: ?Float,\n locale?: ?string,\n maximumDate?: ?Float,\n minimumDate?: ?Float,\n minuteInterval?: WithDefault<\n 1 | 2 | 3 | 4 | 5 | 6 | 10 | 12 | 15 | 20 | 30,\n 1,\n >,\n mode?: WithDefault<'date' | 'time' | 'datetime', 'date'>,\n onChange?: ?BubblingEventHandler,\n timeZoneOffsetInMinutes?: ?Float,\n pickerStyle?: WithDefault<'compact' | 'spinner' | 'inline', 'spinner'>,\n|}>;\n\ntype ComponentType = HostComponent;\n\ninterface NativeCommands {\n +setNativeDate: (\n viewRef: React.ElementRef,\n date: Float,\n ) => void;\n}\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['setNativeDate'],\n});\n\nexport default (codegenNativeComponent('DatePicker', {\n paperComponentName: 'RCTDatePicker',\n excludedPlatforms: ['android'],\n}): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n'use strict';\n\nmodule.exports = require('../UnimplementedViews/UnimplementedView');\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst Image = require('./Image');\nconst React = require('react');\nconst StyleSheet = require('../StyleSheet/StyleSheet');\nconst View = require('../Components/View/View');\n\n/**\n * Very simple drop-in replacement for which supports nesting views.\n *\n * ```ReactNativeWebPlayer\n * import React, { Component } from 'react';\n * import { AppRegistry, View, ImageBackground, Text } from 'react-native';\n *\n * class DisplayAnImageBackground extends Component {\n * render() {\n * return (\n * \n * React\n * \n * );\n * }\n * }\n *\n * // App registration and rendering\n * AppRegistry.registerComponent('DisplayAnImageBackground', () => DisplayAnImageBackground);\n * ```\n */\nclass ImageBackground extends React.Component<$FlowFixMeProps> {\n setNativeProps(props: Object) {\n // Work-around flow\n const viewRef = this._viewRef;\n if (viewRef) {\n viewRef.setNativeProps(props);\n }\n }\n\n _viewRef: ?React.ElementRef = null;\n\n _captureRef = ref => {\n this._viewRef = ref;\n };\n\n render(): React.Node {\n const {children, style, imageStyle, imageRef, ...props} = this.props;\n\n return (\n \n overwrites width and height styles\n // (which is not quite correct), and these styles conflict with explicitly set styles\n // of and with our internal layout model here.\n // So, we have to proxy/reapply these styles explicitly for actual component.\n // This workaround should be removed after implementing proper support of\n // intrinsic content size of the .\n width: style?.width,\n height: style?.height,\n },\n imageStyle,\n ]}\n ref={imageRef}\n />\n {children}\n \n );\n }\n}\n\nmodule.exports = ImageBackground;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport * as React from 'react';\nimport Platform from '../../Utilities/Platform';\nimport StyleSheet, {\n type ViewStyleProp,\n type ColorValue,\n} from '../../StyleSheet/StyleSheet';\n\nimport RCTInputAccessoryViewNativeComponent from './RCTInputAccessoryViewNativeComponent';\n\n/**\n * Note: iOS only\n *\n * A component which enables customization of the keyboard input accessory view.\n * The input accessory view is displayed above the keyboard whenever a TextInput\n * has focus. This component can be used to create custom toolbars.\n *\n * To use this component wrap your custom toolbar with the\n * InputAccessoryView component, and set a nativeID. Then, pass that nativeID\n * as the inputAccessoryViewID of whatever TextInput you desire. A simple\n * example:\n *\n * ```ReactNativeWebPlayer\n * import React, { Component } from 'react';\n * import { AppRegistry, TextInput, InputAccessoryView, Button } from 'react-native';\n *\n * export default class UselessTextInput extends Component {\n * constructor(props) {\n * super(props);\n * this.state = {text: 'Placeholder Text'};\n * }\n *\n * render() {\n * const inputAccessoryViewID = \"uniqueID\";\n * return (\n * \n * \n * this.setState({text})}\n * value={this.state.text}\n * />\n * \n * \n * this.setState({text: 'Placeholder Text'})}\n * title=\"Reset Text\"\n * />\n * \n * \n * );\n * }\n * }\n *\n * // skip this line if using Create React Native App\n * AppRegistry.registerComponent('AwesomeProject', () => UselessTextInput);\n * ```\n *\n * This component can also be used to create sticky text inputs (text inputs\n * which are anchored to the top of the keyboard). To do this, wrap a\n * TextInput with the InputAccessoryView component, and don't set a nativeID.\n * For an example, look at InputAccessoryViewExample.js in RNTester.\n */\n\ntype Props = $ReadOnly<{|\n +children: React.Node,\n /**\n * An ID which is used to associate this `InputAccessoryView` to\n * specified TextInput(s).\n */\n nativeID?: ?string,\n style?: ?ViewStyleProp,\n backgroundColor?: ?ColorValue,\n|}>;\n\nclass InputAccessoryView extends React.Component {\n render(): React.Node {\n if (Platform.OS !== 'ios') {\n console.warn(' is only supported on iOS.');\n }\n\n if (React.Children.count(this.props.children) === 0) {\n return null;\n }\n\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n },\n});\n\nmodule.exports = InputAccessoryView;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n backgroundColor?: ?ColorValue,\n|}>;\n\nexport default (codegenNativeComponent('InputAccessory', {\n interfaceOnly: true,\n paperComponentName: 'RCTInputAccessoryView',\n excludedPlatforms: ['android'],\n}): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport Keyboard from './Keyboard';\nimport LayoutAnimation from '../../LayoutAnimation/LayoutAnimation';\nimport Platform from '../../Utilities/Platform';\nimport * as React from 'react';\nimport StyleSheet from '../../StyleSheet/StyleSheet';\nimport View from '../View/View';\n\nimport type {ViewStyleProp} from '../../StyleSheet/StyleSheet';\nimport {type EventSubscription} from '../../vendor/emitter/EventEmitter';\nimport type {\n ViewProps,\n ViewLayout,\n ViewLayoutEvent,\n} from '../View/ViewPropTypes';\nimport type {KeyboardEvent} from './Keyboard';\n\ntype Props = $ReadOnly<{|\n ...ViewProps,\n\n /**\n * Specify how to react to the presence of the keyboard.\n */\n behavior?: ?('height' | 'position' | 'padding'),\n\n /**\n * Style of the content container when `behavior` is 'position'.\n */\n contentContainerStyle?: ?ViewStyleProp,\n\n /**\n * Controls whether this `KeyboardAvoidingView` instance should take effect.\n * This is useful when more than one is on the screen. Defaults to true.\n */\n enabled?: ?boolean,\n\n /**\n * Distance between the top of the user screen and the React Native view. This\n * may be non-zero in some cases. Defaults to 0.\n */\n keyboardVerticalOffset?: number,\n|}>;\n\ntype State = {|\n bottom: number,\n|};\n\n/**\n * View that moves out of the way when the keyboard appears by automatically\n * adjusting its height, position, or bottom padding.\n */\nclass KeyboardAvoidingView extends React.Component {\n _frame: ?ViewLayout = null;\n _keyboardEvent: ?KeyboardEvent = null;\n _subscriptions: Array = [];\n viewRef: {current: React.ElementRef | null, ...};\n _initialFrameHeight: number = 0;\n\n constructor(props: Props) {\n super(props);\n this.state = {bottom: 0};\n this.viewRef = React.createRef();\n }\n\n _relativeKeyboardHeight(keyboardFrame): number {\n const frame = this._frame;\n if (!frame || !keyboardFrame) {\n return 0;\n }\n\n const keyboardY =\n keyboardFrame.screenY - (this.props.keyboardVerticalOffset ?? 0);\n\n // Calculate the displacement needed for the view such that it\n // no longer overlaps with the keyboard\n return Math.max(frame.y + frame.height - keyboardY, 0);\n }\n\n _onKeyboardChange = (event: ?KeyboardEvent) => {\n this._keyboardEvent = event;\n this._updateBottomIfNecesarry();\n };\n\n _onLayout = (event: ViewLayoutEvent) => {\n const wasFrameNull = this._frame == null;\n this._frame = event.nativeEvent.layout;\n if (!this._initialFrameHeight) {\n // save the initial frame height, before the keyboard is visible\n this._initialFrameHeight = this._frame.height;\n }\n\n if (wasFrameNull) {\n this._updateBottomIfNecesarry();\n }\n };\n\n _updateBottomIfNecesarry = () => {\n if (this._keyboardEvent == null) {\n this.setState({bottom: 0});\n return;\n }\n\n const {duration, easing, endCoordinates} = this._keyboardEvent;\n const height = this._relativeKeyboardHeight(endCoordinates);\n\n if (this.state.bottom === height) {\n return;\n }\n\n if (duration && easing) {\n LayoutAnimation.configureNext({\n // We have to pass the duration equal to minimal accepted duration defined here: RCTLayoutAnimation.m\n duration: duration > 10 ? duration : 10,\n update: {\n duration: duration > 10 ? duration : 10,\n type: LayoutAnimation.Types[easing] || 'keyboard',\n },\n });\n }\n this.setState({bottom: height});\n };\n\n componentDidMount(): void {\n if (Platform.OS === 'ios') {\n this._subscriptions = [\n Keyboard.addListener('keyboardWillChangeFrame', this._onKeyboardChange),\n ];\n } else {\n this._subscriptions = [\n Keyboard.addListener('keyboardDidHide', this._onKeyboardChange),\n Keyboard.addListener('keyboardDidShow', this._onKeyboardChange),\n ];\n }\n }\n\n componentWillUnmount(): void {\n this._subscriptions.forEach(subscription => {\n subscription.remove();\n });\n }\n\n render(): React.Node {\n const {\n behavior,\n children,\n contentContainerStyle,\n enabled = true,\n // eslint-disable-next-line no-unused-vars\n keyboardVerticalOffset = 0,\n style,\n ...props\n } = this.props;\n const bottomHeight = enabled === true ? this.state.bottom : 0;\n switch (behavior) {\n case 'height':\n let heightStyle;\n if (this._frame != null && this.state.bottom > 0) {\n // Note that we only apply a height change when there is keyboard present,\n // i.e. this.state.bottom is greater than 0. If we remove that condition,\n // this.frame.height will never go back to its original value.\n // When height changes, we need to disable flex.\n heightStyle = {\n height: this._initialFrameHeight - bottomHeight,\n flex: 0,\n };\n }\n return (\n \n {children}\n \n );\n\n case 'position':\n return (\n \n \n {children}\n \n \n );\n\n case 'padding':\n return (\n \n {children}\n \n );\n\n default:\n return (\n \n {children}\n \n );\n }\n }\n}\n\nexport default KeyboardAvoidingView;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport * as React from 'react';\nimport StyleSheet from '../../StyleSheet/StyleSheet';\nimport View from '../View/View';\n\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport RCTMaskedViewNativeComponent from './RCTMaskedViewNativeComponent';\n\ntype Props = $ReadOnly<{|\n ...ViewProps,\n\n children: React.Node,\n /**\n * Should be a React element to be rendered and applied as the\n * mask for the child element.\n */\n maskElement: React.Element,\n|}>;\n\n/**\n * Renders the child view with a mask specified in the `maskElement` prop.\n *\n * ```\n * import React from 'react';\n * import { MaskedViewIOS, Text, View } from 'react-native';\n *\n * class MyMaskedView extends React.Component {\n * render() {\n * return (\n * \n * \n * Basic Mask\n * \n * \n * }\n * >\n * \n * \n * );\n * }\n * }\n * ```\n *\n * The above example will render a view with a blue background that fills its\n * parent, and then mask that view with text that says \"Basic Mask\".\n *\n * The alpha channel of the view rendered by the `maskElement` prop determines how\n * much of the view's content and background shows through. Fully or partially\n * opaque pixels allow the underlying content to show through but fully\n * transparent pixels block that content.\n *\n */\nclass MaskedViewIOS extends React.Component {\n _hasWarnedInvalidRenderMask = false;\n\n render(): React.Node {\n const {maskElement, children, ...otherViewProps} = this.props;\n\n if (!React.isValidElement(maskElement)) {\n if (!this._hasWarnedInvalidRenderMask) {\n console.warn(\n 'MaskedView: Invalid `maskElement` prop was passed to MaskedView. ' +\n 'Expected a React Element. No mask will render.',\n );\n this._hasWarnedInvalidRenderMask = true;\n }\n return {children};\n }\n\n return (\n \n \n {maskElement}\n \n {children}\n \n );\n }\n}\n\nmodule.exports = MaskedViewIOS;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n|}>;\n\nexport default (codegenNativeComponent(\n 'RCTMaskedView',\n): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nconst AppContainer = require('../ReactNative/AppContainer');\nconst I18nManager = require('../ReactNative/I18nManager');\nimport ModalInjection from './ModalInjection';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport NativeModalManager from './NativeModalManager';\nconst Platform = require('../Utilities/Platform');\nconst React = require('react');\nconst ScrollView = require('../Components/ScrollView/ScrollView');\nconst StyleSheet = require('../StyleSheet/StyleSheet');\nconst View = require('../Components/View/View');\n\nconst {RootTagContext} = require('../ReactNative/RootTag');\n\nimport type {ViewProps} from '../Components/View/ViewPropTypes';\nimport {VirtualizedListContextResetter} from '../Lists/VirtualizedListContext.js';\nimport type {RootTag} from '../ReactNative/RootTag';\nimport type {DirectEventHandler} from '../Types/CodegenTypes';\nimport {type EventSubscription} from '../vendor/emitter/EventEmitter';\nimport RCTModalHostView from './RCTModalHostViewNativeComponent';\n\ntype ModalEventDefinitions = {\n modalDismissed: [{modalID: number}],\n};\n\nconst ModalEventEmitter =\n Platform.OS === 'ios' && NativeModalManager != null\n ? new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeModalManager,\n )\n : null;\n\n/**\n * The Modal component is a simple way to present content above an enclosing view.\n *\n * See https://reactnative.dev/docs/modal.html\n */\n\n// In order to route onDismiss callbacks, we need to uniquely identifier each\n// on screen. There can be different ones, either nested or as siblings.\n// We cannot pass the onDismiss callback to native as the view will be\n// destroyed before the callback is fired.\nlet uniqueModalIdentifier = 0;\n\ntype OrientationChangeEvent = $ReadOnly<{|\n orientation: 'portrait' | 'landscape',\n|}>;\n\nexport type Props = $ReadOnly<{|\n ...ViewProps,\n\n /**\n * The `animationType` prop controls how the modal animates.\n *\n * See https://reactnative.dev/docs/modal.html#animationtype\n */\n animationType?: ?('none' | 'slide' | 'fade'),\n\n /**\n * The `presentationStyle` prop controls how the modal appears.\n *\n * See https://reactnative.dev/docs/modal.html#presentationstyle\n */\n presentationStyle?: ?(\n | 'fullScreen'\n | 'pageSheet'\n | 'formSheet'\n | 'overFullScreen'\n ),\n\n /**\n * The `transparent` prop determines whether your modal will fill the\n * entire view.\n *\n * See https://reactnative.dev/docs/modal.html#transparent\n */\n transparent?: ?boolean,\n\n /**\n * The `statusBarTranslucent` prop determines whether your modal should go under\n * the system statusbar.\n *\n * See https://reactnative.dev/docs/modal.html#transparent\n */\n statusBarTranslucent?: ?boolean,\n\n /**\n * The `hardwareAccelerated` prop controls whether to force hardware\n * acceleration for the underlying window.\n *\n * This prop works only on Android.\n *\n * See https://reactnative.dev/docs/modal.html#hardwareaccelerated\n */\n hardwareAccelerated?: ?boolean,\n\n /**\n * The `visible` prop determines whether your modal is visible.\n *\n * See https://reactnative.dev/docs/modal.html#visible\n */\n visible?: ?boolean,\n\n /**\n * The `onRequestClose` callback is called when the user taps the hardware\n * back button on Android or the menu button on Apple TV.\n *\n * This is required on Apple TV and Android.\n *\n * See https://reactnative.dev/docs/modal.html#onrequestclose\n */\n onRequestClose?: ?DirectEventHandler,\n\n /**\n * The `onShow` prop allows passing a function that will be called once the\n * modal has been shown.\n *\n * See https://reactnative.dev/docs/modal.html#onshow\n */\n onShow?: ?DirectEventHandler,\n\n /**\n * The `onDismiss` prop allows passing a function that will be called once\n * the modal has been dismissed.\n *\n * See https://reactnative.dev/docs/modal.html#ondismiss\n */\n onDismiss?: ?() => mixed,\n\n /**\n * The `supportedOrientations` prop allows the modal to be rotated to any of the specified orientations.\n *\n * See https://reactnative.dev/docs/modal.html#supportedorientations\n */\n supportedOrientations?: ?$ReadOnlyArray<\n | 'portrait'\n | 'portrait-upside-down'\n | 'landscape'\n | 'landscape-left'\n | 'landscape-right',\n >,\n\n /**\n * The `onOrientationChange` callback is called when the orientation changes while the modal is being displayed.\n *\n * See https://reactnative.dev/docs/modal.html#onorientationchange\n */\n onOrientationChange?: ?DirectEventHandler,\n|}>;\n\nfunction confirmProps(props: Props) {\n if (__DEV__) {\n if (\n props.presentationStyle &&\n props.presentationStyle !== 'overFullScreen' &&\n props.transparent === true\n ) {\n console.warn(\n `Modal with '${props.presentationStyle}' presentation style and 'transparent' value is not supported.`,\n );\n }\n }\n}\n\nclass Modal extends React.Component {\n static defaultProps: {|hardwareAccelerated: boolean, visible: boolean|} = {\n visible: true,\n hardwareAccelerated: false,\n };\n\n static contextType: React.Context = RootTagContext;\n\n _identifier: number;\n _eventSubscription: ?EventSubscription;\n\n constructor(props: Props) {\n super(props);\n if (__DEV__) {\n confirmProps(props);\n }\n this._identifier = uniqueModalIdentifier++;\n }\n\n componentDidMount() {\n // 'modalDismissed' is for the old renderer in iOS only\n if (ModalEventEmitter) {\n this._eventSubscription = ModalEventEmitter.addListener(\n 'modalDismissed',\n event => {\n if (event.modalID === this._identifier && this.props.onDismiss) {\n this.props.onDismiss();\n }\n },\n );\n }\n }\n\n componentWillUnmount() {\n if (this._eventSubscription) {\n this._eventSubscription.remove();\n }\n }\n\n componentDidUpdate() {\n if (__DEV__) {\n confirmProps(this.props);\n }\n }\n\n render(): React.Node {\n if (this.props.visible !== true) {\n return null;\n }\n\n const containerStyles = {\n backgroundColor:\n this.props.transparent === true ? 'transparent' : 'white',\n };\n\n let animationType = this.props.animationType || 'none';\n\n let presentationStyle = this.props.presentationStyle;\n if (!presentationStyle) {\n presentationStyle = 'fullScreen';\n if (this.props.transparent === true) {\n presentationStyle = 'overFullScreen';\n }\n }\n\n const innerChildren = __DEV__ ? (\n {this.props.children}\n ) : (\n this.props.children\n );\n\n return (\n {\n if (this.props.onDismiss) {\n this.props.onDismiss();\n }\n }}\n visible={this.props.visible}\n statusBarTranslucent={this.props.statusBarTranslucent}\n identifier={this._identifier}\n style={styles.modal}\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n onStartShouldSetResponder={this._shouldSetResponder}\n supportedOrientations={this.props.supportedOrientations}\n onOrientationChange={this.props.onOrientationChange}>\n \n \n \n {innerChildren}\n \n \n \n \n );\n }\n\n // We don't want any responder events bubbling out of the modal.\n _shouldSetResponder(): boolean {\n return true;\n }\n}\n\nconst side = I18nManager.getConstants().isRTL ? 'right' : 'left';\nconst styles = StyleSheet.create({\n modal: {\n position: 'absolute',\n },\n container: {\n /* $FlowFixMe[invalid-computed-prop] (>=0.111.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.111 was deployed. To see\n * the error, delete this comment and run Flow. */\n [side]: 0,\n top: 0,\n flex: 1,\n },\n});\n\nconst ExportedModal: React.AbstractComponent<\n React.ElementConfig,\n> = ModalInjection.unstable_Modal ?? Modal;\n\nmodule.exports = ExportedModal;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport typeof Modal from './Modal';\n\nexport default {\n unstable_Modal: (null: ?Modal),\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n // RCTEventEmitter\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.get('ModalManager'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport codegenNativeComponent from '../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../Renderer/shims/ReactNativeTypes';\nimport type {\n WithDefault,\n DirectEventHandler,\n Int32,\n} from '../Types/CodegenTypes';\n\nimport type {ViewProps} from '../Components/View/ViewPropTypes';\n\ntype OrientationChangeEvent = $ReadOnly<{|\n orientation: 'portrait' | 'landscape',\n|}>;\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n /**\n * The `animationType` prop controls how the modal animates.\n *\n * See https://reactnative.dev/docs/modal.html#animationtype\n */\n animationType?: WithDefault<'none' | 'slide' | 'fade', 'none'>,\n\n /**\n * The `presentationStyle` prop controls how the modal appears.\n *\n * See https://reactnative.dev/docs/modal.html#presentationstyle\n */\n presentationStyle?: WithDefault<\n 'fullScreen' | 'pageSheet' | 'formSheet' | 'overFullScreen',\n 'fullScreen',\n >,\n\n /**\n * The `transparent` prop determines whether your modal will fill the\n * entire view.\n *\n * See https://reactnative.dev/docs/modal.html#transparent\n */\n transparent?: WithDefault,\n\n /**\n * The `statusBarTranslucent` prop determines whether your modal should go under\n * the system statusbar.\n *\n * See https://reactnative.dev/docs/modal.html#statusBarTranslucent\n */\n statusBarTranslucent?: WithDefault,\n\n /**\n * The `hardwareAccelerated` prop controls whether to force hardware\n * acceleration for the underlying window.\n *\n * See https://reactnative.dev/docs/modal.html#hardwareaccelerated\n */\n hardwareAccelerated?: WithDefault,\n\n /**\n * The `onRequestClose` callback is called when the user taps the hardware\n * back button on Android or the menu button on Apple TV.\n *\n * This is required on Apple TV and Android.\n *\n * See https://reactnative.dev/docs/modal.html#onrequestclose\n */\n onRequestClose?: ?DirectEventHandler,\n\n /**\n * The `onShow` prop allows passing a function that will be called once the\n * modal has been shown.\n *\n * See https://reactnative.dev/docs/modal.html#onshow\n */\n onShow?: ?DirectEventHandler,\n\n /**\n * The `onDismiss` prop allows passing a function that will be called once\n * the modal has been dismissed.\n *\n * See https://reactnative.dev/docs/modal.html#ondismiss\n */\n onDismiss?: ?DirectEventHandler,\n\n /**\n * The `visible` prop determines whether your modal is visible.\n *\n * See https://reactnative.dev/docs/modal.html#visible\n */\n visible?: WithDefault,\n\n /**\n * Deprecated. Use the `animationType` prop instead.\n */\n animated?: WithDefault,\n\n /**\n * The `supportedOrientations` prop allows the modal to be rotated to any of the specified orientations.\n *\n * See https://reactnative.dev/docs/modal.html#supportedorientations\n */\n supportedOrientations?: WithDefault<\n $ReadOnlyArray<\n | 'portrait'\n | 'portrait-upside-down'\n | 'landscape'\n | 'landscape-left'\n | 'landscape-right',\n >,\n 'portrait',\n >,\n\n /**\n * The `onOrientationChange` callback is called when the orientation changes while the modal is being displayed.\n *\n * See https://reactnative.dev/docs/modal.html#onorientationchange\n */\n onOrientationChange?: ?DirectEventHandler,\n\n /**\n * The `identifier` is the unique number for identifying Modal components.\n */\n identifier?: WithDefault,\n|}>;\n\nexport default (codegenNativeComponent('ModalHostView', {\n interfaceOnly: true,\n paperComponentName: 'RCTModalHostView',\n}): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport View from '../Components/View/View';\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\nimport StyleSheet from '../StyleSheet/StyleSheet';\nimport {type EventSubscription} from '../vendor/emitter/EventEmitter';\nimport {RootTagContext, createRootTag} from './RootTag';\nimport type {RootTag} from './RootTag';\nimport * as React from 'react';\n\ntype Props = $ReadOnly<{|\n children?: React.Node,\n fabric?: boolean,\n useConcurrentRoot?: boolean,\n rootTag: number | RootTag,\n initialProps?: {...},\n showArchitectureIndicator?: boolean,\n WrapperComponent?: ?React.ComponentType,\n internal_excludeLogBox?: ?boolean,\n|}>;\n\ntype State = {|\n inspector: ?React.Node,\n mainKey: number,\n hasError: boolean,\n|};\n\nclass AppContainer extends React.Component {\n state: State = {\n inspector: null,\n mainKey: 1,\n hasError: false,\n };\n _mainRef: ?React.ElementRef;\n _subscription: ?EventSubscription = null;\n\n static getDerivedStateFromError: any = undefined;\n\n componentDidMount(): void {\n if (__DEV__) {\n if (!global.__RCTProfileIsProfiling) {\n this._subscription = RCTDeviceEventEmitter.addListener(\n 'toggleElementInspector',\n () => {\n const Inspector = require('../Inspector/Inspector');\n const inspector = this.state.inspector ? null : (\n {\n this.setState(\n s => ({mainKey: s.mainKey + 1}),\n () => updateInspectedView(this._mainRef),\n );\n }}\n />\n );\n this.setState({inspector});\n },\n );\n }\n }\n }\n\n componentWillUnmount(): void {\n if (this._subscription != null) {\n this._subscription.remove();\n }\n }\n\n render(): React.Node {\n let logBox = null;\n if (__DEV__) {\n if (\n !global.__RCTProfileIsProfiling &&\n !this.props.internal_excludeLogBox\n ) {\n const LogBoxNotificationContainer = require('../LogBox/LogBoxNotificationContainer')\n .default;\n logBox = ;\n }\n }\n\n let innerView = (\n {\n this._mainRef = ref;\n }}>\n {this.props.children}\n \n );\n\n const Wrapper = this.props.WrapperComponent;\n if (Wrapper != null) {\n innerView = (\n \n {innerView}\n \n );\n }\n return (\n \n \n {!this.state.hasError && innerView}\n {this.state.inspector}\n {logBox}\n \n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n appContainer: {\n flex: 1,\n },\n});\n\nmodule.exports = AppContainer;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport * as React from 'react';\n\n// TODO: Make this into an opaque type.\nexport opaque type RootTag = number;\n\nexport const RootTagContext: React$Context = React.createContext(\n 0,\n);\n\nif (__DEV__) {\n RootTagContext.displayName = 'RootTagContext';\n}\n\n/**\n * Intended to only be used by `AppContainer`.\n */\nexport function createRootTag(rootTag: number | RootTag): RootTag {\n return rootTag;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport NativeI18nManager from './NativeI18nManager';\n\nconst i18nConstants: {|\n doLeftAndRightSwapInRTL: boolean,\n isRTL: boolean,\n localeIdentifier?: ?string,\n|} = getI18nManagerConstants();\n\nfunction getI18nManagerConstants() {\n if (NativeI18nManager) {\n const {\n isRTL,\n doLeftAndRightSwapInRTL,\n localeIdentifier,\n } = NativeI18nManager.getConstants();\n return {isRTL, doLeftAndRightSwapInRTL, localeIdentifier};\n }\n\n return {\n isRTL: false,\n doLeftAndRightSwapInRTL: true,\n };\n}\n\nmodule.exports = {\n getConstants: (): {|\n doLeftAndRightSwapInRTL: boolean,\n isRTL: boolean,\n localeIdentifier: ?string,\n |} => {\n return i18nConstants;\n },\n\n allowRTL: (shouldAllow: boolean) => {\n if (!NativeI18nManager) {\n return;\n }\n\n NativeI18nManager.allowRTL(shouldAllow);\n },\n\n forceRTL: (shouldForce: boolean) => {\n if (!NativeI18nManager) {\n return;\n }\n\n NativeI18nManager.forceRTL(shouldForce);\n },\n\n swapLeftAndRightInRTL: (flipStyles: boolean) => {\n if (!NativeI18nManager) {\n return;\n }\n\n NativeI18nManager.swapLeftAndRightInRTL(flipStyles);\n },\n\n isRTL: i18nConstants.isRTL,\n doLeftAndRightSwapInRTL: i18nConstants.doLeftAndRightSwapInRTL,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n isRTL: boolean,\n doLeftAndRightSwapInRTL: boolean,\n localeIdentifier: ?string,\n |};\n allowRTL: (allowRTL: boolean) => void;\n forceRTL: (forceRTL: boolean) => void;\n swapLeftAndRightInRTL: (flipStyles: boolean) => void;\n}\n\nexport default (TurboModuleRegistry.get('I18nManager'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\nimport {useMemo, useState, useRef, useImperativeHandle} from 'react';\nimport useAndroidRippleForView, {\n type RippleConfig,\n} from './useAndroidRippleForView';\nimport type {\n AccessibilityActionEvent,\n AccessibilityActionInfo,\n AccessibilityRole,\n AccessibilityState,\n AccessibilityValue,\n} from '../View/ViewAccessibility';\nimport {PressabilityDebugView} from '../../Pressability/PressabilityDebug';\nimport usePressability from '../../Pressability/usePressability';\nimport {normalizeRect, type RectOrSize} from '../../StyleSheet/Rect';\nimport type {LayoutEvent, PressEvent} from '../../Types/CoreEventTypes';\nimport View from '../View/View';\n\ntype ViewStyleProp = $ElementType, 'style'>;\n\nexport type StateCallbackType = $ReadOnly<{|\n pressed: boolean,\n|}>;\n\ntype Props = $ReadOnly<{|\n /**\n * Accessibility.\n */\n accessibilityActions?: ?$ReadOnlyArray,\n accessibilityElementsHidden?: ?boolean,\n accessibilityHint?: ?Stringish,\n accessibilityIgnoresInvertColors?: ?boolean,\n accessibilityLabel?: ?Stringish,\n accessibilityLiveRegion?: ?('none' | 'polite' | 'assertive'),\n accessibilityRole?: ?AccessibilityRole,\n accessibilityState?: ?AccessibilityState,\n accessibilityValue?: ?AccessibilityValue,\n accessibilityViewIsModal?: ?boolean,\n accessible?: ?boolean,\n focusable?: ?boolean,\n importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),\n onAccessibilityAction?: ?(event: AccessibilityActionEvent) => mixed,\n\n /**\n * Whether a press gesture can be interrupted by a parent gesture such as a\n * scroll event. Defaults to true.\n */\n cancelable?: ?boolean,\n\n /**\n * Either children or a render prop that receives a boolean reflecting whether\n * the component is currently pressed.\n */\n children: React.Node | ((state: StateCallbackType) => React.Node),\n\n /**\n * Duration (in milliseconds) from `onPressIn` before `onLongPress` is called.\n */\n delayLongPress?: ?number,\n\n /**\n * Whether the press behavior is disabled.\n */\n disabled?: ?boolean,\n\n /**\n * Additional distance outside of this view in which a press is detected.\n */\n hitSlop?: ?RectOrSize,\n\n /**\n * Additional distance outside of this view in which a touch is considered a\n * press before `onPressOut` is triggered.\n */\n pressRetentionOffset?: ?RectOrSize,\n\n /**\n * Called when this view's layout changes.\n */\n onLayout?: ?(event: LayoutEvent) => mixed,\n\n /**\n * Called when a long-tap gesture is detected.\n */\n onLongPress?: ?(event: PressEvent) => mixed,\n\n /**\n * Called when a single tap gesture is detected.\n */\n onPress?: ?(event: PressEvent) => mixed,\n\n /**\n * Called when a touch is engaged before `onPress`.\n */\n onPressIn?: ?(event: PressEvent) => mixed,\n\n /**\n * Called when a touch is released before `onPress`.\n */\n onPressOut?: ?(event: PressEvent) => mixed,\n\n /**\n * Either view styles or a function that receives a boolean reflecting whether\n * the component is currently pressed and returns view styles.\n */\n style?: ViewStyleProp | ((state: StateCallbackType) => ViewStyleProp),\n\n /**\n * Identifier used to find this view in tests.\n */\n testID?: ?string,\n\n /**\n * If true, doesn't play system sound on touch.\n */\n android_disableSound?: ?boolean,\n\n /**\n * Enables the Android ripple effect and configures its color.\n */\n android_ripple?: ?RippleConfig,\n\n /**\n * Used only for documentation or testing (e.g. snapshot testing).\n */\n testOnly_pressed?: ?boolean,\n\n /**\n * Duration to wait after press down before calling `onPressIn`.\n */\n unstable_pressDelay?: ?number,\n|}>;\n\n/**\n * Component used to build display components that should respond to whether the\n * component is currently pressed or not.\n */\nfunction Pressable(props: Props, forwardedRef): React.Node {\n const {\n accessible,\n android_disableSound,\n android_ripple,\n cancelable,\n children,\n delayLongPress,\n disabled,\n focusable,\n onLongPress,\n onPress,\n onPressIn,\n onPressOut,\n pressRetentionOffset,\n style,\n testOnly_pressed,\n unstable_pressDelay,\n ...restProps\n } = props;\n\n const viewRef = useRef | null>(null);\n useImperativeHandle(forwardedRef, () => viewRef.current);\n\n const android_rippleConfig = useAndroidRippleForView(android_ripple, viewRef);\n\n const [pressed, setPressed] = usePressState(testOnly_pressed === true);\n\n const hitSlop = normalizeRect(props.hitSlop);\n\n const accessibilityState =\n disabled != null\n ? {...props.accessibilityState, disabled}\n : props.accessibilityState;\n\n const restPropsWithDefaults: React.ElementConfig = {\n ...restProps,\n ...android_rippleConfig?.viewProps,\n accessible: accessible !== false,\n accessibilityState,\n focusable: focusable !== false,\n hitSlop,\n };\n\n const config = useMemo(\n () => ({\n cancelable,\n disabled,\n hitSlop,\n pressRectOffset: pressRetentionOffset,\n android_disableSound,\n delayLongPress,\n delayPressIn: unstable_pressDelay,\n onLongPress,\n onPress,\n onPressIn(event: PressEvent): void {\n if (android_rippleConfig != null) {\n android_rippleConfig.onPressIn(event);\n }\n setPressed(true);\n if (onPressIn != null) {\n onPressIn(event);\n }\n },\n onPressMove: android_rippleConfig?.onPressMove,\n onPressOut(event: PressEvent): void {\n if (android_rippleConfig != null) {\n android_rippleConfig.onPressOut(event);\n }\n setPressed(false);\n if (onPressOut != null) {\n onPressOut(event);\n }\n },\n }),\n [\n android_disableSound,\n android_rippleConfig,\n cancelable,\n delayLongPress,\n disabled,\n hitSlop,\n onLongPress,\n onPress,\n onPressIn,\n onPressOut,\n pressRetentionOffset,\n setPressed,\n unstable_pressDelay,\n ],\n );\n const eventHandlers = usePressability(config);\n\n return (\n \n {typeof children === 'function' ? children({pressed}) : children}\n {__DEV__ ? : null}\n \n );\n}\n\nfunction usePressState(forcePressed: boolean): [boolean, (boolean) => void] {\n const [pressed, setPressed] = useState(false);\n return [pressed || forcePressed, setPressed];\n}\n\nconst MemoedPressable = React.memo(React.forwardRef(Pressable));\nMemoedPressable.displayName = 'Pressable';\n\nexport default (MemoedPressable: React.AbstractComponent<\n Props,\n React.ElementRef,\n>);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport invariant from 'invariant';\nimport {Commands} from '../View/ViewNativeComponent';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {PressEvent} from '../../Types/CoreEventTypes';\nimport {Platform, View, processColor} from 'react-native';\nimport * as React from 'react';\nimport {useMemo} from 'react';\n\ntype NativeBackgroundProp = $ReadOnly<{|\n type: 'RippleAndroid',\n color: ?number,\n borderless: boolean,\n rippleRadius: ?number,\n|}>;\n\nexport type RippleConfig = {|\n color?: ColorValue,\n borderless?: boolean,\n radius?: number,\n foreground?: boolean,\n|};\n\n/**\n * Provides the event handlers and props for configuring the ripple effect on\n * supported versions of Android.\n */\nexport default function useAndroidRippleForView(\n rippleConfig: ?RippleConfig,\n viewRef: {|current: null | React.ElementRef|},\n): ?$ReadOnly<{|\n onPressIn: (event: PressEvent) => void,\n onPressMove: (event: PressEvent) => void,\n onPressOut: (event: PressEvent) => void,\n viewProps:\n | $ReadOnly<{|nativeBackgroundAndroid: NativeBackgroundProp|}>\n | $ReadOnly<{|nativeForegroundAndroid: NativeBackgroundProp|}>,\n|}> {\n const {color, borderless, radius, foreground} = rippleConfig ?? {};\n\n return useMemo(() => {\n if (\n Platform.OS === 'android' &&\n Platform.Version >= 21 &&\n (color != null || borderless != null || radius != null)\n ) {\n const processedColor = processColor(color);\n invariant(\n processedColor == null || typeof processedColor === 'number',\n 'Unexpected color given for Ripple color',\n );\n\n const nativeRippleValue = {\n type: 'RippleAndroid',\n color: processedColor,\n borderless: borderless === true,\n rippleRadius: radius,\n };\n\n return {\n viewProps:\n foreground === true\n ? {nativeForegroundAndroid: nativeRippleValue}\n : {nativeBackgroundAndroid: nativeRippleValue},\n onPressIn(event: PressEvent): void {\n const view = viewRef.current;\n if (view != null) {\n Commands.hotspotUpdate(\n view,\n event.nativeEvent.locationX ?? 0,\n event.nativeEvent.locationY ?? 0,\n );\n Commands.setPressed(view, true);\n }\n },\n onPressMove(event: PressEvent): void {\n const view = viewRef.current;\n if (view != null) {\n Commands.hotspotUpdate(\n view,\n event.nativeEvent.locationX ?? 0,\n event.nativeEvent.locationY ?? 0,\n );\n }\n },\n onPressOut(event: PressEvent): void {\n const view = viewRef.current;\n if (view != null) {\n Commands.setPressed(view, false);\n }\n },\n };\n }\n return null;\n }, [borderless, color, foreground, radius, viewRef]);\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport * as React from 'react';\nimport StyleSheet, {type ColorValue} from '../../StyleSheet/StyleSheet';\n\nimport RCTProgressViewNativeComponent from './RCTProgressViewNativeComponent';\nimport type {ImageSource} from '../../Image/ImageSource';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\ntype Props = $ReadOnly<{|\n ...ViewProps,\n\n /**\n * The progress bar style.\n */\n progressViewStyle?: ?('default' | 'bar'),\n\n /**\n * The progress value (between 0 and 1).\n */\n progress?: ?number,\n\n /**\n * The tint color of the progress bar itself.\n */\n progressTintColor?: ?ColorValue,\n\n /**\n * The tint color of the progress bar track.\n */\n trackTintColor?: ?ColorValue,\n\n /**\n * A stretchable image to display as the progress bar.\n */\n progressImage?: ?ImageSource,\n\n /**\n * A stretchable image to display behind the progress bar.\n */\n trackImage?: ?ImageSource,\n|}>;\n\n/**\n * Use `ProgressViewIOS` to render a UIProgressView on iOS.\n */\nconst ProgressViewIOS = (\n props: Props,\n forwardedRef?: ?React.Ref,\n) => (\n \n);\n\nconst styles = StyleSheet.create({\n progressView: {\n height: 2,\n },\n});\n\nconst ProgressViewIOSWithRef = React.forwardRef(ProgressViewIOS);\n\nmodule.exports = (ProgressViewIOSWithRef: typeof RCTProgressViewNativeComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {Float, WithDefault} from '../../Types/CodegenTypes';\nimport type {ImageSource} from '../../Image/ImageSource';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n // Props\n progressViewStyle?: WithDefault<'default' | 'bar', 'default'>,\n progress?: WithDefault,\n progressTintColor?: ?ColorValue,\n trackTintColor?: ?ColorValue,\n progressImage?: ?ImageSource,\n trackImage?: ?ImageSource,\n|}>;\n\nexport default (codegenNativeComponent(\n 'RCTProgressView',\n): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport Platform from '../../Utilities/Platform';\nimport * as React from 'react';\nimport View from '../View/View';\n\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\ntype Props = $ReadOnly<{|\n ...ViewProps,\n emulateUnlessSupported?: boolean,\n|}>;\n\nlet exported: React.AbstractComponent<\n Props,\n React.ElementRef>,\n>;\n\n/**\n * Renders nested content and automatically applies paddings reflect the portion\n * of the view that is not covered by navigation bars, tab bars, toolbars, and\n * other ancestor views.\n *\n * Moreover, and most importantly, Safe Area's paddings reflect physical\n * limitation of the screen, such as rounded corners or camera notches (aka\n * sensor housing area on iPhone X).\n */\nif (Platform.OS === 'android') {\n exported = React.forwardRef>>(\n function SafeAreaView(props, forwardedRef) {\n const {emulateUnlessSupported, ...localProps} = props;\n return ;\n },\n );\n} else {\n const RCTSafeAreaViewNativeComponent = require('./RCTSafeAreaViewNativeComponent')\n .default;\n\n exported = React.forwardRef>>(\n function SafeAreaView(props, forwardedRef) {\n return (\n \n );\n },\n );\n}\n\nexport default exported;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport type {WithDefault} from '../../Types/CodegenTypes';\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n // Props\n emulateUnlessSupported?: WithDefault,\n|}>;\n\nexport default (codegenNativeComponent('SafeAreaView', {\n paperComponentName: 'RCTSafeAreaView',\n interfaceOnly: true,\n}): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport * as React from 'react';\nimport StyleSheet from '../../StyleSheet/StyleSheet';\nimport type {OnChangeEvent} from './RCTSegmentedControlNativeComponent';\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport RCTSegmentedControlNativeComponent from './RCTSegmentedControlNativeComponent';\nimport type {SyntheticEvent} from 'react-native/Libraries/Types/CoreEventTypes';\n\ntype SegmentedControlIOSProps = $ReadOnly<{|\n ...ViewProps,\n /**\n * The labels for the control's segment buttons, in order.\n *\n * The default value is an empty array.\n */\n values?: $ReadOnlyArray,\n /**\n * The index in `props.values` of the segment to be (pre)selected.\n */\n selectedIndex?: ?number,\n /**\n * If false the user won't be able to interact with the control.\n *\n * The default value is true.\n */\n enabled?: boolean,\n /**\n * Accent color of the control.\n */\n tintColor?: ?string,\n /**\n * If true, then selecting a segment won't persist visually.\n * The `onValueChange` callback will still work as expected.\n */\n momentary?: ?boolean,\n /**\n * Callback that is called when the user taps a segment\n */\n onChange?: ?(event: SyntheticEvent) => void,\n /**\n * Callback that is called when the user taps a segment;\n * passes the segment's value as an argument\n */\n onValueChange?: ?(value: number) => mixed,\n|}>;\n\ntype Props = $ReadOnly<{|\n ...SegmentedControlIOSProps,\n forwardedRef: ?React.Ref,\n|}>;\n\n/**\n * Use `SegmentedControlIOS` to render a UISegmentedControl iOS.\n *\n * #### Programmatically changing selected index\n *\n * The selected index can be changed on the fly by assigning the\n * selectedIndex prop to a state variable, then changing that variable.\n * Note that the state variable would need to be updated as the user\n * selects a value and changes the index, as shown in the example below.\n *\n * ````\n * {\n * this.setState({selectedIndex: event.nativeEvent.selectedSegmentIndex});\n * }}\n * />\n * ````\n */\n\nclass SegmentedControlIOS extends React.Component {\n _onChange = (event: SyntheticEvent) => {\n this.props.onChange && this.props.onChange(event);\n this.props.onValueChange &&\n this.props.onValueChange(event.nativeEvent.value);\n };\n\n render() {\n const {\n enabled,\n forwardedRef,\n onValueChange,\n style,\n values,\n ...props\n } = this.props;\n return (\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n segmentedControl: {\n height: 28,\n },\n});\n\nconst SegmentedControlIOSWithRef = React.forwardRef(\n (\n props: SegmentedControlIOSProps,\n forwardedRef: ?React.Ref,\n ) => {\n return ;\n },\n);\n\n/* $FlowFixMe[cannot-resolve-name] (>=0.89.0 site=react_native_ios_fb) This\n * comment suppresses an error found when Flow v0.89 was deployed. To see the\n * error, delete this comment and run Flow. */\nmodule.exports = (SegmentedControlIOSWithRef: NativeSegmentedControlIOS);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport type {\n BubblingEventHandler,\n WithDefault,\n Int32,\n} from '../../Types/CodegenTypes';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\n\nexport type OnChangeEvent = $ReadOnly<{|\n value: Int32,\n selectedSegmentIndex: Int32,\n|}>;\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n // Props\n values?: $ReadOnlyArray,\n selectedIndex?: WithDefault,\n enabled?: WithDefault,\n tintColor?: ?ColorValue,\n textColor?: ?ColorValue,\n backgroundColor?: ?ColorValue,\n momentary?: WithDefault,\n\n // Events\n onChange?: ?BubblingEventHandler,\n|}>;\n\nexport default (codegenNativeComponent(\n 'RCTSegmentedControl',\n): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport * as React from 'react';\nimport Platform from '../../Utilities/Platform';\nimport SliderNativeComponent from './SliderNativeComponent';\nimport StyleSheet, {\n type ViewStyleProp,\n type ColorValue,\n} from '../../StyleSheet/StyleSheet';\n\nimport type {ImageSource} from '../../Image/ImageSource';\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport type {SyntheticEvent} from '../../Types/CoreEventTypes';\nimport type {AccessibilityState} from '../View/ViewAccessibility';\n\ntype Event = SyntheticEvent<\n $ReadOnly<{|\n value: number,\n /**\n * Android Only.\n */\n fromUser?: boolean,\n |}>,\n>;\n\ntype IOSProps = $ReadOnly<{|\n /**\n * Assigns a single image for the track. Only static images are supported.\n * The center pixel of the image will be stretched to fill the track.\n */\n trackImage?: ?ImageSource,\n\n /**\n * Assigns a minimum track image. Only static images are supported. The\n * rightmost pixel of the image will be stretched to fill the track.\n */\n minimumTrackImage?: ?ImageSource,\n\n /**\n * Assigns a maximum track image. Only static images are supported. The\n * leftmost pixel of the image will be stretched to fill the track.\n */\n maximumTrackImage?: ?ImageSource,\n\n /**\n * Sets an image for the thumb. Only static images are supported.\n */\n thumbImage?: ?ImageSource,\n|}>;\n\ntype Props = $ReadOnly<{|\n ...ViewProps,\n ...IOSProps,\n\n /**\n * Used to style and layout the `Slider`. See `StyleSheet.js` and\n * `DeprecatedViewStylePropTypes.js` for more info.\n */\n style?: ?ViewStyleProp,\n\n /**\n * Initial value of the slider. The value should be between minimumValue\n * and maximumValue, which default to 0 and 1 respectively.\n * Default value is 0.\n *\n * *This is not a controlled component*, you don't need to update the\n * value during dragging.\n */\n value?: ?number,\n\n /**\n * Step value of the slider. The value should be\n * between 0 and (maximumValue - minimumValue).\n * Default value is 0.\n */\n step?: ?number,\n\n /**\n * Initial minimum value of the slider. Default value is 0.\n */\n minimumValue?: ?number,\n\n /**\n * Initial maximum value of the slider. Default value is 1.\n */\n maximumValue?: ?number,\n\n /**\n * The color used for the track to the left of the button.\n * Overrides the default blue gradient image on iOS.\n */\n minimumTrackTintColor?: ?ColorValue,\n\n /**\n * The color used for the track to the right of the button.\n * Overrides the default blue gradient image on iOS.\n */\n maximumTrackTintColor?: ?ColorValue,\n /**\n * The color used to tint the default thumb images on iOS, or the\n * color of the foreground switch grip on Android.\n */\n thumbTintColor?: ?ColorValue,\n\n /**\n * If true the user won't be able to move the slider.\n * Default value is false.\n */\n disabled?: ?boolean,\n\n /**\n * Callback continuously called while the user is dragging the slider.\n */\n onValueChange?: ?(value: number) => void,\n\n /**\n * Callback that is called when the user releases the slider,\n * regardless if the value has changed. The current value is passed\n * as an argument to the callback handler.\n */\n onSlidingComplete?: ?(value: number) => void,\n\n /**\n * Used to locate this view in UI automation tests.\n */\n testID?: ?string,\n\n /**\n Indicates to accessibility services that UI Component is in a specific State.\n */\n accessibilityState?: ?AccessibilityState,\n|}>;\n\n/**\n * A component used to select a single value from a range of values.\n *\n * ### Usage\n *\n * The example below shows how to use `Slider` to change\n * a value used by `Text`. The value is stored using\n * the state of the root component (`App`). The same component\n * subscribes to the `onValueChange` of `Slider` and changes\n * the value using `setState`.\n *\n *```\n * import React from 'react';\n * import { StyleSheet, Text, View, Slider } from 'react-native';\n *\n * export default class App extends React.Component {\n * constructor(props) {\n * super(props);\n * this.state = {\n * value: 50\n * }\n * }\n *\n * change(value) {\n * this.setState(() => {\n * return {\n * value: parseFloat(value)\n * };\n * });\n * }\n *\n * render() {\n * const {value} = this.state;\n * return (\n * \n * {String(value)}\n * \n * \n * );\n * }\n * }\n *\n * const styles = StyleSheet.create({\n * container: {\n * flex: 1,\n * flexDirection: 'column',\n * justifyContent: 'center'\n * },\n * text: {\n * fontSize: 50,\n * textAlign: 'center'\n * }\n * });\n *```\n *\n */\nconst Slider = (\n props: Props,\n forwardedRef?: ?React.Ref,\n) => {\n const style = StyleSheet.compose(styles.slider, props.style);\n\n const {\n value = 0.5,\n minimumValue = 0,\n maximumValue = 1,\n step = 0,\n onValueChange,\n onSlidingComplete,\n ...localProps\n } = props;\n\n const onValueChangeEvent = onValueChange\n ? (event: Event) => {\n let userEvent = true;\n if (Platform.OS === 'android') {\n // On Android there's a special flag telling us the user is\n // dragging the slider.\n userEvent =\n event.nativeEvent.fromUser != null && event.nativeEvent.fromUser;\n }\n userEvent && onValueChange(event.nativeEvent.value);\n }\n : null;\n\n const onChangeEvent = onValueChangeEvent;\n const onSlidingCompleteEvent = onSlidingComplete\n ? (event: Event) => {\n onSlidingComplete(event.nativeEvent.value);\n }\n : null;\n\n const disabled =\n props.disabled === true || props.accessibilityState?.disabled === true;\n const accessibilityState = disabled\n ? {...props.accessibilityState, disabled: true}\n : props.accessibilityState;\n\n return (\n false}\n onSlidingComplete={onSlidingCompleteEvent}\n onStartShouldSetResponder={() => true}\n onValueChange={onValueChangeEvent}\n ref={forwardedRef}\n step={step}\n style={style}\n value={value}\n />\n );\n};\n\nconst SliderWithRef: React.AbstractComponent<\n Props,\n React.ElementRef,\n> = React.forwardRef(Slider);\n\nlet styles;\nif (Platform.OS === 'ios') {\n styles = StyleSheet.create({\n slider: {\n height: 40,\n },\n });\n} else {\n styles = StyleSheet.create({\n slider: {},\n });\n}\n\nmodule.exports = SliderWithRef;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {\n BubblingEventHandler,\n DirectEventHandler,\n Double,\n WithDefault,\n} from '../../Types/CodegenTypes';\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ImageSource} from '../../Image/ImageSource';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\ntype Event = $ReadOnly<{|\n value: Double,\n fromUser?: boolean,\n|}>;\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n // Props\n disabled?: WithDefault,\n enabled?: WithDefault,\n maximumTrackImage?: ?ImageSource,\n maximumTrackTintColor?: ?ColorValue,\n maximumValue?: WithDefault,\n minimumTrackImage?: ?ImageSource,\n minimumTrackTintColor?: ?ColorValue,\n minimumValue?: WithDefault,\n step?: WithDefault,\n testID?: WithDefault,\n thumbImage?: ?ImageSource,\n thumbTintColor?: ?ColorValue,\n trackImage?: ?ImageSource,\n value?: WithDefault,\n\n // Events\n onChange?: ?BubblingEventHandler,\n onValueChange?: ?BubblingEventHandler,\n onSlidingComplete?: ?DirectEventHandler,\n|}>;\n\nexport default (codegenNativeComponent('Slider', {\n interfaceOnly: true,\n paperComponentName: 'RCTSlider',\n}): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport * as React from 'react';\nimport Platform from '../../Utilities/Platform';\nimport invariant from 'invariant';\nimport processColor from '../../StyleSheet/processColor';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\n\nimport NativeStatusBarManagerAndroid from './NativeStatusBarManagerAndroid';\nimport NativeStatusBarManagerIOS from './NativeStatusBarManagerIOS';\n\n/**\n * Status bar style\n */\nexport type StatusBarStyle = $Keys<{\n /**\n * Default status bar style (dark for iOS, light for Android)\n */\n default: string,\n /**\n * Dark background, white texts and icons\n */\n 'light-content': string,\n /**\n * Light background, dark texts and icons\n */\n 'dark-content': string,\n ...\n}>;\n\n/**\n * Status bar animation\n */\nexport type StatusBarAnimation = $Keys<{\n /**\n * No animation\n */\n none: string,\n /**\n * Fade animation\n */\n fade: string,\n /**\n * Slide animation\n */\n slide: string,\n ...\n}>;\n\ntype AndroidProps = $ReadOnly<{|\n /**\n * The background color of the status bar.\n * @platform android\n */\n backgroundColor?: ?ColorValue,\n /**\n * If the status bar is translucent.\n * When translucent is set to true, the app will draw under the status bar.\n * This is useful when using a semi transparent status bar color.\n *\n * @platform android\n */\n translucent?: ?boolean,\n|}>;\n\ntype IOSProps = $ReadOnly<{|\n /**\n * If the network activity indicator should be visible.\n *\n * @platform ios\n */\n networkActivityIndicatorVisible?: ?boolean,\n /**\n * The transition effect when showing and hiding the status bar using the `hidden`\n * prop. Defaults to 'fade'.\n *\n * @platform ios\n */\n showHideTransition?: ?('fade' | 'slide' | 'none'),\n|}>;\n\ntype Props = $ReadOnly<{|\n ...AndroidProps,\n ...IOSProps,\n /**\n * If the status bar is hidden.\n */\n hidden?: ?boolean,\n /**\n * If the transition between status bar property changes should be animated.\n * Supported for backgroundColor, barStyle and hidden.\n */\n animated?: ?boolean,\n /**\n * Sets the color of the status bar text.\n */\n barStyle?: ?('default' | 'light-content' | 'dark-content'),\n|}>;\n\n/**\n * Merges the prop stack with the default values.\n */\nfunction mergePropsStack(\n propsStack: Array,\n defaultValues: Object,\n): Object {\n return propsStack.reduce((prev, cur) => {\n for (const prop in cur) {\n if (cur[prop] != null) {\n prev[prop] = cur[prop];\n }\n }\n return prev;\n }, Object.assign({}, defaultValues));\n}\n\n/**\n * Returns an object to insert in the props stack from the props\n * and the transition/animation info.\n */\nfunction createStackEntry(props: any): any {\n const animated = props.animated ?? false;\n const showHideTransition = props.showHideTransition ?? 'fade';\n return {\n backgroundColor:\n props.backgroundColor != null\n ? {\n value: props.backgroundColor,\n animated,\n }\n : null,\n barStyle:\n props.barStyle != null\n ? {\n value: props.barStyle,\n animated,\n }\n : null,\n translucent: props.translucent,\n hidden:\n props.hidden != null\n ? {\n value: props.hidden,\n animated,\n transition: showHideTransition,\n }\n : null,\n networkActivityIndicatorVisible: props.networkActivityIndicatorVisible,\n };\n}\n\n/**\n * Component to control the app status bar.\n *\n * ### Usage with Navigator\n *\n * It is possible to have multiple `StatusBar` components mounted at the same\n * time. The props will be merged in the order the `StatusBar` components were\n * mounted. One use case is to specify status bar styles per route using `Navigator`.\n *\n * ```\n * \n * \n * \n * \n * \n * }\n * />\n * \n * ```\n *\n * ### Imperative API\n *\n * For cases where using a component is not ideal, there are static methods\n * to manipulate the `StatusBar` display stack. These methods have the same\n * behavior as mounting and unmounting a `StatusBar` component.\n *\n * For example, you can call `StatusBar.pushStackEntry` to update the status bar\n * before launching a third-party native UI component, and then call\n * `StatusBar.popStackEntry` when completed.\n *\n * ```\n * const openThirdPartyBugReporter = async () => {\n * // The bug reporter has a dark background, so we push a new status bar style.\n * const stackEntry = StatusBar.pushStackEntry({barStyle: 'light-content'});\n *\n * // `open` returns a promise that resolves when the UI is dismissed.\n * await BugReporter.open();\n *\n * // Don't forget to call `popStackEntry` when you're done.\n * StatusBar.popStackEntry(stackEntry);\n * };\n * ```\n *\n * There is a legacy imperative API that enables you to manually update the\n * status bar styles. However, the legacy API does not update the internal\n * `StatusBar` display stack, which means that any changes will be overridden\n * whenever a `StatusBar` component is mounted or unmounted.\n *\n * It is strongly advised that you use `pushStackEntry`, `popStackEntry`, or\n * `replaceStackEntry` instead of the static methods beginning with `set`.\n *\n * ### Constants\n *\n * `currentHeight` (Android only) The height of the status bar.\n */\nclass StatusBar extends React.Component {\n static _propsStack = [];\n\n static _defaultProps = createStackEntry({\n backgroundColor:\n Platform.OS === 'android'\n ? NativeStatusBarManagerAndroid.getConstants()\n .DEFAULT_BACKGROUND_COLOR ?? 'black'\n : 'black',\n barStyle: 'default',\n translucent: false,\n hidden: false,\n networkActivityIndicatorVisible: false,\n });\n\n // Timer for updating the native module values at the end of the frame.\n static _updateImmediate = null;\n\n // The current merged values from the props stack.\n static _currentValues = null;\n\n // TODO(janic): Provide a real API to deal with status bar height. See the\n // discussion in #6195.\n /**\n * The current height of the status bar on the device.\n *\n * @platform android\n */\n static currentHeight: ?number =\n Platform.OS === 'android'\n ? NativeStatusBarManagerAndroid.getConstants().HEIGHT\n : null;\n\n // Provide an imperative API as static functions of the component.\n // See the corresponding prop for more detail.\n\n /**\n * Show or hide the status bar\n * @param hidden Hide the status bar.\n * @param animation Optional animation when\n * changing the status bar hidden property.\n */\n static setHidden(hidden: boolean, animation?: StatusBarAnimation) {\n animation = animation || 'none';\n StatusBar._defaultProps.hidden.value = hidden;\n if (Platform.OS === 'ios') {\n NativeStatusBarManagerIOS.setHidden(hidden, animation);\n } else if (Platform.OS === 'android') {\n NativeStatusBarManagerAndroid.setHidden(hidden);\n }\n }\n\n /**\n * Set the status bar style\n * @param style Status bar style to set\n * @param animated Animate the style change.\n */\n static setBarStyle(style: StatusBarStyle, animated?: boolean) {\n animated = animated || false;\n StatusBar._defaultProps.barStyle.value = style;\n if (Platform.OS === 'ios') {\n NativeStatusBarManagerIOS.setStyle(style, animated);\n } else if (Platform.OS === 'android') {\n NativeStatusBarManagerAndroid.setStyle(style);\n }\n }\n\n /**\n * Control the visibility of the network activity indicator\n * @param visible Show the indicator.\n */\n static setNetworkActivityIndicatorVisible(visible: boolean) {\n if (Platform.OS !== 'ios') {\n console.warn(\n '`setNetworkActivityIndicatorVisible` is only available on iOS',\n );\n return;\n }\n StatusBar._defaultProps.networkActivityIndicatorVisible = visible;\n NativeStatusBarManagerIOS.setNetworkActivityIndicatorVisible(visible);\n }\n\n /**\n * Set the background color for the status bar\n * @param color Background color.\n * @param animated Animate the style change.\n */\n static setBackgroundColor(color: string, animated?: boolean) {\n if (Platform.OS !== 'android') {\n console.warn('`setBackgroundColor` is only available on Android');\n return;\n }\n animated = animated || false;\n StatusBar._defaultProps.backgroundColor.value = color;\n\n const processedColor = processColor(color);\n if (processedColor == null) {\n console.warn(\n `\\`StatusBar.setBackgroundColor\\`: Color ${color} parsed to null or undefined`,\n );\n return;\n }\n invariant(\n typeof processedColor === 'number',\n 'Unexpected color given for StatusBar.setBackgroundColor',\n );\n\n NativeStatusBarManagerAndroid.setColor(processedColor, animated);\n }\n\n /**\n * Control the translucency of the status bar\n * @param translucent Set as translucent.\n */\n static setTranslucent(translucent: boolean) {\n if (Platform.OS !== 'android') {\n console.warn('`setTranslucent` is only available on Android');\n return;\n }\n StatusBar._defaultProps.translucent = translucent;\n NativeStatusBarManagerAndroid.setTranslucent(translucent);\n }\n\n /**\n * Push a StatusBar entry onto the stack.\n * The return value should be passed to `popStackEntry` when complete.\n *\n * @param props Object containing the StatusBar props to use in the stack entry.\n */\n static pushStackEntry(props: any): any {\n const entry = createStackEntry(props);\n StatusBar._propsStack.push(entry);\n StatusBar._updatePropsStack();\n return entry;\n }\n\n /**\n * Pop a StatusBar entry from the stack.\n *\n * @param entry Entry returned from `pushStackEntry`.\n */\n static popStackEntry(entry: any) {\n const index = StatusBar._propsStack.indexOf(entry);\n if (index !== -1) {\n StatusBar._propsStack.splice(index, 1);\n }\n StatusBar._updatePropsStack();\n }\n\n /**\n * Replace an existing StatusBar stack entry with new props.\n *\n * @param entry Entry returned from `pushStackEntry` to replace.\n * @param props Object containing the StatusBar props to use in the replacement stack entry.\n */\n static replaceStackEntry(entry: any, props: any): any {\n const newEntry = createStackEntry(props);\n const index = StatusBar._propsStack.indexOf(entry);\n if (index !== -1) {\n StatusBar._propsStack[index] = newEntry;\n }\n StatusBar._updatePropsStack();\n return newEntry;\n }\n\n _stackEntry = null;\n\n componentDidMount() {\n // Every time a StatusBar component is mounted, we push it's prop to a stack\n // and always update the native status bar with the props from the top of then\n // stack. This allows having multiple StatusBar components and the one that is\n // added last or is deeper in the view hierarchy will have priority.\n this._stackEntry = StatusBar.pushStackEntry(this.props);\n }\n\n componentWillUnmount() {\n // When a StatusBar is unmounted, remove itself from the stack and update\n // the native bar with the next props.\n StatusBar.popStackEntry(this._stackEntry);\n }\n\n componentDidUpdate() {\n this._stackEntry = StatusBar.replaceStackEntry(\n this._stackEntry,\n this.props,\n );\n }\n\n /**\n * Updates the native status bar with the props from the stack.\n */\n static _updatePropsStack = () => {\n // Send the update to the native module only once at the end of the frame.\n clearImmediate(StatusBar._updateImmediate);\n StatusBar._updateImmediate = setImmediate(() => {\n const oldProps = StatusBar._currentValues;\n const mergedProps = mergePropsStack(\n StatusBar._propsStack,\n StatusBar._defaultProps,\n );\n\n // Update the props that have changed using the merged values from the props stack.\n if (Platform.OS === 'ios') {\n if (\n !oldProps ||\n oldProps.barStyle.value !== mergedProps.barStyle.value\n ) {\n NativeStatusBarManagerIOS.setStyle(\n mergedProps.barStyle.value,\n mergedProps.barStyle.animated || false,\n );\n }\n if (!oldProps || oldProps.hidden.value !== mergedProps.hidden.value) {\n NativeStatusBarManagerIOS.setHidden(\n mergedProps.hidden.value,\n mergedProps.hidden.animated\n ? mergedProps.hidden.transition\n : 'none',\n );\n }\n\n if (\n !oldProps ||\n oldProps.networkActivityIndicatorVisible !==\n mergedProps.networkActivityIndicatorVisible\n ) {\n NativeStatusBarManagerIOS.setNetworkActivityIndicatorVisible(\n mergedProps.networkActivityIndicatorVisible,\n );\n }\n } else if (Platform.OS === 'android') {\n //todo(T60684787): Add back optimization to only update bar style and\n //background color if the new value is different from the old value.\n NativeStatusBarManagerAndroid.setStyle(mergedProps.barStyle.value);\n const processedColor = processColor(mergedProps.backgroundColor.value);\n if (processedColor == null) {\n console.warn(\n `\\`StatusBar._updatePropsStack\\`: Color ${mergedProps.backgroundColor.value} parsed to null or undefined`,\n );\n } else {\n invariant(\n typeof processedColor === 'number',\n 'Unexpected color given in StatusBar._updatePropsStack',\n );\n NativeStatusBarManagerAndroid.setColor(\n processedColor,\n mergedProps.backgroundColor.animated,\n );\n }\n if (!oldProps || oldProps.hidden.value !== mergedProps.hidden.value) {\n NativeStatusBarManagerAndroid.setHidden(mergedProps.hidden.value);\n }\n if (!oldProps || oldProps.translucent !== mergedProps.translucent) {\n NativeStatusBarManagerAndroid.setTranslucent(mergedProps.translucent);\n }\n }\n // Update the current prop values.\n StatusBar._currentValues = mergedProps;\n });\n };\n\n render(): React.Node {\n return null;\n }\n}\n\nmodule.exports = StatusBar;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n +HEIGHT: number,\n +DEFAULT_BACKGROUND_COLOR: number,\n |};\n +setColor: (color: number, animated: boolean) => void;\n +setTranslucent: (translucent: boolean) => void;\n\n /**\n * - statusBarStyles can be:\n * - 'default'\n * - 'dark-content'\n */\n +setStyle: (statusBarStyle?: ?string) => void;\n +setHidden: (hidden: boolean) => void;\n}\n\nconst NativeModule = TurboModuleRegistry.getEnforcing('StatusBarManager');\nlet constants = null;\n\nconst NativeStatusBarManager = {\n getConstants(): {|\n +HEIGHT: number,\n +DEFAULT_BACKGROUND_COLOR?: number,\n |} {\n if (constants == null) {\n constants = NativeModule.getConstants();\n }\n return constants;\n },\n\n setColor(color: number, animated: boolean): void {\n NativeModule.setColor(color, animated);\n },\n\n setTranslucent(translucent: boolean): void {\n NativeModule.setTranslucent(translucent);\n },\n\n /**\n * - statusBarStyles can be:\n * - 'default'\n * - 'dark-content'\n */\n setStyle(statusBarStyle?: ?string): void {\n NativeModule.setStyle(statusBarStyle);\n },\n\n setHidden(hidden: boolean): void {\n NativeModule.setHidden(hidden);\n },\n};\n\nexport default NativeStatusBarManager;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n +HEIGHT: number,\n +DEFAULT_BACKGROUND_COLOR?: number,\n |};\n\n // TODO(T47754272) Can we remove this method?\n +getHeight: (callback: (result: {|height: number|}) => void) => void;\n +setNetworkActivityIndicatorVisible: (visible: boolean) => void;\n +addListener: (eventType: string) => void;\n +removeListeners: (count: number) => void;\n\n /**\n * - statusBarStyles can be:\n * - 'default'\n * - 'dark-content'\n * - 'light-content'\n */\n +setStyle: (statusBarStyle?: ?string, animated: boolean) => void;\n /**\n * - withAnimation can be: 'none' | 'fade' | 'slide'\n */\n +setHidden: (hidden: boolean, withAnimation: string) => void;\n}\n\nconst NativeModule = TurboModuleRegistry.getEnforcing('StatusBarManager');\nlet constants = null;\n\nconst NativeStatusBarManager = {\n getConstants(): {|\n +HEIGHT: number,\n +DEFAULT_BACKGROUND_COLOR?: number,\n |} {\n if (constants == null) {\n constants = NativeModule.getConstants();\n }\n return constants;\n },\n\n // TODO(T47754272) Can we remove this method?\n getHeight(callback: (result: {|height: number|}) => void): void {\n NativeModule.getHeight(callback);\n },\n\n setNetworkActivityIndicatorVisible(visible: boolean): void {\n NativeModule.setNetworkActivityIndicatorVisible(visible);\n },\n\n addListener(eventType: string): void {\n NativeModule.addListener(eventType);\n },\n\n removeListeners(count: number): void {\n NativeModule.removeListeners(count);\n },\n\n /**\n * - statusBarStyles can be:\n * - 'default'\n * - 'dark-content'\n * - 'light-content'\n */\n setStyle(statusBarStyle?: ?string, animated: boolean): void {\n NativeModule.setStyle(statusBarStyle, animated);\n },\n\n /**\n * - withAnimation can be: 'none' | 'fade' | 'slide'\n */\n setHidden(hidden: boolean, withAnimation: string): void {\n NativeModule.setHidden(hidden, withAnimation);\n },\n};\n\nexport default NativeStatusBarManager;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n * @generate-docs\n */\n\nimport Platform from '../../Utilities/Platform';\nimport * as React from 'react';\nimport StyleSheet from '../../StyleSheet/StyleSheet';\nimport useMergeRefs from '../../Utilities/useMergeRefs';\n\nimport AndroidSwitchNativeComponent, {\n Commands as AndroidSwitchCommands,\n} from './AndroidSwitchNativeComponent';\nimport SwitchNativeComponent, {\n Commands as SwitchCommands,\n} from './SwitchNativeComponent';\n\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {SyntheticEvent} from '../../Types/CoreEventTypes';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\ntype SwitchChangeEvent = SyntheticEvent<\n $ReadOnly<{|\n value: boolean,\n |}>,\n>;\n\nexport type Props = $ReadOnly<{|\n ...ViewProps,\n\n /**\n If true the user won't be able to toggle the switch.\n\n @default false\n */\n disabled?: ?boolean,\n\n /**\n The value of the switch. If true the switch will be turned on.\n\n @default false\n */\n value?: ?boolean,\n\n /**\n Color of the foreground switch grip. If this is set on iOS, the switch grip will lose its drop shadow.\n */\n thumbColor?: ?ColorValue,\n\n /**\n Custom colors for the switch track.\n\n _iOS_: When the switch value is false, the track shrinks into the border. If you want to change the\n color of the background exposed by the shrunken track, use\n [`ios_backgroundColor`](https://reactnative.dev/docs/switch#ios_backgroundColor).\n */\n trackColor?: ?$ReadOnly<{|\n false?: ?ColorValue,\n true?: ?ColorValue,\n |}>,\n\n /**\n On iOS, custom color for the background. This background color can be\n seen either when the switch value is false or when the switch is\n disabled (and the switch is translucent).\n */\n ios_backgroundColor?: ?ColorValue,\n\n /**\n Invoked when the user tries to change the value of the switch. Receives\n the change event as an argument. If you want to only receive the new\n value, use `onValueChange` instead.\n */\n onChange?: ?(event: SwitchChangeEvent) => Promise | void,\n\n /**\n Invoked when the user tries to change the value of the switch. Receives\n the new value as an argument. If you want to instead receive an event,\n use `onChange`.\n */\n onValueChange?: ?(value: boolean) => Promise | void,\n|}>;\nconst returnsFalse = () => false;\nconst returnsTrue = () => true;\n\n/**\n Renders a boolean input.\n\n This is a controlled component that requires an `onValueChange`\n callback that updates the `value` prop in order for the component to\n reflect user actions. If the `value` prop is not updated, the\n component will continue to render the supplied `value` prop instead of\n the expected result of any user actions.\n\n ```SnackPlayer name=Switch\n import React, { useState } from \"react\";\n import { View, Switch, StyleSheet } from \"react-native\";\n\n const App = () => {\n const [isEnabled, setIsEnabled] = useState(false);\n const toggleSwitch = () => setIsEnabled(previousState => !previousState);\n\n return (\n \n \n \n );\n }\n\n const styles = StyleSheet.create({\n container: {\n flex: 1,\n alignItems: \"center\",\n justifyContent: \"center\"\n }\n });\n\n export default App;\n ```\n */\n\nconst SwitchWithForwardedRef: React.AbstractComponent<\n Props,\n React.ElementRef<\n typeof SwitchNativeComponent | typeof AndroidSwitchNativeComponent,\n >,\n> = React.forwardRef(function Switch(props, forwardedRef): React.Node {\n const {\n disabled,\n ios_backgroundColor,\n onChange,\n onValueChange,\n style,\n thumbColor,\n trackColor,\n value,\n ...restProps\n } = props;\n const trackColorForFalse = trackColor?.false;\n const trackColorForTrue = trackColor?.true;\n\n const nativeSwitchRef = React.useRef | null>(null);\n\n const ref = useMergeRefs(nativeSwitchRef, forwardedRef);\n\n const [native, setNative] = React.useState({value: null});\n\n const handleChange = (event: SwitchChangeEvent) => {\n onChange?.(event);\n onValueChange?.(event.nativeEvent.value);\n setNative({value: event.nativeEvent.value});\n };\n\n React.useLayoutEffect(() => {\n // This is necessary in case native updates the switch and JS decides\n // that the update should be ignored and we should stick with the value\n // that we have in JS.\n const jsValue = value === true;\n const shouldUpdateNativeSwitch = native.value !== jsValue;\n if (\n shouldUpdateNativeSwitch &&\n nativeSwitchRef.current?.setNativeProps != null\n ) {\n if (Platform.OS === 'android') {\n AndroidSwitchCommands.setNativeValue(nativeSwitchRef.current, jsValue);\n } else {\n SwitchCommands.setValue(nativeSwitchRef.current, jsValue);\n }\n }\n }, [value, native]);\n\n if (Platform.OS === 'android') {\n const platformProps = {\n enabled: disabled !== true,\n on: value === true,\n style,\n thumbTintColor: thumbColor,\n trackColorForFalse: trackColorForFalse,\n trackColorForTrue: trackColorForTrue,\n trackTintColor: value === true ? trackColorForTrue : trackColorForFalse,\n };\n\n return (\n \n );\n } else {\n const platformProps = {\n disabled,\n onTintColor: trackColorForTrue,\n style: StyleSheet.compose(\n {height: 31, width: 51},\n StyleSheet.compose(\n style,\n ios_backgroundColor == null\n ? null\n : {\n backgroundColor: ios_backgroundColor,\n borderRadius: 16,\n },\n ),\n ),\n thumbTintColor: thumbColor,\n tintColor: trackColorForFalse,\n value: value === true,\n };\n\n return (\n \n );\n }\n});\n\nexport default SwitchWithForwardedRef;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport {useCallback} from 'react';\n\ntype CallbackRef = T => mixed;\ntype ObjectRef = {current: T, ...};\n\ntype Ref = CallbackRef | ObjectRef;\n\n/**\n * Constructs a new ref that forwards new values to each of the given refs. The\n * given refs will always be invoked in the order that they are supplied.\n *\n * WARNING: A known problem of merging refs using this approach is that if any\n * of the given refs change, the returned callback ref will also be changed. If\n * the returned callback ref is supplied as a `ref` to a React element, this may\n * lead to problems with the given refs being invoked more times than desired.\n */\nexport default function useMergeRefs(\n ...refs: $ReadOnlyArray>\n): CallbackRef {\n return useCallback(\n (current: T) => {\n for (const ref of refs) {\n if (ref != null) {\n if (typeof ref === 'function') {\n ref(current);\n } else {\n ref.current = current;\n }\n }\n }\n },\n [...refs], // eslint-disable-line react-hooks/exhaustive-deps\n );\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\nimport type {\n WithDefault,\n BubblingEventHandler,\n} from 'react-native/Libraries/Types/CodegenTypes';\n\nimport codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type {HostComponent} from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\n\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ViewProps} from '../View/ViewPropTypes';\n\ntype SwitchChangeEvent = $ReadOnly<{|\n value: boolean,\n|}>;\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n // Props\n disabled?: WithDefault,\n enabled?: WithDefault,\n thumbColor?: ?ColorValue,\n trackColorForFalse?: ?ColorValue,\n trackColorForTrue?: ?ColorValue,\n value?: WithDefault,\n on?: WithDefault,\n thumbTintColor?: ?ColorValue,\n trackTintColor?: ?ColorValue,\n\n // Events\n onChange?: BubblingEventHandler,\n|}>;\n\ntype NativeType = HostComponent;\n\ninterface NativeCommands {\n +setNativeValue: (\n viewRef: React.ElementRef,\n value: boolean,\n ) => void;\n}\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['setNativeValue'],\n});\n\nexport default (codegenNativeComponent('AndroidSwitch', {\n interfaceOnly: true,\n}): NativeType);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {BubblingEventHandler, WithDefault} from '../../Types/CodegenTypes';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport * as React from 'react';\n\nimport codegenNativeComponent from '../../Utilities/codegenNativeComponent';\nimport codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\n\ntype SwitchChangeEvent = $ReadOnly<{|\n value: boolean,\n|}>;\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n\n // Props\n disabled?: WithDefault,\n value?: WithDefault,\n tintColor?: ?ColorValue,\n onTintColor?: ?ColorValue,\n thumbTintColor?: ?ColorValue,\n\n // Deprecated props\n thumbColor?: ?ColorValue,\n trackColorForFalse?: ?ColorValue,\n trackColorForTrue?: ?ColorValue,\n\n // Events\n onChange?: ?BubblingEventHandler,\n|}>;\n\ntype ComponentType = HostComponent;\n\ninterface NativeCommands {\n +setValue: (viewRef: React.ElementRef, value: boolean) => void;\n}\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['setValue'],\n});\n\nexport default (codegenNativeComponent('Switch', {\n paperComponentName: 'RCTSwitch',\n excludedPlatforms: ['android'],\n}): ComponentType);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport * as React from 'react';\n\nimport DeprecatedTextInputPropTypes from '../../DeprecatedPropTypes/DeprecatedTextInputPropTypes';\n\nimport Platform from '../../Utilities/Platform';\nimport StyleSheet, {\n type TextStyleProp,\n type ViewStyleProp,\n type ColorValue,\n} from '../../StyleSheet/StyleSheet';\nimport Text from '../../Text/Text';\nimport TextAncestor from '../../Text/TextAncestor';\nimport TextInputState from './TextInputState';\nimport invariant from 'invariant';\nimport nullthrows from 'nullthrows';\nimport setAndForwardRef from '../../Utilities/setAndForwardRef';\n\nimport usePressability from '../../Pressability/usePressability';\n\nimport type {ViewProps} from '../View/ViewPropTypes';\nimport type {\n SyntheticEvent,\n ScrollEvent,\n PressEvent,\n} from '../../Types/CoreEventTypes';\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport type {TextInputNativeCommands} from './TextInputNativeCommands';\n\nconst {useLayoutEffect, useRef, useState} = React;\n\ntype ReactRefSetter = {current: null | T, ...} | ((ref: null | T) => mixed);\n\nlet AndroidTextInput;\nlet AndroidTextInputCommands;\nlet RCTSinglelineTextInputView;\nlet RCTSinglelineTextInputNativeCommands;\nlet RCTMultilineTextInputView;\nlet RCTMultilineTextInputNativeCommands;\n\nif (Platform.OS === 'android') {\n AndroidTextInput = require('./AndroidTextInputNativeComponent').default;\n AndroidTextInputCommands = require('./AndroidTextInputNativeComponent')\n .Commands;\n} else if (Platform.OS === 'ios') {\n RCTSinglelineTextInputView = require('./RCTSingelineTextInputNativeComponent')\n .default;\n RCTSinglelineTextInputNativeCommands = require('./RCTSingelineTextInputNativeComponent')\n .Commands;\n RCTMultilineTextInputView = require('./RCTMultilineTextInputNativeComponent')\n .default;\n RCTMultilineTextInputNativeCommands = require('./RCTMultilineTextInputNativeComponent')\n .Commands;\n}\n\nexport type ChangeEvent = SyntheticEvent<\n $ReadOnly<{|\n eventCount: number,\n target: number,\n text: string,\n |}>,\n>;\n\nexport type TextInputEvent = SyntheticEvent<\n $ReadOnly<{|\n eventCount: number,\n previousText: string,\n range: $ReadOnly<{|\n start: number,\n end: number,\n |}>,\n target: number,\n text: string,\n |}>,\n>;\n\nexport type ContentSizeChangeEvent = SyntheticEvent<\n $ReadOnly<{|\n target: number,\n contentSize: $ReadOnly<{|\n width: number,\n height: number,\n |}>,\n |}>,\n>;\n\ntype TargetEvent = SyntheticEvent<\n $ReadOnly<{|\n target: number,\n |}>,\n>;\n\nexport type BlurEvent = TargetEvent;\nexport type FocusEvent = TargetEvent;\n\ntype Selection = $ReadOnly<{|\n start: number,\n end: number,\n|}>;\n\nexport type SelectionChangeEvent = SyntheticEvent<\n $ReadOnly<{|\n selection: Selection,\n target: number,\n |}>,\n>;\n\nexport type KeyPressEvent = SyntheticEvent<\n $ReadOnly<{|\n key: string,\n target?: ?number,\n eventCount?: ?number,\n |}>,\n>;\n\nexport type EditingEvent = SyntheticEvent<\n $ReadOnly<{|\n eventCount: number,\n text: string,\n target: number,\n |}>,\n>;\n\ntype DataDetectorTypesType =\n | 'phoneNumber'\n | 'link'\n | 'address'\n | 'calendarEvent'\n | 'none'\n | 'all';\n\nexport type KeyboardType =\n // Cross Platform\n | 'default'\n | 'email-address'\n | 'numeric'\n | 'phone-pad'\n | 'number-pad'\n | 'decimal-pad'\n | 'url'\n // iOS-only\n | 'ascii-capable'\n | 'numbers-and-punctuation'\n | 'name-phone-pad'\n | 'twitter'\n | 'web-search'\n // iOS 10+ only\n | 'ascii-capable-number-pad'\n // Android-only\n | 'visible-password';\n\nexport type ReturnKeyType =\n // Cross Platform\n | 'done'\n | 'go'\n | 'next'\n | 'search'\n | 'send'\n // Android-only\n | 'none'\n | 'previous'\n // iOS-only\n | 'default'\n | 'emergency-call'\n | 'google'\n | 'join'\n | 'route'\n | 'yahoo';\n\nexport type AutoCapitalize = 'none' | 'sentences' | 'words' | 'characters';\n\nexport type TextContentType =\n | 'none'\n | 'URL'\n | 'addressCity'\n | 'addressCityAndState'\n | 'addressState'\n | 'countryName'\n | 'creditCardNumber'\n | 'emailAddress'\n | 'familyName'\n | 'fullStreetAddress'\n | 'givenName'\n | 'jobTitle'\n | 'location'\n | 'middleName'\n | 'name'\n | 'namePrefix'\n | 'nameSuffix'\n | 'nickname'\n | 'organizationName'\n | 'postalCode'\n | 'streetAddressLine1'\n | 'streetAddressLine2'\n | 'sublocality'\n | 'telephoneNumber'\n | 'username'\n | 'password'\n | 'newPassword'\n | 'oneTimeCode';\n\ntype PasswordRules = string;\n\ntype IOSProps = $ReadOnly<{|\n /**\n * When the clear button should appear on the right side of the text view.\n * This property is supported only for single-line TextInput component.\n * @platform ios\n */\n clearButtonMode?: ?('never' | 'while-editing' | 'unless-editing' | 'always'),\n\n /**\n * If `true`, clears the text field automatically when editing begins.\n * @platform ios\n */\n clearTextOnFocus?: ?boolean,\n\n /**\n * Determines the types of data converted to clickable URLs in the text input.\n * Only valid if `multiline={true}` and `editable={false}`.\n * By default no data types are detected.\n *\n * You can provide one type or an array of many types.\n *\n * Possible values for `dataDetectorTypes` are:\n *\n * - `'phoneNumber'`\n * - `'link'`\n * - `'address'`\n * - `'calendarEvent'`\n * - `'none'`\n * - `'all'`\n *\n * @platform ios\n */\n dataDetectorTypes?:\n | ?DataDetectorTypesType\n | $ReadOnlyArray,\n\n /**\n * If `true`, the keyboard disables the return key when there is no text and\n * automatically enables it when there is text. The default value is `false`.\n * @platform ios\n */\n enablesReturnKeyAutomatically?: ?boolean,\n\n /**\n * An optional identifier which links a custom InputAccessoryView to\n * this text input. The InputAccessoryView is rendered above the\n * keyboard when this text input is focused.\n * @platform ios\n */\n inputAccessoryViewID?: ?string,\n\n /**\n * Determines the color of the keyboard.\n * @platform ios\n */\n keyboardAppearance?: ?('default' | 'light' | 'dark'),\n\n /**\n * Provide rules for your password.\n * For example, say you want to require a password with at least eight characters consisting of a mix of uppercase and lowercase letters, at least one number, and at most two consecutive characters.\n * \"required: upper; required: lower; required: digit; max-consecutive: 2; minlength: 8;\"\n * @platform ios\n */\n passwordRules?: ?PasswordRules,\n\n /*\n * If `true`, allows TextInput to pass touch events to the parent component.\n * This allows components to be swipeable from the TextInput on iOS,\n * as is the case on Android by default.\n * If `false`, TextInput always asks to handle the input (except when disabled).\n * @platform ios\n */\n rejectResponderTermination?: ?boolean,\n\n /**\n * If `false`, scrolling of the text view will be disabled.\n * The default value is `true`. Does only work with 'multiline={true}'.\n * @platform ios\n */\n scrollEnabled?: ?boolean,\n\n /**\n * If `false`, disables spell-check style (i.e. red underlines).\n * The default value is inherited from `autoCorrect`.\n * @platform ios\n */\n spellCheck?: ?boolean,\n\n /**\n * Give the keyboard and the system information about the\n * expected semantic meaning for the content that users enter.\n * @platform ios\n */\n textContentType?: ?TextContentType,\n|}>;\n\ntype AndroidProps = $ReadOnly<{|\n /**\n * Determines which content to suggest on auto complete, e.g.`username`.\n * To disable auto complete, use `off`.\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `username`\n * - `password`\n * - `email`\n * - `name`\n * - `tel`\n * - `street-address`\n * - `postal-code`\n * - `cc-number`\n * - `cc-csc`\n * - `cc-exp`\n * - `cc-exp-month`\n * - `cc-exp-year`\n * - `off`\n *\n * @platform android\n */\n autoComplete?: ?(\n | 'birthdate-day'\n | 'birthdate-full'\n | 'birthdate-month'\n | 'birthdate-year'\n | 'cc-csc'\n | 'cc-exp'\n | 'cc-exp-day'\n | 'cc-exp-month'\n | 'cc-exp-year'\n | 'cc-number'\n | 'email'\n | 'gender'\n | 'name'\n | 'name-family'\n | 'name-given'\n | 'name-middle'\n | 'name-middle-initial'\n | 'name-prefix'\n | 'name-suffix'\n | 'password'\n | 'password-new'\n | 'postal-address'\n | 'postal-address-country'\n | 'postal-address-extended'\n | 'postal-address-extended-postal-code'\n | 'postal-address-locality'\n | 'postal-address-region'\n | 'postal-code'\n | 'street-address'\n | 'sms-otp'\n | 'tel'\n | 'tel-country-code'\n | 'tel-national'\n | 'tel-device'\n | 'username'\n | 'username-new'\n | 'off'\n ),\n\n /**\n * When `false`, if there is a small amount of space available around a text input\n * (e.g. landscape orientation on a phone), the OS may choose to have the user edit\n * the text inside of a full screen text input mode. When `true`, this feature is\n * disabled and users will always edit the text directly inside of the text input.\n * Defaults to `false`.\n * @platform android\n */\n disableFullscreenUI?: ?boolean,\n\n importantForAutofill?: ?(\n | 'auto'\n | 'no'\n | 'noExcludeDescendants'\n | 'yes'\n | 'yesExcludeDescendants'\n ),\n\n /**\n * If defined, the provided image resource will be rendered on the left.\n * The image resource must be inside `/android/app/src/main/res/drawable` and referenced\n * like\n * ```\n * \n * ```\n * @platform android\n */\n inlineImageLeft?: ?string,\n\n /**\n * Padding between the inline image, if any, and the text input itself.\n * @platform android\n */\n inlineImagePadding?: ?number,\n\n /**\n * Sets the number of lines for a `TextInput`. Use it with multiline set to\n * `true` to be able to fill the lines.\n * @platform android\n */\n numberOfLines?: ?number,\n\n /**\n * Sets the return key to the label. Use it instead of `returnKeyType`.\n * @platform android\n */\n returnKeyLabel?: ?string,\n\n /**\n * When `false`, it will prevent the soft keyboard from showing when the field is focused.\n * Defaults to `true`.\n */\n showSoftInputOnFocus?: ?boolean,\n\n /**\n * Set text break strategy on Android API Level 23+, possible values are `simple`, `highQuality`, `balanced`\n * The default value is `simple`.\n * @platform android\n */\n textBreakStrategy?: ?('simple' | 'highQuality' | 'balanced'),\n\n /**\n * The color of the `TextInput` underline.\n * @platform android\n */\n underlineColorAndroid?: ?ColorValue,\n|}>;\n\nexport type Props = $ReadOnly<{|\n ...$Diff>,\n ...IOSProps,\n ...AndroidProps,\n\n /**\n * Can tell `TextInput` to automatically capitalize certain characters.\n *\n * - `characters`: all characters.\n * - `words`: first letter of each word.\n * - `sentences`: first letter of each sentence (*default*).\n * - `none`: don't auto capitalize anything.\n */\n autoCapitalize?: ?AutoCapitalize,\n\n /**\n * If `false`, disables auto-correct. The default value is `true`.\n */\n autoCorrect?: ?boolean,\n\n /**\n * If `true`, focuses the input on `componentDidMount`.\n * The default value is `false`.\n */\n autoFocus?: ?boolean,\n\n /**\n * Specifies whether fonts should scale to respect Text Size accessibility settings. The\n * default is `true`.\n */\n allowFontScaling?: ?boolean,\n\n /**\n * If `true`, the text field will blur when submitted.\n * The default value is true for single-line fields and false for\n * multiline fields. Note that for multiline fields, setting `blurOnSubmit`\n * to `true` means that pressing return will blur the field and trigger the\n * `onSubmitEditing` event instead of inserting a newline into the field.\n */\n blurOnSubmit?: ?boolean,\n\n /**\n * If `true`, caret is hidden. The default value is `false`.\n *\n * On Android devices manufactured by Xiaomi with Android Q,\n * when keyboardType equals 'email-address'this will be set\n * in native to 'true' to prevent a system related crash. This\n * will cause cursor to be diabled as a side-effect.\n *\n */\n caretHidden?: ?boolean,\n\n /*\n * If `true`, contextMenuHidden is hidden. The default value is `false`.\n */\n contextMenuHidden?: ?boolean,\n\n /**\n * Provides an initial value that will change when the user starts typing.\n * Useful for simple use-cases where you do not want to deal with listening\n * to events and updating the value prop to keep the controlled state in sync.\n */\n defaultValue?: ?Stringish,\n\n /**\n * If `false`, text is not editable. The default value is `true`.\n */\n editable?: ?boolean,\n\n forwardedRef?: ?ReactRefSetter<\n React.ElementRef> & ImperativeMethods,\n >,\n\n /**\n * Determines which keyboard to open, e.g.`numeric`.\n *\n * The following values work across platforms:\n *\n * - `default`\n * - `numeric`\n * - `number-pad`\n * - `decimal-pad`\n * - `email-address`\n * - `phone-pad`\n * - `url`\n *\n * *iOS Only*\n *\n * The following values work on iOS only:\n *\n * - `ascii-capable`\n * - `numbers-and-punctuation`\n * - `name-phone-pad`\n * - `twitter`\n * - `web-search`\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `visible-password`\n *\n */\n keyboardType?: ?KeyboardType,\n\n /**\n * Specifies largest possible scale a font can reach when `allowFontScaling` is enabled.\n * Possible values:\n * `null/undefined` (default): inherit from the parent node or the global default (0)\n * `0`: no max, ignore parent/global default\n * `>= 1`: sets the maxFontSizeMultiplier of this node to this value\n */\n maxFontSizeMultiplier?: ?number,\n\n /**\n * Limits the maximum number of characters that can be entered. Use this\n * instead of implementing the logic in JS to avoid flicker.\n */\n maxLength?: ?number,\n\n /**\n * If `true`, the text input can be multiple lines.\n * The default value is `false`.\n */\n multiline?: ?boolean,\n\n /**\n * Callback that is called when the text input is blurred.\n */\n onBlur?: ?(e: BlurEvent) => mixed,\n\n /**\n * Callback that is called when the text input's text changes.\n */\n onChange?: ?(e: ChangeEvent) => mixed,\n\n /**\n * Callback that is called when the text input's text changes.\n * Changed text is passed as an argument to the callback handler.\n */\n onChangeText?: ?(text: string) => mixed,\n\n /**\n * Callback that is called when the text input's content size changes.\n * This will be called with\n * `{ nativeEvent: { contentSize: { width, height } } }`.\n *\n * Only called for multiline text inputs.\n */\n onContentSizeChange?: ?(e: ContentSizeChangeEvent) => mixed,\n\n /**\n * Callback that is called when text input ends.\n */\n onEndEditing?: ?(e: EditingEvent) => mixed,\n\n /**\n * Callback that is called when the text input is focused.\n */\n onFocus?: ?(e: FocusEvent) => mixed,\n\n /**\n * Callback that is called when a key is pressed.\n * This will be called with `{ nativeEvent: { key: keyValue } }`\n * where `keyValue` is `'Enter'` or `'Backspace'` for respective keys and\n * the typed-in character otherwise including `' '` for space.\n * Fires before `onChange` callbacks.\n */\n onKeyPress?: ?(e: KeyPressEvent) => mixed,\n\n /**\n * Called when a touch is engaged.\n */\n onPressIn?: ?(event: PressEvent) => mixed,\n\n /**\n * Called when a touch is released.\n */\n onPressOut?: ?(event: PressEvent) => mixed,\n\n /**\n * Callback that is called when the text input selection is changed.\n * This will be called with\n * `{ nativeEvent: { selection: { start, end } } }`.\n */\n onSelectionChange?: ?(e: SelectionChangeEvent) => mixed,\n\n /**\n * Callback that is called when the text input's submit button is pressed.\n * Invalid if `multiline={true}` is specified.\n */\n onSubmitEditing?: ?(e: EditingEvent) => mixed,\n\n /**\n * Invoked on content scroll with `{ nativeEvent: { contentOffset: { x, y } } }`.\n * May also contain other properties from ScrollEvent but on Android contentSize\n * is not provided for performance reasons.\n */\n onScroll?: ?(e: ScrollEvent) => mixed,\n\n /**\n * The string that will be rendered before text input has been entered.\n */\n placeholder?: ?Stringish,\n\n /**\n * The text color of the placeholder string.\n */\n placeholderTextColor?: ?ColorValue,\n\n /**\n * Determines how the return key should look. On Android you can also use\n * `returnKeyLabel`.\n *\n * *Cross platform*\n *\n * The following values work across platforms:\n *\n * - `done`\n * - `go`\n * - `next`\n * - `search`\n * - `send`\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `none`\n * - `previous`\n *\n * *iOS Only*\n *\n * The following values work on iOS only:\n *\n * - `default`\n * - `emergency-call`\n * - `google`\n * - `join`\n * - `route`\n * - `yahoo`\n */\n returnKeyType?: ?ReturnKeyType,\n\n /**\n * If `true`, the text input obscures the text entered so that sensitive text\n * like passwords stay secure. The default value is `false`. Does not work with 'multiline={true}'.\n */\n secureTextEntry?: ?boolean,\n\n /**\n * The start and end of the text input's selection. Set start and end to\n * the same value to position the cursor.\n */\n selection?: ?$ReadOnly<{|\n start: number,\n end?: ?number,\n |}>,\n\n /**\n * The highlight and cursor color of the text input.\n */\n selectionColor?: ?ColorValue,\n\n /**\n * If `true`, all text will automatically be selected on focus.\n */\n selectTextOnFocus?: ?boolean,\n\n /**\n * Note that not all Text styles are supported, an incomplete list of what is not supported includes:\n *\n * - `borderLeftWidth`\n * - `borderTopWidth`\n * - `borderRightWidth`\n * - `borderBottomWidth`\n * - `borderTopLeftRadius`\n * - `borderTopRightRadius`\n * - `borderBottomRightRadius`\n * - `borderBottomLeftRadius`\n *\n * see [Issue#7070](https://github.com/facebook/react-native/issues/7070)\n * for more detail.\n *\n * [Styles](docs/style.html)\n */\n style?: ?TextStyleProp,\n\n /**\n * The value to show for the text input. `TextInput` is a controlled\n * component, which means the native value will be forced to match this\n * value prop if provided. For most uses, this works great, but in some\n * cases this may cause flickering - one common cause is preventing edits\n * by keeping value the same. In addition to simply setting the same value,\n * either set `editable={false}`, or set/update `maxLength` to prevent\n * unwanted edits without flicker.\n */\n value?: ?Stringish,\n|}>;\n\ntype ImperativeMethods = $ReadOnly<{|\n clear: () => void,\n isFocused: () => boolean,\n getNativeRef: () => ?React.ElementRef>,\n|}>;\n\nconst emptyFunctionThatReturnsTrue = () => true;\n\n/**\n * A foundational component for inputting text into the app via a\n * keyboard. Props provide configurability for several features, such as\n * auto-correction, auto-capitalization, placeholder text, and different keyboard\n * types, such as a numeric keypad.\n *\n * The simplest use case is to plop down a `TextInput` and subscribe to the\n * `onChangeText` events to read the user input. There are also other events,\n * such as `onSubmitEditing` and `onFocus` that can be subscribed to. A simple\n * example:\n *\n * ```ReactNativeWebPlayer\n * import React, { Component } from 'react';\n * import { AppRegistry, TextInput } from 'react-native';\n *\n * export default class UselessTextInput extends Component {\n * constructor(props) {\n * super(props);\n * this.state = { text: 'Useless Placeholder' };\n * }\n *\n * render() {\n * return (\n * this.setState({text})}\n * value={this.state.text}\n * />\n * );\n * }\n * }\n *\n * // skip this line if using Create React Native App\n * AppRegistry.registerComponent('AwesomeProject', () => UselessTextInput);\n * ```\n *\n * Two methods exposed via the native element are .focus() and .blur() that\n * will focus or blur the TextInput programmatically.\n *\n * Note that some props are only available with `multiline={true/false}`.\n * Additionally, border styles that apply to only one side of the element\n * (e.g., `borderBottomColor`, `borderLeftWidth`, etc.) will not be applied if\n * `multiline=false`. To achieve the same effect, you can wrap your `TextInput`\n * in a `View`:\n *\n * ```ReactNativeWebPlayer\n * import React, { Component } from 'react';\n * import { AppRegistry, View, TextInput } from 'react-native';\n *\n * class UselessTextInput extends Component {\n * render() {\n * return (\n * \n * );\n * }\n * }\n *\n * export default class UselessTextInputMultiline extends Component {\n * constructor(props) {\n * super(props);\n * this.state = {\n * text: 'Useless Multiline Placeholder',\n * };\n * }\n *\n * // If you type something in the text box that is a color, the background will change to that\n * // color.\n * render() {\n * return (\n * \n * this.setState({text})}\n * value={this.state.text}\n * />\n * \n * );\n * }\n * }\n *\n * // skip these lines if using Create React Native App\n * AppRegistry.registerComponent(\n * 'AwesomeProject',\n * () => UselessTextInputMultiline\n * );\n * ```\n *\n * `TextInput` has by default a border at the bottom of its view. This border\n * has its padding set by the background image provided by the system, and it\n * cannot be changed. Solutions to avoid this is to either not set height\n * explicitly, case in which the system will take care of displaying the border\n * in the correct position, or to not display the border by setting\n * `underlineColorAndroid` to transparent.\n *\n * Note that on Android performing text selection in input can change\n * app's activity `windowSoftInputMode` param to `adjustResize`.\n * This may cause issues with components that have position: 'absolute'\n * while keyboard is active. To avoid this behavior either specify `windowSoftInputMode`\n * in AndroidManifest.xml ( https://developer.android.com/guide/topics/manifest/activity-element.html )\n * or control this param programmatically with native code.\n *\n */\nfunction InternalTextInput(props: Props): React.Node {\n const inputRef = useRef>>(null);\n\n // Android sends a \"onTextChanged\" event followed by a \"onSelectionChanged\" event, for\n // the same \"most recent event count\".\n // For controlled selection, that means that immediately after text is updated,\n // a controlled component will pass in the *previous* selection, even if the controlled\n // component didn't mean to modify the selection at all.\n // Therefore, we ignore selections and pass them through until the selection event has\n // been sent.\n // Note that this mitigation is NOT needed for Fabric.\n // discovered when upgrading react-hooks\n // eslint-disable-next-line react-hooks/exhaustive-deps\n let selection: ?Selection =\n props.selection == null\n ? null\n : {\n start: props.selection.start,\n end: props.selection.end ?? props.selection.start,\n };\n\n const [mostRecentEventCount, setMostRecentEventCount] = useState(0);\n\n const [lastNativeText, setLastNativeText] = useState(props.value);\n const [lastNativeSelectionState, setLastNativeSelection] = useState<{|\n selection: ?Selection,\n mostRecentEventCount: number,\n |}>({selection, mostRecentEventCount});\n\n const lastNativeSelection = lastNativeSelectionState.selection;\n const lastNativeSelectionEventCount =\n lastNativeSelectionState.mostRecentEventCount;\n\n if (lastNativeSelectionEventCount < mostRecentEventCount) {\n selection = null;\n }\n\n let viewCommands;\n if (AndroidTextInputCommands) {\n viewCommands = AndroidTextInputCommands;\n } else {\n viewCommands =\n props.multiline === true\n ? RCTMultilineTextInputNativeCommands\n : RCTSinglelineTextInputNativeCommands;\n }\n\n const text =\n typeof props.value === 'string'\n ? props.value\n : typeof props.defaultValue === 'string'\n ? props.defaultValue\n : '';\n\n // This is necessary in case native updates the text and JS decides\n // that the update should be ignored and we should stick with the value\n // that we have in JS.\n useLayoutEffect(() => {\n const nativeUpdate = {};\n\n if (lastNativeText !== props.value && typeof props.value === 'string') {\n nativeUpdate.text = props.value;\n setLastNativeText(props.value);\n }\n\n if (\n selection &&\n lastNativeSelection &&\n (lastNativeSelection.start !== selection.start ||\n lastNativeSelection.end !== selection.end)\n ) {\n nativeUpdate.selection = selection;\n setLastNativeSelection({selection, mostRecentEventCount});\n }\n\n if (Object.keys(nativeUpdate).length === 0) {\n return;\n }\n\n if (inputRef.current != null) {\n viewCommands.setTextAndSelection(\n inputRef.current,\n mostRecentEventCount,\n text,\n selection?.start ?? -1,\n selection?.end ?? -1,\n );\n }\n }, [\n mostRecentEventCount,\n inputRef,\n props.value,\n props.defaultValue,\n lastNativeText,\n selection,\n lastNativeSelection,\n text,\n viewCommands,\n ]);\n\n useLayoutEffect(() => {\n const inputRefValue = inputRef.current;\n\n if (inputRefValue != null) {\n TextInputState.registerInput(inputRefValue);\n\n return () => {\n TextInputState.unregisterInput(inputRefValue);\n\n if (TextInputState.currentlyFocusedInput() === inputRefValue) {\n nullthrows(inputRefValue).blur();\n }\n };\n }\n }, [inputRef]);\n\n function clear(): void {\n if (inputRef.current != null) {\n viewCommands.setTextAndSelection(\n inputRef.current,\n mostRecentEventCount,\n '',\n 0,\n 0,\n );\n }\n }\n\n // TODO: Fix this returning true on null === null, when no input is focused\n function isFocused(): boolean {\n return TextInputState.currentlyFocusedInput() === inputRef.current;\n }\n\n function getNativeRef(): ?React.ElementRef> {\n return inputRef.current;\n }\n\n const _setNativeRef = setAndForwardRef({\n getForwardedRef: () => props.forwardedRef,\n setLocalRef: ref => {\n inputRef.current = ref;\n\n /*\n Hi reader from the future. I'm sorry for this.\n\n This is a hack. Ideally we would forwardRef to the underlying\n host component. However, since TextInput has it's own methods that can be\n called as well, if we used the standard forwardRef then these\n methods wouldn't be accessible and thus be a breaking change.\n\n We have a couple of options of how to handle this:\n - Return a new ref with everything we methods from both. This is problematic\n because we need React to also know it is a host component which requires\n internals of the class implementation of the ref.\n - Break the API and have some other way to call one set of the methods or\n the other. This is our long term approach as we want to eventually\n get the methods on host components off the ref. So instead of calling\n ref.measure() you might call ReactNative.measure(ref). This would hopefully\n let the ref for TextInput then have the methods like `.clear`. Or we do it\n the other way and make it TextInput.clear(textInputRef) which would be fine\n too. Either way though is a breaking change that is longer term.\n - Mutate this ref. :( Gross, but accomplishes what we need in the meantime\n before we can get to the long term breaking change.\n */\n if (ref) {\n ref.clear = clear;\n ref.isFocused = isFocused;\n ref.getNativeRef = getNativeRef;\n }\n },\n });\n\n const _onChange = (event: ChangeEvent) => {\n const text = event.nativeEvent.text;\n props.onChange && props.onChange(event);\n props.onChangeText && props.onChangeText(text);\n\n if (inputRef.current == null) {\n // calling `props.onChange` or `props.onChangeText`\n // may clean up the input itself. Exits here.\n return;\n }\n\n setLastNativeText(text);\n // This must happen last, after we call setLastNativeText.\n // Different ordering can cause bugs when editing AndroidTextInputs\n // with multiple Fragments.\n // We must update this so that controlled input updates work.\n setMostRecentEventCount(event.nativeEvent.eventCount);\n };\n\n const _onSelectionChange = (event: SelectionChangeEvent) => {\n props.onSelectionChange && props.onSelectionChange(event);\n\n if (inputRef.current == null) {\n // calling `props.onSelectionChange`\n // may clean up the input itself. Exits here.\n return;\n }\n\n setLastNativeSelection({\n selection: event.nativeEvent.selection,\n mostRecentEventCount,\n });\n };\n\n const _onFocus = (event: FocusEvent) => {\n TextInputState.focusInput(inputRef.current);\n if (props.onFocus) {\n props.onFocus(event);\n }\n };\n\n const _onBlur = (event: BlurEvent) => {\n TextInputState.blurInput(inputRef.current);\n if (props.onBlur) {\n props.onBlur(event);\n }\n };\n\n const _onScroll = (event: ScrollEvent) => {\n props.onScroll && props.onScroll(event);\n };\n\n let textInput = null;\n\n // The default value for `blurOnSubmit` is true for single-line fields and\n // false for multi-line fields.\n const blurOnSubmit = props.blurOnSubmit ?? !props.multiline;\n\n const accessible = props.accessible !== false;\n const focusable = props.focusable !== false;\n\n const config = React.useMemo(\n () => ({\n onPress: (event: PressEvent) => {\n if (props.editable !== false) {\n if (inputRef.current != null) {\n inputRef.current.focus();\n }\n }\n },\n onPressIn: props.onPressIn,\n onPressOut: props.onPressOut,\n cancelable:\n Platform.OS === 'ios' ? !props.rejectResponderTermination : null,\n }),\n [\n props.editable,\n props.onPressIn,\n props.onPressOut,\n props.rejectResponderTermination,\n ],\n );\n\n // Hide caret during test runs due to a flashing caret\n // makes screenshot tests flakey\n let caretHidden = props.caretHidden;\n if (Platform.isTesting) {\n caretHidden = true;\n }\n\n // TextInput handles onBlur and onFocus events\n // so omitting onBlur and onFocus pressability handlers here.\n const {onBlur, onFocus, ...eventHandlers} = usePressability(config) || {};\n\n if (Platform.OS === 'ios') {\n const RCTTextInputView =\n props.multiline === true\n ? RCTMultilineTextInputView\n : RCTSinglelineTextInputView;\n\n const style =\n props.multiline === true\n ? [styles.multilineInput, props.style]\n : props.style;\n\n textInput = (\n \n );\n } else if (Platform.OS === 'android') {\n const style = [props.style];\n const autoCapitalize = props.autoCapitalize || 'sentences';\n const placeholder = props.placeholder ?? '';\n let children = props.children;\n const childCount = React.Children.count(children);\n invariant(\n !(props.value != null && childCount),\n 'Cannot specify both value and children.',\n );\n if (childCount > 1) {\n children = {children};\n }\n\n textInput = (\n /* $FlowFixMe[prop-missing] the types for AndroidTextInput don't match up\n * exactly with the props for TextInput. This will need to get fixed */\n /* $FlowFixMe[incompatible-type] the types for AndroidTextInput don't\n * match up exactly with the props for TextInput. This will need to get\n * fixed */\n /* $FlowFixMe[incompatible-type-arg] the types for AndroidTextInput don't\n * match up exactly with the props for TextInput. This will need to get\n * fixed */\n \n );\n }\n return (\n {textInput}\n );\n}\n\nconst ExportedForwardRef: React.AbstractComponent<\n React.ElementConfig,\n React.ElementRef> & ImperativeMethods,\n> = React.forwardRef(function TextInput(\n {\n allowFontScaling = true,\n rejectResponderTermination = true,\n underlineColorAndroid = 'transparent',\n ...restProps\n },\n forwardedRef: ReactRefSetter<\n React.ElementRef> & ImperativeMethods,\n >,\n) {\n return (\n \n );\n});\n\n// TODO: Deprecate this\nExportedForwardRef.propTypes = DeprecatedTextInputPropTypes;\n\n// $FlowFixMe[prop-missing]\nExportedForwardRef.State = {\n currentlyFocusedInput: TextInputState.currentlyFocusedInput,\n\n currentlyFocusedField: TextInputState.currentlyFocusedField,\n focusTextInput: TextInputState.focusTextInput,\n blurTextInput: TextInputState.blurTextInput,\n};\n\ntype TextInputComponentStatics = $ReadOnly<{|\n State: $ReadOnly<{|\n currentlyFocusedInput: typeof TextInputState.currentlyFocusedInput,\n currentlyFocusedField: typeof TextInputState.currentlyFocusedField,\n focusTextInput: typeof TextInputState.focusTextInput,\n blurTextInput: typeof TextInputState.blurTextInput,\n |}>,\n propTypes: typeof DeprecatedTextInputPropTypes,\n|}>;\n\nconst styles = StyleSheet.create({\n multilineInput: {\n // This default top inset makes RCTMultilineTextInputView seem as close as possible\n // to single-line RCTSinglelineTextInputView defaults, using the system defaults\n // of font size 17 and a height of 31 points.\n paddingTop: 5,\n },\n});\n\n// $FlowFixMe[unclear-type] Unclear type. Using `any` type is not safe.\nmodule.exports = ((ExportedForwardRef: any): React.AbstractComponent<\n React.ElementConfig,\n $ReadOnly<{|\n ...React.ElementRef>,\n ...ImperativeMethods,\n |}>,\n> &\n TextInputComponentStatics);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst DeprecatedColorPropType = require('./DeprecatedColorPropType');\nconst DeprecatedTextPropTypes = require('./DeprecatedTextPropTypes');\nconst DeprecatedViewPropTypes = require('./DeprecatedViewPropTypes');\nconst PropTypes = require('prop-types');\n\nconst DataDetectorTypes = [\n 'phoneNumber',\n 'link',\n 'address',\n 'calendarEvent',\n 'none',\n 'all',\n];\n\nmodule.exports = {\n ...DeprecatedViewPropTypes,\n /**\n * Can tell `TextInput` to automatically capitalize certain characters.\n *\n * - `characters`: all characters.\n * - `words`: first letter of each word.\n * - `sentences`: first letter of each sentence (*default*).\n * - `none`: don't auto capitalize anything.\n */\n autoCapitalize: (PropTypes.oneOf([\n 'none',\n 'sentences',\n 'words',\n 'characters',\n ]): React$PropType$Primitive<'none' | 'sentences' | 'words' | 'characters'>),\n /**\n * Determines which content to suggest on auto complete, e.g.`username`.\n * To disable auto complete, use `off`.\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `username`\n * - `password`\n * - `email`\n * - `name`\n * - `tel`\n * - `street-address`\n * - `postal-code`\n * - `cc-number`\n * - `cc-csc`\n * - `cc-exp`\n * - `cc-exp-month`\n * - `cc-exp-year`\n * - `off`\n *\n * @platform android\n */\n autoComplete: (PropTypes.oneOf([\n 'cc-csc',\n 'cc-exp',\n 'cc-exp-month',\n 'cc-exp-year',\n 'cc-number',\n 'email',\n 'name',\n 'password',\n 'postal-code',\n 'street-address',\n 'tel',\n 'username',\n 'off',\n ]): React$PropType$Primitive<\n | 'cc-csc'\n | 'cc-exp'\n | 'cc-exp-month'\n | 'cc-exp-year'\n | 'cc-number'\n | 'email'\n | 'name'\n | 'password'\n | 'postal-code'\n | 'street-address'\n | 'tel'\n | 'username'\n | 'off',\n >),\n /**\n * If `false`, disables auto-correct. The default value is `true`.\n */\n autoCorrect: PropTypes.bool,\n /**\n * If `false`, disables spell-check style (i.e. red underlines).\n * The default value is inherited from `autoCorrect`.\n * @platform ios\n */\n spellCheck: PropTypes.bool,\n /**\n * If `true`, focuses the input on `componentDidMount`.\n * The default value is `false`.\n */\n autoFocus: PropTypes.bool,\n /**\n * Specifies whether fonts should scale to respect Text Size accessibility settings. The\n * default is `true`.\n */\n allowFontScaling: PropTypes.bool,\n /**\n * Specifies largest possible scale a font can reach when `allowFontScaling` is enabled.\n * Possible values:\n * `null/undefined` (default): inherit from the parent node or the global default (0)\n * `0`: no max, ignore parent/global default\n * `>= 1`: sets the maxFontSizeMultiplier of this node to this value\n */\n maxFontSizeMultiplier: PropTypes.number,\n /**\n * If `false`, text is not editable. The default value is `true`.\n */\n editable: PropTypes.bool,\n /**\n * Determines which keyboard to open, e.g.`numeric`.\n *\n * The following values work across platforms:\n *\n * - `default`\n * - `numeric`\n * - `number-pad`\n * - `decimal-pad`\n * - `email-address`\n * - `phone-pad`\n * - `url`\n *\n * *iOS Only*\n *\n * The following values work on iOS only:\n *\n * - `ascii-capable`\n * - `numbers-and-punctuation`\n * - `name-phone-pad`\n * - `twitter`\n * - `web-search`\n * - `ascii-capable-number-pad`\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `visible-password`\n */\n keyboardType: (PropTypes.oneOf([\n // Cross-platform\n 'default',\n 'email-address',\n 'numeric',\n 'phone-pad',\n 'number-pad',\n 'url',\n // iOS-only\n 'ascii-capable',\n 'numbers-and-punctuation',\n 'name-phone-pad',\n 'decimal-pad',\n 'twitter',\n 'web-search',\n // iOS 10+ only\n 'ascii-capable-number-pad',\n // Android-only\n 'visible-password',\n ]): React$PropType$Primitive<\n | 'default'\n | 'email-address'\n | 'numeric'\n | 'phone-pad'\n | 'number-pad'\n | 'ascii-capable'\n | 'numbers-and-punctuation'\n | 'url'\n | 'name-phone-pad'\n | 'decimal-pad'\n | 'twitter'\n | 'web-search'\n | 'ascii-capable-number-pad'\n | 'visible-password',\n >),\n /**\n * Determines the color of the keyboard.\n * @platform ios\n */\n keyboardAppearance: (PropTypes.oneOf([\n 'default',\n 'light',\n 'dark',\n ]): React$PropType$Primitive<'default' | 'light' | 'dark'>),\n /**\n * Determines how the return key should look. On Android you can also use\n * `returnKeyLabel`.\n *\n * *Cross platform*\n *\n * The following values work across platforms:\n *\n * - `done`\n * - `go`\n * - `next`\n * - `search`\n * - `send`\n *\n * *Android Only*\n *\n * The following values work on Android only:\n *\n * - `none`\n * - `previous`\n *\n * *iOS Only*\n *\n * The following values work on iOS only:\n *\n * - `default`\n * - `emergency-call`\n * - `google`\n * - `join`\n * - `route`\n * - `yahoo`\n */\n returnKeyType: (PropTypes.oneOf([\n // Cross-platform\n 'done',\n 'go',\n 'next',\n 'search',\n 'send',\n // Android-only\n 'none',\n 'previous',\n // iOS-only\n 'default',\n 'emergency-call',\n 'google',\n 'join',\n 'route',\n 'yahoo',\n ]): React$PropType$Primitive<\n | 'done'\n | 'go'\n | 'next'\n | 'search'\n | 'send'\n | 'none'\n | 'previous'\n | 'default'\n | 'emergency-call'\n | 'google'\n | 'join'\n | 'route'\n | 'yahoo',\n >),\n /**\n * Sets the return key to the label. Use it instead of `returnKeyType`.\n * @platform android\n */\n returnKeyLabel: PropTypes.string,\n /**\n * Limits the maximum number of characters that can be entered. Use this\n * instead of implementing the logic in JS to avoid flicker.\n */\n maxLength: PropTypes.number,\n /**\n * Sets the number of lines for a `TextInput`. Use it with multiline set to\n * `true` to be able to fill the lines.\n * @platform android\n */\n numberOfLines: PropTypes.number,\n /**\n * When `false`, if there is a small amount of space available around a text input\n * (e.g. landscape orientation on a phone), the OS may choose to have the user edit\n * the text inside of a full screen text input mode. When `true`, this feature is\n * disabled and users will always edit the text directly inside of the text input.\n * Defaults to `false`.\n * @platform android\n */\n disableFullscreenUI: PropTypes.bool,\n /**\n * If `true`, the keyboard disables the return key when there is no text and\n * automatically enables it when there is text. The default value is `false`.\n * @platform ios\n */\n enablesReturnKeyAutomatically: PropTypes.bool,\n /**\n * If `true`, the text input can be multiple lines.\n * The default value is `false`.\n */\n multiline: PropTypes.bool,\n /**\n * Set text break strategy on Android API Level 23+, possible values are `simple`, `highQuality`, `balanced`\n * The default value is `simple`.\n * @platform android\n */\n textBreakStrategy: (PropTypes.oneOf([\n 'simple',\n 'highQuality',\n 'balanced',\n ]): React$PropType$Primitive<'simple' | 'highQuality' | 'balanced'>),\n /**\n * Callback that is called when the text input is blurred.\n */\n onBlur: PropTypes.func,\n /**\n * Callback that is called when the text input is focused.\n */\n onFocus: PropTypes.func,\n /**\n * Callback that is called when the text input's text changes.\n */\n onChange: PropTypes.func,\n /**\n * Callback that is called when the text input's text changes.\n * Changed text is passed as an argument to the callback handler.\n */\n onChangeText: PropTypes.func,\n /**\n * Callback that is called when the text input's content size changes.\n * This will be called with\n * `{ nativeEvent: { contentSize: { width, height } } }`.\n *\n * Only called for multiline text inputs.\n */\n onContentSizeChange: PropTypes.func,\n onTextInput: PropTypes.func,\n /**\n * Callback that is called when text input ends.\n */\n onEndEditing: PropTypes.func,\n /**\n * Callback that is called when the text input selection is changed.\n * This will be called with\n * `{ nativeEvent: { selection: { start, end } } }`.\n */\n onSelectionChange: PropTypes.func,\n /**\n * Callback that is called when the text input's submit button is pressed.\n * Invalid if `multiline={true}` is specified.\n */\n onSubmitEditing: PropTypes.func,\n /**\n * Callback that is called when a key is pressed.\n * This will be called with `{ nativeEvent: { key: keyValue } }`\n * where `keyValue` is `'Enter'` or `'Backspace'` for respective keys and\n * the typed-in character otherwise including `' '` for space.\n * Fires before `onChange` callbacks.\n */\n onKeyPress: PropTypes.func,\n /**\n * Invoked on mount and layout changes with `{x, y, width, height}`.\n */\n onLayout: PropTypes.func,\n /**\n * Invoked on content scroll with `{ nativeEvent: { contentOffset: { x, y } } }`.\n * May also contain other properties from ScrollEvent but on Android contentSize\n * is not provided for performance reasons.\n */\n onScroll: PropTypes.func,\n /**\n * The string that will be rendered before text input has been entered.\n */\n placeholder: PropTypes.string,\n /**\n * The text color of the placeholder string.\n */\n placeholderTextColor: DeprecatedColorPropType,\n /**\n * If `false`, scrolling of the text view will be disabled.\n * The default value is `true`. Does only work with 'multiline={true}'.\n * @platform ios\n */\n scrollEnabled: PropTypes.bool,\n /**\n * If `true`, the text input obscures the text entered so that sensitive text\n * like passwords stay secure. The default value is `false`. Does not work with 'multiline={true}'.\n */\n secureTextEntry: PropTypes.bool,\n /**\n * The highlight and cursor color of the text input.\n */\n selectionColor: DeprecatedColorPropType,\n /**\n * The start and end of the text input's selection. Set start and end to\n * the same value to position the cursor.\n */\n selection: (PropTypes.shape({\n start: PropTypes.number.isRequired,\n end: PropTypes.number,\n }): React$PropType$Primitive<{\n end?: number,\n start: number,\n ...\n }>),\n /**\n * The value to show for the text input. `TextInput` is a controlled\n * component, which means the native value will be forced to match this\n * value prop if provided. For most uses, this works great, but in some\n * cases this may cause flickering - one common cause is preventing edits\n * by keeping value the same. In addition to simply setting the same value,\n * either set `editable={false}`, or set/update `maxLength` to prevent\n * unwanted edits without flicker.\n */\n value: PropTypes.string,\n /**\n * Provides an initial value that will change when the user starts typing.\n * Useful for simple use-cases where you do not want to deal with listening\n * to events and updating the value prop to keep the controlled state in sync.\n */\n defaultValue: PropTypes.string,\n /**\n * When the clear button should appear on the right side of the text view.\n * This property is supported only for single-line TextInput component.\n * @platform ios\n */\n clearButtonMode: (PropTypes.oneOf([\n 'never',\n 'while-editing',\n 'unless-editing',\n 'always',\n ]): React$PropType$Primitive<\n 'never' | 'while-editing' | 'unless-editing' | 'always',\n >),\n /**\n * If `true`, clears the text field automatically when editing begins.\n * @platform ios\n */\n clearTextOnFocus: PropTypes.bool,\n /**\n * If `true`, all text will automatically be selected on focus.\n */\n selectTextOnFocus: PropTypes.bool,\n /**\n * If `true`, the text field will blur when submitted.\n * The default value is true for single-line fields and false for\n * multiline fields. Note that for multiline fields, setting `blurOnSubmit`\n * to `true` means that pressing return will blur the field and trigger the\n * `onSubmitEditing` event instead of inserting a newline into the field.\n */\n blurOnSubmit: PropTypes.bool,\n /**\n * Note that not all Text styles are supported, an incomplete list of what is not supported includes:\n *\n * - `borderLeftWidth`\n * - `borderTopWidth`\n * - `borderRightWidth`\n * - `borderBottomWidth`\n * - `borderTopLeftRadius`\n * - `borderTopRightRadius`\n * - `borderBottomRightRadius`\n * - `borderBottomLeftRadius`\n *\n * see [Issue#7070](https://github.com/facebook/react-native/issues/7070)\n * for more detail.\n *\n * [Styles](docs/style.html)\n */\n // $FlowFixMe[incompatible-use]\n style: DeprecatedTextPropTypes.style,\n /**\n * The color of the `TextInput` underline.\n * @platform android\n */\n underlineColorAndroid: DeprecatedColorPropType,\n\n /**\n * If defined, the provided image resource will be rendered on the left.\n * The image resource must be inside `/android/app/src/main/res/drawable` and referenced\n * like\n * ```\n * \n * ```\n * @platform android\n */\n inlineImageLeft: PropTypes.string,\n\n /**\n * Padding between the inline image, if any, and the text input itself.\n * @platform android\n */\n inlineImagePadding: PropTypes.number,\n\n /**\n * If `true`, allows TextInput to pass touch events to the parent component.\n * This allows components such as SwipeableListView to be swipeable from the TextInput on iOS,\n * as is the case on Android by default.\n * If `false`, TextInput always asks to handle the input (except when disabled).\n * @platform ios\n */\n rejectResponderTermination: PropTypes.bool,\n\n /**\n * Determines the types of data converted to clickable URLs in the text input.\n * Only valid if `multiline={true}` and `editable={false}`.\n * By default no data types are detected.\n *\n * You can provide one type or an array of many types.\n *\n * Possible values for `dataDetectorTypes` are:\n *\n * - `'phoneNumber'`\n * - `'link'`\n * - `'address'`\n * - `'calendarEvent'`\n * - `'none'`\n * - `'all'`\n *\n * @platform ios\n */\n dataDetectorTypes: (PropTypes.oneOfType([\n PropTypes.oneOf(DataDetectorTypes),\n PropTypes.arrayOf(PropTypes.oneOf(DataDetectorTypes)),\n ]): React$PropType$Primitive<\n | 'phoneNumber'\n | 'link'\n | 'address'\n | 'calendarEvent'\n | 'none'\n | 'all'\n | Array<\n 'phoneNumber' | 'link' | 'address' | 'calendarEvent' | 'none' | 'all',\n >,\n >),\n /**\n * If `true`, caret is hidden. The default value is `false`.\n * This property is supported only for single-line TextInput component on iOS.\n */\n caretHidden: PropTypes.bool,\n /*\n * If `true`, contextMenuHidden is hidden. The default value is `false`.\n */\n contextMenuHidden: PropTypes.bool,\n /**\n * An optional identifier which links a custom InputAccessoryView to\n * this text input. The InputAccessoryView is rendered above the\n * keyboard when this text input is focused.\n * @platform ios\n */\n inputAccessoryViewID: PropTypes.string,\n /**\n * Give the keyboard and the system information about the\n * expected semantic meaning for the content that users enter.\n * @platform ios\n */\n textContentType: (PropTypes.oneOf([\n 'none',\n 'URL',\n 'addressCity',\n 'addressCityAndState',\n 'addressState',\n 'countryName',\n 'creditCardNumber',\n 'emailAddress',\n 'familyName',\n 'fullStreetAddress',\n 'givenName',\n 'jobTitle',\n 'location',\n 'middleName',\n 'name',\n 'namePrefix',\n 'nameSuffix',\n 'nickname',\n 'organizationName',\n 'postalCode',\n 'streetAddressLine1',\n 'streetAddressLine2',\n 'sublocality',\n 'telephoneNumber',\n 'username',\n 'password',\n 'newPassword',\n 'oneTimeCode',\n ]): React$PropType$Primitive<\n | 'none'\n | 'URL'\n | 'addressCity'\n | 'addressCityAndState'\n | 'addressState'\n | 'countryName'\n | 'creditCardNumber'\n | 'emailAddress'\n | 'familyName'\n | 'fullStreetAddress'\n | 'givenName'\n | 'jobTitle'\n | 'location'\n | 'middleName'\n | 'name'\n | 'namePrefix'\n | 'nameSuffix'\n | 'nickname'\n | 'organizationName'\n | 'postalCode'\n | 'streetAddressLine1'\n | 'streetAddressLine2'\n | 'sublocality'\n | 'telephoneNumber'\n | 'username'\n | 'password'\n | 'newPassword'\n | 'oneTimeCode',\n >),\n /**\n * When `false`, it will prevent the soft keyboard from showing when the field is focused.\n * Defaults to `true`.\n */\n showSoftInputOnFocus: PropTypes.bool,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nconst DeprecatedEdgeInsetsPropType = require('./DeprecatedEdgeInsetsPropType');\nconst DeprecatedStyleSheetPropType = require('./DeprecatedStyleSheetPropType');\nconst DeprecatedViewStylePropTypes = require('./DeprecatedViewStylePropTypes');\nconst PropTypes = require('prop-types');\n\nconst {DeprecatedAccessibilityRoles} = require('./DeprecatedViewAccessibility');\n\nconst stylePropType: ReactPropsCheckType = DeprecatedStyleSheetPropType(\n DeprecatedViewStylePropTypes,\n);\n\nmodule.exports = {\n /**\n * When `true`, indicates that the view is an accessibility element.\n * By default, all the touchable elements are accessible.\n *\n * See https://reactnative.dev/docs/view.html#accessible\n */\n accessible: PropTypes.bool,\n\n /**\n * Overrides the text that's read by the screen reader when the user interacts\n * with the element. By default, the label is constructed by traversing all\n * the children and accumulating all the `Text` nodes separated by space.\n *\n * See https://reactnative.dev/docs/view.html#accessibilitylabel\n */\n accessibilityLabel: PropTypes.node,\n\n /**\n * An accessibility hint helps users understand what will happen when they perform\n * an action on the accessibility element when that result is not obvious from the\n * accessibility label.\n *\n *\n * See https://reactnative.dev/docs/view.html#accessibilityHint\n */\n accessibilityHint: PropTypes.string,\n\n /**\n * Provides an array of custom actions available for accessibility.\n *\n * @platform ios\n */\n accessibilityActions: (PropTypes.arrayOf(\n PropTypes.string,\n ): React$PropType$Primitive>),\n\n /**\n * Prevents view from being inverted if set to true and color inversion is turned on.\n *\n * @platform ios\n */\n accessibilityIgnoresInvertColors: PropTypes.bool,\n\n /**\n * Indicates to accessibility services to treat UI component like a specific role.\n */\n accessibilityRole: (PropTypes.oneOf(\n DeprecatedAccessibilityRoles,\n ): React$PropType$Primitive<\n | 'none'\n | 'button'\n | 'link'\n | 'search'\n | 'image'\n | 'keyboardkey'\n | 'text'\n | 'adjustable'\n | 'imagebutton'\n | 'header'\n | 'summary'\n | 'alert'\n | 'checkbox'\n | 'combobox'\n | 'menu'\n | 'menubar'\n | 'menuitem'\n | 'progressbar'\n | 'radio'\n | 'radiogroup'\n | 'scrollbar'\n | 'spinbutton'\n | 'switch'\n | 'tab'\n | 'tablist'\n | 'timer'\n | 'toolbar',\n >),\n\n accessibilityState: PropTypes.object,\n accessibilityValue: PropTypes.object,\n /**\n * Indicates to accessibility services whether the user should be notified\n * when this view changes. Works for Android API >= 19 only.\n *\n * @platform android\n *\n * See https://reactnative.dev/docs/view.html#accessibilityliveregion\n */\n accessibilityLiveRegion: (PropTypes.oneOf([\n 'none',\n 'polite',\n 'assertive',\n ]): React$PropType$Primitive<'none' | 'polite' | 'assertive'>),\n\n /**\n * Controls how view is important for accessibility which is if it\n * fires accessibility events and if it is reported to accessibility services\n * that query the screen. Works for Android only.\n *\n * @platform android\n *\n * See https://reactnative.dev/docs/view.html#importantforaccessibility\n */\n importantForAccessibility: (PropTypes.oneOf([\n 'auto',\n 'yes',\n 'no',\n 'no-hide-descendants',\n ]): React$PropType$Primitive<'auto' | 'yes' | 'no' | 'no-hide-descendants'>),\n\n /**\n * A value indicating whether VoiceOver should ignore the elements\n * within views that are siblings of the receiver.\n * Default is `false`.\n *\n * @platform ios\n *\n * See https://reactnative.dev/docs/view.html#accessibilityviewismodal\n */\n accessibilityViewIsModal: PropTypes.bool,\n\n /**\n * A value indicating whether the accessibility elements contained within\n * this accessibility element are hidden.\n *\n * @platform ios\n *\n * See https://reactnative.dev/docs/view.html#accessibilityElementsHidden\n */\n accessibilityElementsHidden: PropTypes.bool,\n\n /**\n * When `accessible` is true, the system will try to invoke this function\n * when the user performs an accessibility custom action.\n *\n * @platform ios\n */\n onAccessibilityAction: PropTypes.func,\n\n /**\n * When `accessible` is true, the system will try to invoke this function\n * when the user performs accessibility tap gesture.\n *\n * See https://reactnative.dev/docs/view.html#onaccessibilitytap\n */\n onAccessibilityTap: PropTypes.func,\n\n /**\n * When `accessible` is `true`, the system will invoke this function when the\n * user performs the magic tap gesture.\n *\n * See https://reactnative.dev/docs/view.html#onmagictap\n */\n onMagicTap: PropTypes.func,\n\n /**\n * Used to locate this view in end-to-end tests.\n *\n * > This disables the 'layout-only view removal' optimization for this view!\n *\n * See https://reactnative.dev/docs/view.html#testid\n */\n testID: PropTypes.string,\n\n /**\n * Used to locate this view from native classes.\n *\n * > This disables the 'layout-only view removal' optimization for this view!\n *\n * See https://reactnative.dev/docs/view.html#nativeid\n */\n nativeID: PropTypes.string,\n\n /**\n * For most touch interactions, you'll simply want to wrap your component in\n * `TouchableHighlight` or `TouchableOpacity`. Check out `Touchable.js`,\n * `ScrollResponder.js` and `ResponderEventPlugin.js` for more discussion.\n */\n\n /**\n * The View is now responding for touch events. This is the time to highlight\n * and show the user what is happening.\n *\n * `View.props.onResponderGrant: (event) => {}`, where `event` is a synthetic\n * touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onrespondergrant\n */\n onResponderGrant: PropTypes.func,\n\n /**\n * The user is moving their finger.\n *\n * `View.props.onResponderMove: (event) => {}`, where `event` is a synthetic\n * touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onrespondermove\n */\n onResponderMove: PropTypes.func,\n\n /**\n * Another responder is already active and will not release it to that `View`\n * asking to be the responder.\n *\n * `View.props.onResponderReject: (event) => {}`, where `event` is a\n * synthetic touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onresponderreject\n */\n onResponderReject: PropTypes.func,\n\n /**\n * Fired at the end of the touch.\n *\n * `View.props.onResponderRelease: (event) => {}`, where `event` is a\n * synthetic touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onresponderrelease\n */\n onResponderRelease: PropTypes.func,\n\n /**\n * The responder has been taken from the `View`. Might be taken by other\n * views after a call to `onResponderTerminationRequest`, or might be taken\n * by the OS without asking (e.g., happens with control center/ notification\n * center on iOS)\n *\n * `View.props.onResponderTerminate: (event) => {}`, where `event` is a\n * synthetic touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onresponderterminate\n */\n onResponderTerminate: PropTypes.func,\n\n /**\n * Some other `View` wants to become responder and is asking this `View` to\n * release its responder. Returning `true` allows its release.\n *\n * `View.props.onResponderTerminationRequest: (event) => {}`, where `event`\n * is a synthetic touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onresponderterminationrequest\n */\n onResponderTerminationRequest: PropTypes.func,\n\n /**\n * Does this view want to become responder on the start of a touch?\n *\n * `View.props.onStartShouldSetResponder: (event) => [true | false]`, where\n * `event` is a synthetic touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onstartshouldsetresponder\n */\n onStartShouldSetResponder: PropTypes.func,\n\n /**\n * If a parent `View` wants to prevent a child `View` from becoming responder\n * on a touch start, it should have this handler which returns `true`.\n *\n * `View.props.onStartShouldSetResponderCapture: (event) => [true | false]`,\n * where `event` is a synthetic touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onstartshouldsetrespondercapture\n */\n onStartShouldSetResponderCapture: PropTypes.func,\n\n /**\n * Does this view want to \"claim\" touch responsiveness? This is called for\n * every touch move on the `View` when it is not the responder.\n *\n * `View.props.onMoveShouldSetResponder: (event) => [true | false]`, where\n * `event` is a synthetic touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onmoveshouldsetresponder\n */\n onMoveShouldSetResponder: PropTypes.func,\n\n /**\n * If a parent `View` wants to prevent a child `View` from becoming responder\n * on a move, it should have this handler which returns `true`.\n *\n * `View.props.onMoveShouldSetResponderCapture: (event) => [true | false]`,\n * where `event` is a synthetic touch event as described above.\n *\n * See https://reactnative.dev/docs/view.html#onMoveShouldsetrespondercapture\n */\n onMoveShouldSetResponderCapture: PropTypes.func,\n\n /**\n * This defines how far a touch event can start away from the view.\n * Typical interface guidelines recommend touch targets that are at least\n * 30 - 40 points/density-independent pixels.\n *\n * > The touch area never extends past the parent view bounds and the Z-index\n * > of sibling views always takes precedence if a touch hits two overlapping\n * > views.\n *\n * See https://reactnative.dev/docs/view.html#hitslop\n */\n hitSlop: DeprecatedEdgeInsetsPropType,\n\n /**\n * Invoked on mount and layout changes with:\n *\n * `{nativeEvent: { layout: {x, y, width, height}}}`\n *\n * This event is fired immediately once the layout has been calculated, but\n * the new layout may not yet be reflected on the screen at the time the\n * event is received, especially if a layout animation is in progress.\n *\n * See https://reactnative.dev/docs/view.html#onlayout\n */\n onLayout: PropTypes.func,\n\n /**\n * Controls whether the `View` can be the target of touch events.\n *\n * See https://reactnative.dev/docs/view.html#pointerevents\n */\n pointerEvents: (PropTypes.oneOf([\n 'box-none',\n 'none',\n 'box-only',\n 'auto',\n ]): React$PropType$Primitive<'box-none' | 'none' | 'box-only' | 'auto'>),\n\n /**\n * See https://reactnative.dev/docs/style.html\n */\n style: stylePropType,\n\n /**\n * This is a special performance property exposed by `RCTView` and is useful\n * for scrolling content when there are many subviews, most of which are\n * offscreen. For this property to be effective, it must be applied to a\n * view that contains many subviews that extend outside its bound. The\n * subviews must also have `overflow: hidden`, as should the containing view\n * (or one of its superviews).\n *\n * See https://reactnative.dev/docs/view.html#removeclippedsubviews\n */\n removeClippedSubviews: PropTypes.bool,\n\n /**\n * Whether this `View` should render itself (and all of its children) into a\n * single hardware texture on the GPU.\n *\n * @platform android\n *\n * See https://reactnative.dev/docs/view.html#rendertohardwaretextureandroid\n */\n renderToHardwareTextureAndroid: PropTypes.bool,\n\n /**\n * Whether this `View` should be rendered as a bitmap before compositing.\n *\n * @platform ios\n *\n * See https://reactnative.dev/docs/view.html#shouldrasterizeios\n */\n shouldRasterizeIOS: PropTypes.bool,\n\n /**\n * Views that are only used to layout their children or otherwise don't draw\n * anything may be automatically removed from the native hierarchy as an\n * optimization. Set this property to `false` to disable this optimization and\n * ensure that this `View` exists in the native view hierarchy.\n *\n * @platform android\n *\n * See https://reactnative.dev/docs/view.html#collapsable\n */\n collapsable: PropTypes.bool,\n\n /**\n * Whether this `View` needs to rendered offscreen and composited with an\n * alpha in order to preserve 100% correct colors and blending behavior.\n *\n * @platform android\n *\n * See https://reactnative.dev/docs/view.html#needsoffscreenalphacompositing\n */\n needsOffscreenAlphaCompositing: PropTypes.bool,\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nmodule.exports = {\n // This must be kept in sync with the AccessibilityRolesMask in RCTViewManager.m\n DeprecatedAccessibilityRoles: [\n 'none',\n 'button',\n 'togglebutton',\n 'link',\n 'search',\n 'image',\n 'keyboardkey',\n 'text',\n 'adjustable',\n 'imagebutton',\n 'header',\n 'summary',\n 'alert',\n 'checkbox',\n 'combobox',\n 'menu',\n 'menubar',\n 'menuitem',\n 'progressbar',\n 'radio',\n 'radiogroup',\n 'scrollbar',\n 'spinbutton',\n 'switch',\n 'tab',\n 'tablist',\n 'timer',\n 'list',\n 'toolbar',\n ],\n};\n","'use strict';\n\nfunction nullthrows(x, message) {\n if (x != null) {\n return x;\n }\n var error = new Error(message !== undefined ? message : 'Got unexpected ' + x);\n error.framesToPop = 1; // Skip nullthrows's own stack frame.\n throw error;\n}\n\nmodule.exports = nullthrows;\nmodule.exports.default = nullthrows;\n\nObject.defineProperty(module.exports, '__esModule', {value: true});\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';\nimport codegenNativeCommands from '../../Utilities/codegenNativeCommands';\nimport type {TextInputNativeCommands} from './TextInputNativeCommands';\nimport RCTTextInputViewConfig from './RCTTextInputViewConfig';\nimport * as NativeComponentRegistry from '../../NativeComponent/NativeComponentRegistry';\n\ntype NativeType = HostComponent;\n\ntype NativeCommands = TextInputNativeCommands;\n\nexport const Commands: NativeCommands = codegenNativeCommands({\n supportedCommands: ['focus', 'blur', 'setTextAndSelection'],\n});\n\nconst MultilineTextInputNativeComponent: HostComponent = NativeComponentRegistry.get(\n 'RCTMultilineTextInputView',\n () => RCTTextInputViewConfig,\n);\n\n// flowlint-next-line unclear-type:off\nexport default ((MultilineTextInputNativeComponent: any): HostComponent);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport * as React from 'react';\nimport BoundingDimensions from './BoundingDimensions';\nimport Platform from '../../Utilities/Platform';\nimport Position from './Position';\nimport UIManager from '../../ReactNative/UIManager';\nimport SoundManager from '../Sound/SoundManager';\n\nimport {PressabilityDebugView} from '../../Pressability/PressabilityDebug';\n\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport type {EdgeInsetsProp} from '../../StyleSheet/EdgeInsetsPropType';\nimport type {PressEvent} from '../../Types/CoreEventTypes';\n\nconst extractSingleTouch = nativeEvent => {\n const touches = nativeEvent.touches;\n const changedTouches = nativeEvent.changedTouches;\n const hasTouches = touches && touches.length > 0;\n const hasChangedTouches = changedTouches && changedTouches.length > 0;\n\n return !hasTouches && hasChangedTouches\n ? changedTouches[0]\n : hasTouches\n ? touches[0]\n : nativeEvent;\n};\n\n/**\n * `Touchable`: Taps done right.\n *\n * You hook your `ResponderEventPlugin` events into `Touchable`. `Touchable`\n * will measure time/geometry and tells you when to give feedback to the user.\n *\n * ====================== Touchable Tutorial ===============================\n * The `Touchable` mixin helps you handle the \"press\" interaction. It analyzes\n * the geometry of elements, and observes when another responder (scroll view\n * etc) has stolen the touch lock. It notifies your component when it should\n * give feedback to the user. (bouncing/highlighting/unhighlighting).\n *\n * - When a touch was activated (typically you highlight)\n * - When a touch was deactivated (typically you unhighlight)\n * - When a touch was \"pressed\" - a touch ended while still within the geometry\n * of the element, and no other element (like scroller) has \"stolen\" touch\n * lock (\"responder\") (Typically you bounce the element).\n *\n * A good tap interaction isn't as simple as you might think. There should be a\n * slight delay before showing a highlight when starting a touch. If a\n * subsequent touch move exceeds the boundary of the element, it should\n * unhighlight, but if that same touch is brought back within the boundary, it\n * should rehighlight again. A touch can move in and out of that boundary\n * several times, each time toggling highlighting, but a \"press\" is only\n * triggered if that touch ends while within the element's boundary and no\n * scroller (or anything else) has stolen the lock on touches.\n *\n * To create a new type of component that handles interaction using the\n * `Touchable` mixin, do the following:\n *\n * - Initialize the `Touchable` state.\n *\n * getInitialState: function() {\n * return merge(this.touchableGetInitialState(), yourComponentState);\n * }\n *\n * - Choose the rendered component who's touches should start the interactive\n * sequence. On that rendered node, forward all `Touchable` responder\n * handlers. You can choose any rendered node you like. Choose a node whose\n * hit target you'd like to instigate the interaction sequence:\n *\n * // In render function:\n * return (\n * \n * \n * Even though the hit detection/interactions are triggered by the\n * wrapping (typically larger) node, we usually end up implementing\n * custom logic that highlights this inner one.\n * \n * \n * );\n *\n * - You may set up your own handlers for each of these events, so long as you\n * also invoke the `touchable*` handlers inside of your custom handler.\n *\n * - Implement the handlers on your component class in order to provide\n * feedback to the user. See documentation for each of these class methods\n * that you should implement.\n *\n * touchableHandlePress: function() {\n * this.performBounceAnimation(); // or whatever you want to do.\n * },\n * touchableHandleActivePressIn: function() {\n * this.beginHighlighting(...); // Whatever you like to convey activation\n * },\n * touchableHandleActivePressOut: function() {\n * this.endHighlighting(...); // Whatever you like to convey deactivation\n * },\n *\n * - There are more advanced methods you can implement (see documentation below):\n * touchableGetHighlightDelayMS: function() {\n * return 20;\n * }\n * // In practice, *always* use a predeclared constant (conserve memory).\n * touchableGetPressRectOffset: function() {\n * return {top: 20, left: 20, right: 20, bottom: 100};\n * }\n */\n\n/**\n * Touchable states.\n */\n\nconst States = {\n NOT_RESPONDER: 'NOT_RESPONDER', // Not the responder\n RESPONDER_INACTIVE_PRESS_IN: 'RESPONDER_INACTIVE_PRESS_IN', // Responder, inactive, in the `PressRect`\n RESPONDER_INACTIVE_PRESS_OUT: 'RESPONDER_INACTIVE_PRESS_OUT', // Responder, inactive, out of `PressRect`\n RESPONDER_ACTIVE_PRESS_IN: 'RESPONDER_ACTIVE_PRESS_IN', // Responder, active, in the `PressRect`\n RESPONDER_ACTIVE_PRESS_OUT: 'RESPONDER_ACTIVE_PRESS_OUT', // Responder, active, out of `PressRect`\n RESPONDER_ACTIVE_LONG_PRESS_IN: 'RESPONDER_ACTIVE_LONG_PRESS_IN', // Responder, active, in the `PressRect`, after long press threshold\n RESPONDER_ACTIVE_LONG_PRESS_OUT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT', // Responder, active, out of `PressRect`, after long press threshold\n ERROR: 'ERROR',\n};\n\ntype State =\n | typeof States.NOT_RESPONDER\n | typeof States.RESPONDER_INACTIVE_PRESS_IN\n | typeof States.RESPONDER_INACTIVE_PRESS_OUT\n | typeof States.RESPONDER_ACTIVE_PRESS_IN\n | typeof States.RESPONDER_ACTIVE_PRESS_OUT\n | typeof States.RESPONDER_ACTIVE_LONG_PRESS_IN\n | typeof States.RESPONDER_ACTIVE_LONG_PRESS_OUT\n | typeof States.ERROR;\n\n/*\n * Quick lookup map for states that are considered to be \"active\"\n */\n\nconst baseStatesConditions = {\n NOT_RESPONDER: false,\n RESPONDER_INACTIVE_PRESS_IN: false,\n RESPONDER_INACTIVE_PRESS_OUT: false,\n RESPONDER_ACTIVE_PRESS_IN: false,\n RESPONDER_ACTIVE_PRESS_OUT: false,\n RESPONDER_ACTIVE_LONG_PRESS_IN: false,\n RESPONDER_ACTIVE_LONG_PRESS_OUT: false,\n ERROR: false,\n};\n\nconst IsActive = {\n ...baseStatesConditions,\n RESPONDER_ACTIVE_PRESS_OUT: true,\n RESPONDER_ACTIVE_PRESS_IN: true,\n};\n\n/**\n * Quick lookup for states that are considered to be \"pressing\" and are\n * therefore eligible to result in a \"selection\" if the press stops.\n */\nconst IsPressingIn = {\n ...baseStatesConditions,\n RESPONDER_INACTIVE_PRESS_IN: true,\n RESPONDER_ACTIVE_PRESS_IN: true,\n RESPONDER_ACTIVE_LONG_PRESS_IN: true,\n};\n\nconst IsLongPressingIn = {\n ...baseStatesConditions,\n RESPONDER_ACTIVE_LONG_PRESS_IN: true,\n};\n\n/**\n * Inputs to the state machine.\n */\nconst Signals = {\n DELAY: 'DELAY',\n RESPONDER_GRANT: 'RESPONDER_GRANT',\n RESPONDER_RELEASE: 'RESPONDER_RELEASE',\n RESPONDER_TERMINATED: 'RESPONDER_TERMINATED',\n ENTER_PRESS_RECT: 'ENTER_PRESS_RECT',\n LEAVE_PRESS_RECT: 'LEAVE_PRESS_RECT',\n LONG_PRESS_DETECTED: 'LONG_PRESS_DETECTED',\n};\n\ntype Signal =\n | typeof Signals.DELAY\n | typeof Signals.RESPONDER_GRANT\n | typeof Signals.RESPONDER_RELEASE\n | typeof Signals.RESPONDER_TERMINATED\n | typeof Signals.ENTER_PRESS_RECT\n | typeof Signals.LEAVE_PRESS_RECT\n | typeof Signals.LONG_PRESS_DETECTED;\n\n/**\n * Mapping from States x Signals => States\n */\nconst Transitions = {\n NOT_RESPONDER: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n RESPONDER_RELEASE: States.ERROR,\n RESPONDER_TERMINATED: States.ERROR,\n ENTER_PRESS_RECT: States.ERROR,\n LEAVE_PRESS_RECT: States.ERROR,\n LONG_PRESS_DETECTED: States.ERROR,\n },\n RESPONDER_INACTIVE_PRESS_IN: {\n DELAY: States.RESPONDER_ACTIVE_PRESS_IN,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR,\n },\n RESPONDER_INACTIVE_PRESS_OUT: {\n DELAY: States.RESPONDER_ACTIVE_PRESS_OUT,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR,\n },\n RESPONDER_ACTIVE_PRESS_IN: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n },\n RESPONDER_ACTIVE_PRESS_OUT: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR,\n },\n RESPONDER_ACTIVE_LONG_PRESS_IN: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n },\n RESPONDER_ACTIVE_LONG_PRESS_OUT: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR,\n },\n error: {\n DELAY: States.NOT_RESPONDER,\n RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.NOT_RESPONDER,\n LEAVE_PRESS_RECT: States.NOT_RESPONDER,\n LONG_PRESS_DETECTED: States.NOT_RESPONDER,\n },\n};\n\n// ==== Typical Constants for integrating into UI components ====\n// var HIT_EXPAND_PX = 20;\n// var HIT_VERT_OFFSET_PX = 10;\nconst HIGHLIGHT_DELAY_MS = 130;\n\nconst PRESS_EXPAND_PX = 20;\n\nconst LONG_PRESS_THRESHOLD = 500;\n\nconst LONG_PRESS_DELAY_MS = LONG_PRESS_THRESHOLD - HIGHLIGHT_DELAY_MS;\n\nconst LONG_PRESS_ALLOWED_MOVEMENT = 10;\n\n// Default amount \"active\" region protrudes beyond box\n\n/**\n * By convention, methods prefixed with underscores are meant to be @private,\n * and not @protected. Mixers shouldn't access them - not even to provide them\n * as callback handlers.\n *\n *\n * ========== Geometry =========\n * `Touchable` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n * +--------------------------+\n * | | - \"Start\" events in `HitRect` cause `HitRect`\n * | +--------------------+ | to become the responder.\n * | | +--------------+ | | - `HitRect` is typically expanded around\n * | | | | | | the `VisualRect`, but shifted downward.\n * | | | VisualRect | | | - After pressing down, after some delay,\n * | | | | | | and before letting up, the Visual React\n * | | +--------------+ | | will become \"active\". This makes it eligible\n * | | HitRect | | for being highlighted (so long as the\n * | +--------------------+ | press remains in the `PressRect`).\n * | PressRect o |\n * +----------------------|---+\n * Out Region |\n * +-----+ This gap between the `HitRect` and\n * `PressRect` allows a touch to move far away\n * from the original hit rect, and remain\n * highlighted, and eligible for a \"Press\".\n * Customize this via\n * `touchableGetPressRectOffset()`.\n *\n *\n *\n * ======= State Machine =======\n *\n * +-------------+ <---+ RESPONDER_RELEASE\n * |NOT_RESPONDER|\n * +-------------+ <---+ RESPONDER_TERMINATED\n * +\n * | RESPONDER_GRANT (HitRect)\n * v\n * +---------------------------+ DELAY +-------------------------+ T + DELAY +------------------------------+\n * |RESPONDER_INACTIVE_PRESS_IN|+-------->|RESPONDER_ACTIVE_PRESS_IN| +------------> |RESPONDER_ACTIVE_LONG_PRESS_IN|\n * +---------------------------+ +-------------------------+ +------------------------------+\n * + ^ + ^ + ^\n * |LEAVE_ |ENTER_ |LEAVE_ |ENTER_ |LEAVE_ |ENTER_\n * |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT\n * | | | | | |\n * v + v + v +\n * +----------------------------+ DELAY +--------------------------+ +-------------------------------+\n * |RESPONDER_INACTIVE_PRESS_OUT|+------->|RESPONDER_ACTIVE_PRESS_OUT| |RESPONDER_ACTIVE_LONG_PRESS_OUT|\n * +----------------------------+ +--------------------------+ +-------------------------------+\n *\n * T + DELAY => LONG_PRESS_DELAY_MS + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the `touchableHandlePress` abstract method invocation that occurs\n * when a responder is released while in either of the \"Press\" states.\n *\n * The other important side effects are the highlight abstract method\n * invocations (internal callbacks) to be implemented by the mixer.\n *\n *\n * @lends Touchable.prototype\n */\nconst TouchableMixin = {\n componentDidMount: function() {\n if (!Platform.isTV) {\n return;\n }\n },\n\n /**\n * Clear all timeouts on unmount\n */\n componentWillUnmount: function() {\n this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n },\n\n /**\n * It's prefer that mixins determine state in this way, having the class\n * explicitly mix the state in the one and only `getInitialState` method.\n *\n * @return {object} State object to be placed inside of\n * `this.state.touchable`.\n */\n touchableGetInitialState: function(): $TEMPORARY$object<{|\n touchable: $TEMPORARY$object<{|responderID: null, touchState: void|}>,\n |}> {\n return {\n touchable: {touchState: undefined, responderID: null},\n };\n },\n\n // ==== Hooks to Gesture Responder system ====\n /**\n * Must return true if embedded in a native platform scroll view.\n */\n touchableHandleResponderTerminationRequest: function(): any {\n return !this.props.rejectResponderTermination;\n },\n\n /**\n * Must return true to start the process of `Touchable`.\n */\n touchableHandleStartShouldSetResponder: function(): any {\n return !this.props.disabled;\n },\n\n /**\n * Return true to cancel press on long press.\n */\n touchableLongPressCancelsPress: function(): boolean {\n return true;\n },\n\n /**\n * Place as callback for a DOM element's `onResponderGrant` event.\n * @param {SyntheticEvent} e Synthetic event from event system.\n *\n */\n // $FlowFixMe[signature-verification-failure]\n touchableHandleResponderGrant: function(e: PressEvent) {\n const dispatchID = e.currentTarget;\n // Since e is used in a callback invoked on another event loop\n // (as in setTimeout etc), we need to call e.persist() on the\n // event to make sure it doesn't get reused in the event object pool.\n e.persist();\n\n this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n this.pressOutDelayTimeout = null;\n\n this.state.touchable.touchState = States.NOT_RESPONDER;\n this.state.touchable.responderID = dispatchID;\n this._receiveSignal(Signals.RESPONDER_GRANT, e);\n let delayMS =\n this.touchableGetHighlightDelayMS !== undefined\n ? Math.max(this.touchableGetHighlightDelayMS(), 0)\n : HIGHLIGHT_DELAY_MS;\n delayMS = isNaN(delayMS) ? HIGHLIGHT_DELAY_MS : delayMS;\n if (delayMS !== 0) {\n this.touchableDelayTimeout = setTimeout(\n this._handleDelay.bind(this, e),\n delayMS,\n );\n } else {\n this._handleDelay(e);\n }\n\n let longDelayMS =\n this.touchableGetLongPressDelayMS !== undefined\n ? Math.max(this.touchableGetLongPressDelayMS(), 10)\n : LONG_PRESS_DELAY_MS;\n longDelayMS = isNaN(longDelayMS) ? LONG_PRESS_DELAY_MS : longDelayMS;\n this.longPressDelayTimeout = setTimeout(\n this._handleLongDelay.bind(this, e),\n longDelayMS + delayMS,\n );\n },\n\n /**\n * Place as callback for a DOM element's `onResponderRelease` event.\n */\n // $FlowFixMe[signature-verification-failure]\n touchableHandleResponderRelease: function(e: PressEvent) {\n this.pressInLocation = null;\n this._receiveSignal(Signals.RESPONDER_RELEASE, e);\n },\n\n /**\n * Place as callback for a DOM element's `onResponderTerminate` event.\n */\n // $FlowFixMe[signature-verification-failure]\n touchableHandleResponderTerminate: function(e: PressEvent) {\n this.pressInLocation = null;\n this._receiveSignal(Signals.RESPONDER_TERMINATED, e);\n },\n\n /**\n * Place as callback for a DOM element's `onResponderMove` event.\n */\n // $FlowFixMe[signature-verification-failure]\n touchableHandleResponderMove: function(e: PressEvent) {\n // Measurement may not have returned yet.\n if (!this.state.touchable.positionOnActivate) {\n return;\n }\n\n const positionOnActivate = this.state.touchable.positionOnActivate;\n const dimensionsOnActivate = this.state.touchable.dimensionsOnActivate;\n const pressRectOffset = this.touchableGetPressRectOffset\n ? this.touchableGetPressRectOffset()\n : {\n left: PRESS_EXPAND_PX,\n right: PRESS_EXPAND_PX,\n top: PRESS_EXPAND_PX,\n bottom: PRESS_EXPAND_PX,\n };\n\n let pressExpandLeft = pressRectOffset.left;\n let pressExpandTop = pressRectOffset.top;\n let pressExpandRight = pressRectOffset.right;\n let pressExpandBottom = pressRectOffset.bottom;\n\n const hitSlop = this.touchableGetHitSlop\n ? this.touchableGetHitSlop()\n : null;\n\n if (hitSlop) {\n pressExpandLeft += hitSlop.left || 0;\n pressExpandTop += hitSlop.top || 0;\n pressExpandRight += hitSlop.right || 0;\n pressExpandBottom += hitSlop.bottom || 0;\n }\n\n const touch = extractSingleTouch(e.nativeEvent);\n const pageX = touch && touch.pageX;\n const pageY = touch && touch.pageY;\n\n if (this.pressInLocation) {\n const movedDistance = this._getDistanceBetweenPoints(\n pageX,\n pageY,\n this.pressInLocation.pageX,\n this.pressInLocation.pageY,\n );\n if (movedDistance > LONG_PRESS_ALLOWED_MOVEMENT) {\n this._cancelLongPressDelayTimeout();\n }\n }\n\n const isTouchWithinActive =\n pageX > positionOnActivate.left - pressExpandLeft &&\n pageY > positionOnActivate.top - pressExpandTop &&\n pageX <\n positionOnActivate.left +\n dimensionsOnActivate.width +\n pressExpandRight &&\n pageY <\n positionOnActivate.top +\n dimensionsOnActivate.height +\n pressExpandBottom;\n if (isTouchWithinActive) {\n const prevState = this.state.touchable.touchState;\n this._receiveSignal(Signals.ENTER_PRESS_RECT, e);\n const curState = this.state.touchable.touchState;\n if (\n curState === States.RESPONDER_INACTIVE_PRESS_IN &&\n prevState !== States.RESPONDER_INACTIVE_PRESS_IN\n ) {\n // fix for t7967420\n this._cancelLongPressDelayTimeout();\n }\n } else {\n this._cancelLongPressDelayTimeout();\n this._receiveSignal(Signals.LEAVE_PRESS_RECT, e);\n }\n },\n\n /**\n * Invoked when the item receives focus. Mixers might override this to\n * visually distinguish the `VisualRect` so that the user knows that it\n * currently has the focus. Most platforms only support a single element being\n * focused at a time, in which case there may have been a previously focused\n * element that was blurred just prior to this. This can be overridden when\n * using `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n */\n // $FlowFixMe[signature-verification-failure]\n touchableHandleFocus: function(e: Event) {\n this.props.onFocus && this.props.onFocus(e);\n },\n\n /**\n * Invoked when the item loses focus. Mixers might override this to\n * visually distinguish the `VisualRect` so that the user knows that it\n * no longer has focus. Most platforms only support a single element being\n * focused at a time, in which case the focus may have moved to another.\n * This can be overridden when using\n * `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n */\n // $FlowFixMe[signature-verification-failure]\n touchableHandleBlur: function(e: Event) {\n this.props.onBlur && this.props.onBlur(e);\n },\n\n // ==== Abstract Application Callbacks ====\n\n /**\n * Invoked when the item should be highlighted. Mixers should implement this\n * to visually distinguish the `VisualRect` so that the user knows that\n * releasing a touch will result in a \"selection\" (analog to click).\n *\n * @abstract\n * touchableHandleActivePressIn: function,\n */\n\n /**\n * Invoked when the item is \"active\" (in that it is still eligible to become\n * a \"select\") but the touch has left the `PressRect`. Usually the mixer will\n * want to unhighlight the `VisualRect`. If the user (while pressing) moves\n * back into the `PressRect` `touchableHandleActivePressIn` will be invoked\n * again and the mixer should probably highlight the `VisualRect` again. This\n * event will not fire on an `touchEnd/mouseUp` event, only move events while\n * the user is depressing the mouse/touch.\n *\n * @abstract\n * touchableHandleActivePressOut: function\n */\n\n /**\n * Invoked when the item is \"selected\" - meaning the interaction ended by\n * letting up while the item was either in the state\n * `RESPONDER_ACTIVE_PRESS_IN` or `RESPONDER_INACTIVE_PRESS_IN`.\n *\n * @abstract\n * touchableHandlePress: function\n */\n\n /**\n * Invoked when the item is long pressed - meaning the interaction ended by\n * letting up while the item was in `RESPONDER_ACTIVE_LONG_PRESS_IN`. If\n * `touchableHandleLongPress` is *not* provided, `touchableHandlePress` will\n * be called as it normally is. If `touchableHandleLongPress` is provided, by\n * default any `touchableHandlePress` callback will not be invoked. To\n * override this default behavior, override `touchableLongPressCancelsPress`\n * to return false. As a result, `touchableHandlePress` will be called when\n * lifting up, even if `touchableHandleLongPress` has also been called.\n *\n * @abstract\n * touchableHandleLongPress: function\n */\n\n /**\n * Returns the number of millis to wait before triggering a highlight.\n *\n * @abstract\n * touchableGetHighlightDelayMS: function\n */\n\n /**\n * Returns the amount to extend the `HitRect` into the `PressRect`. Positive\n * numbers mean the size expands outwards.\n *\n * @abstract\n * touchableGetPressRectOffset: function\n */\n\n // ==== Internal Logic ====\n\n /**\n * Measures the `HitRect` node on activation. The Bounding rectangle is with\n * respect to viewport - not page, so adding the `pageXOffset/pageYOffset`\n * should result in points that are in the same coordinate system as an\n * event's `globalX/globalY` data values.\n *\n * - Consider caching this for the lifetime of the component, or possibly\n * being able to share this cache between any `ScrollMap` view.\n *\n * @sideeffects\n * @private\n */\n _remeasureMetricsOnActivation: function() {\n const responderID = this.state.touchable.responderID;\n if (responderID == null) {\n return;\n }\n\n if (typeof responderID === 'number') {\n UIManager.measure(responderID, this._handleQueryLayout);\n } else {\n responderID.measure(this._handleQueryLayout);\n }\n },\n\n // $FlowFixMe[signature-verification-failure]\n _handleQueryLayout: function(\n l: number,\n t: number,\n w: number,\n h: number,\n globalX: number,\n globalY: number,\n ) {\n //don't do anything UIManager failed to measure node\n if (!l && !t && !w && !h && !globalX && !globalY) {\n return;\n }\n this.state.touchable.positionOnActivate &&\n Position.release(this.state.touchable.positionOnActivate);\n this.state.touchable.dimensionsOnActivate &&\n BoundingDimensions.release(this.state.touchable.dimensionsOnActivate);\n this.state.touchable.positionOnActivate = Position.getPooled(\n globalX,\n globalY,\n );\n this.state.touchable.dimensionsOnActivate = BoundingDimensions.getPooled(\n w,\n h,\n );\n },\n\n // $FlowFixMe[signature-verification-failure]\n _handleDelay: function(e: PressEvent) {\n this.touchableDelayTimeout = null;\n this._receiveSignal(Signals.DELAY, e);\n },\n\n // $FlowFixMe[signature-verification-failure]\n _handleLongDelay: function(e: PressEvent) {\n this.longPressDelayTimeout = null;\n const curState = this.state.touchable.touchState;\n if (\n curState === States.RESPONDER_ACTIVE_PRESS_IN ||\n curState === States.RESPONDER_ACTIVE_LONG_PRESS_IN\n ) {\n this._receiveSignal(Signals.LONG_PRESS_DETECTED, e);\n }\n },\n\n /**\n * Receives a state machine signal, performs side effects of the transition\n * and stores the new state. Validates the transition as well.\n *\n * @param {Signals} signal State machine signal.\n * @throws Error if invalid state transition or unrecognized signal.\n * @sideeffects\n */\n // $FlowFixMe[signature-verification-failure]\n _receiveSignal: function(signal: Signal, e: PressEvent) {\n const responderID = this.state.touchable.responderID;\n const curState = this.state.touchable.touchState;\n const nextState = Transitions[curState] && Transitions[curState][signal];\n if (!responderID && signal === Signals.RESPONDER_RELEASE) {\n return;\n }\n if (!nextState) {\n throw new Error(\n 'Unrecognized signal `' +\n signal +\n '` or state `' +\n curState +\n '` for Touchable responder `' +\n typeof this.state.touchable.responderID ===\n 'number'\n ? this.state.touchable.responderID\n : 'host component' + '`',\n );\n }\n if (nextState === States.ERROR) {\n throw new Error(\n 'Touchable cannot transition from `' +\n curState +\n '` to `' +\n signal +\n '` for responder `' +\n typeof this.state.touchable.responderID ===\n 'number'\n ? this.state.touchable.responderID\n : '<>' + '`',\n );\n }\n if (curState !== nextState) {\n this._performSideEffectsForTransition(curState, nextState, signal, e);\n this.state.touchable.touchState = nextState;\n }\n },\n\n _cancelLongPressDelayTimeout: function() {\n this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n this.longPressDelayTimeout = null;\n },\n\n _isHighlight: function(state: State): boolean {\n return (\n state === States.RESPONDER_ACTIVE_PRESS_IN ||\n state === States.RESPONDER_ACTIVE_LONG_PRESS_IN\n );\n },\n\n // $FlowFixMe[signature-verification-failure]\n _savePressInLocation: function(e: PressEvent) {\n const touch = extractSingleTouch(e.nativeEvent);\n const pageX = touch && touch.pageX;\n const pageY = touch && touch.pageY;\n const locationX = touch && touch.locationX;\n const locationY = touch && touch.locationY;\n this.pressInLocation = {pageX, pageY, locationX, locationY};\n },\n\n _getDistanceBetweenPoints: function(\n aX: number,\n aY: number,\n bX: number,\n bY: number,\n ): number {\n const deltaX = aX - bX;\n const deltaY = aY - bY;\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n },\n\n /**\n * Will perform a transition between touchable states, and identify any\n * highlighting or unhighlighting that must be performed for this particular\n * transition.\n *\n * @param {States} curState Current Touchable state.\n * @param {States} nextState Next Touchable state.\n * @param {Signal} signal Signal that triggered the transition.\n * @param {Event} e Native event.\n * @sideeffects\n */\n // $FlowFixMe[signature-verification-failure]\n _performSideEffectsForTransition: function(\n curState: State,\n nextState: State,\n signal: Signal,\n e: PressEvent,\n ) {\n const curIsHighlight = this._isHighlight(curState);\n const newIsHighlight = this._isHighlight(nextState);\n\n const isFinalSignal =\n signal === Signals.RESPONDER_TERMINATED ||\n signal === Signals.RESPONDER_RELEASE;\n\n if (isFinalSignal) {\n this._cancelLongPressDelayTimeout();\n }\n\n const isInitialTransition =\n curState === States.NOT_RESPONDER &&\n nextState === States.RESPONDER_INACTIVE_PRESS_IN;\n\n const isActiveTransition = !IsActive[curState] && IsActive[nextState];\n if (isInitialTransition || isActiveTransition) {\n this._remeasureMetricsOnActivation();\n }\n\n if (IsPressingIn[curState] && signal === Signals.LONG_PRESS_DETECTED) {\n this.touchableHandleLongPress && this.touchableHandleLongPress(e);\n }\n\n if (newIsHighlight && !curIsHighlight) {\n this._startHighlight(e);\n } else if (!newIsHighlight && curIsHighlight) {\n this._endHighlight(e);\n }\n\n if (IsPressingIn[curState] && signal === Signals.RESPONDER_RELEASE) {\n const hasLongPressHandler = !!this.props.onLongPress;\n const pressIsLongButStillCallOnPress =\n IsLongPressingIn[curState] && // We *are* long pressing.. // But either has no long handler\n (!hasLongPressHandler || !this.touchableLongPressCancelsPress()); // or we're told to ignore it.\n\n const shouldInvokePress =\n !IsLongPressingIn[curState] || pressIsLongButStillCallOnPress;\n if (shouldInvokePress && this.touchableHandlePress) {\n if (!newIsHighlight && !curIsHighlight) {\n // we never highlighted because of delay, but we should highlight now\n this._startHighlight(e);\n this._endHighlight(e);\n }\n if (Platform.OS === 'android' && !this.props.touchSoundDisabled) {\n SoundManager.playTouchSound();\n }\n this.touchableHandlePress(e);\n }\n }\n\n this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n this.touchableDelayTimeout = null;\n },\n\n // $FlowFixMe[signature-verification-failure]\n _startHighlight: function(e: PressEvent) {\n this._savePressInLocation(e);\n this.touchableHandleActivePressIn && this.touchableHandleActivePressIn(e);\n },\n\n // $FlowFixMe[signature-verification-failure]\n _endHighlight: function(e: PressEvent) {\n if (this.touchableHandleActivePressOut) {\n if (\n this.touchableGetPressOutDelayMS &&\n this.touchableGetPressOutDelayMS()\n ) {\n this.pressOutDelayTimeout = setTimeout(() => {\n this.touchableHandleActivePressOut(e);\n }, this.touchableGetPressOutDelayMS());\n } else {\n this.touchableHandleActivePressOut(e);\n }\n }\n },\n\n withoutDefaultFocusAndBlur: ({}: $TEMPORARY$object<{||}>),\n};\n\n/**\n * Provide an optional version of the mixin where `touchableHandleFocus` and\n * `touchableHandleBlur` can be overridden. This allows appropriate defaults to\n * be set on TV platforms, without breaking existing implementations of\n * `Touchable`.\n */\nconst {\n touchableHandleFocus,\n touchableHandleBlur,\n ...TouchableMixinWithoutDefaultFocusAndBlur\n} = TouchableMixin;\nTouchableMixin.withoutDefaultFocusAndBlur = TouchableMixinWithoutDefaultFocusAndBlur;\n\nconst Touchable = {\n Mixin: TouchableMixin,\n /**\n * Renders a debugging overlay to visualize touch target with hitSlop (might not work on Android).\n */\n renderDebugView: ({\n color,\n hitSlop,\n }: {\n color: ColorValue,\n hitSlop: EdgeInsetsProp,\n ...\n }): null | React.Node => {\n if (__DEV__) {\n return ;\n }\n return null;\n },\n};\n\nmodule.exports = Touchable;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n'use strict';\nimport PooledClass from './PooledClass';\n\nconst twoArgumentPooler = PooledClass.twoArgumentPooler;\n\n/**\n * PooledClass representing the bounding rectangle of a region.\n *\n * @param {number} width Width of bounding rectangle.\n * @param {number} height Height of bounding rectangle.\n * @constructor BoundingDimensions\n */\nfunction BoundingDimensions(width, height) {\n this.width = width;\n this.height = height;\n}\n\nBoundingDimensions.prototype.destructor = function() {\n this.width = null;\n this.height = null;\n};\n\n/**\n * @param {HTMLElement} element Element to return `BoundingDimensions` for.\n * @return {BoundingDimensions} Bounding dimensions of `element`.\n */\nBoundingDimensions.getPooledFromElement = function(element) {\n return BoundingDimensions.getPooled(\n element.offsetWidth,\n element.offsetHeight,\n );\n};\n\nPooledClass.addPoolingTo(BoundingDimensions, twoArgumentPooler);\n\nmodule.exports = BoundingDimensions;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\nimport invariant from 'invariant';\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nconst oneArgumentPooler = function(copyFieldsFrom) {\n const Klass = this;\n if (Klass.instancePool.length) {\n const instance = Klass.instancePool.pop();\n Klass.call(instance, copyFieldsFrom);\n return instance;\n } else {\n return new Klass(copyFieldsFrom);\n }\n};\n\nconst twoArgumentPooler = function(a1, a2) {\n const Klass = this;\n if (Klass.instancePool.length) {\n const instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2);\n return instance;\n } else {\n return new Klass(a1, a2);\n }\n};\n\nconst threeArgumentPooler = function(a1, a2, a3) {\n const Klass = this;\n if (Klass.instancePool.length) {\n const instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3);\n return instance;\n } else {\n return new Klass(a1, a2, a3);\n }\n};\n\nconst fourArgumentPooler = function(a1, a2, a3, a4) {\n const Klass = this;\n if (Klass.instancePool.length) {\n const instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4);\n }\n};\n\nconst standardReleaser = function(instance) {\n const Klass = this;\n invariant(\n instance instanceof Klass,\n 'Trying to release an instance into a pool of a different type.',\n );\n instance.destructor();\n if (Klass.instancePool.length < Klass.poolSize) {\n Klass.instancePool.push(instance);\n }\n};\n\nconst DEFAULT_POOL_SIZE = 10;\nconst DEFAULT_POOLER = oneArgumentPooler;\n\ntype Pooler = any;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nconst addPoolingTo = function(\n CopyConstructor: Class,\n pooler: Pooler,\n): Class & {\n getPooled(\n ...args: $ReadOnlyArray\n ): /* arguments of the constructor */ T,\n release(instance: mixed): void,\n ...\n} {\n // Casting as any so that flow ignores the actual implementation and trusts\n // it to match the type we declared\n const NewKlass = (CopyConstructor: any);\n NewKlass.instancePool = [];\n NewKlass.getPooled = pooler || DEFAULT_POOLER;\n if (!NewKlass.poolSize) {\n NewKlass.poolSize = DEFAULT_POOL_SIZE;\n }\n NewKlass.release = standardReleaser;\n return NewKlass;\n};\n\nconst PooledClass = {\n addPoolingTo: addPoolingTo,\n oneArgumentPooler: (oneArgumentPooler: Pooler),\n twoArgumentPooler: (twoArgumentPooler: Pooler),\n threeArgumentPooler: (threeArgumentPooler: Pooler),\n fourArgumentPooler: (fourArgumentPooler: Pooler),\n};\n\nmodule.exports = PooledClass;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n'use strict';\nimport PooledClass from './PooledClass';\n\nconst twoArgumentPooler = PooledClass.twoArgumentPooler;\n\n/**\n * Position does not expose methods for construction via an `HTMLDOMElement`,\n * because it isn't meaningful to construct such a thing without first defining\n * a frame of reference.\n *\n * @param {number} windowStartKey Key that window starts at.\n * @param {number} windowEndKey Key that window ends at.\n */\nfunction Position(left, top) {\n this.left = left;\n this.top = top;\n}\n\nPosition.prototype.destructor = function() {\n this.left = null;\n this.top = null;\n};\n\nPooledClass.addPoolingTo(Position, twoArgumentPooler);\n\nmodule.exports = Position;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport Pressability, {\n type PressabilityConfig,\n} from '../../Pressability/Pressability';\nimport {PressabilityDebugView} from '../../Pressability/PressabilityDebug';\nimport StyleSheet, {type ViewStyleProp} from '../../StyleSheet/StyleSheet';\nimport type {ColorValue} from '../../StyleSheet/StyleSheet';\nimport typeof TouchableWithoutFeedback from './TouchableWithoutFeedback';\nimport Platform from '../../Utilities/Platform';\nimport View from '../../Components/View/View';\nimport * as React from 'react';\n\ntype AndroidProps = $ReadOnly<{|\n nextFocusDown?: ?number,\n nextFocusForward?: ?number,\n nextFocusLeft?: ?number,\n nextFocusRight?: ?number,\n nextFocusUp?: ?number,\n|}>;\n\ntype IOSProps = $ReadOnly<{|\n hasTVPreferredFocus?: ?boolean,\n|}>;\n\ntype Props = $ReadOnly<{|\n ...React.ElementConfig,\n ...AndroidProps,\n ...IOSProps,\n\n activeOpacity?: ?number,\n underlayColor?: ?ColorValue,\n style?: ?ViewStyleProp,\n onShowUnderlay?: ?() => void,\n onHideUnderlay?: ?() => void,\n testOnly_pressed?: ?boolean,\n\n hostRef: React.Ref,\n|}>;\n\ntype ExtraStyles = $ReadOnly<{|\n child: ViewStyleProp,\n underlay: ViewStyleProp,\n|}>;\n\ntype State = $ReadOnly<{|\n pressability: Pressability,\n extraStyles: ?ExtraStyles,\n|}>;\n\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, which allows\n * the underlay color to show through, darkening or tinting the view.\n *\n * The underlay comes from wrapping the child in a new View, which can affect\n * layout, and sometimes cause unwanted visual artifacts if not used correctly,\n * for example if the backgroundColor of the wrapped view isn't explicitly set\n * to an opaque color.\n *\n * TouchableHighlight must have one child (not zero or more than one).\n * If you wish to have several child components, wrap them in a View.\n *\n * Example:\n *\n * ```\n * renderButton: function() {\n * return (\n * \n * \n * \n * );\n * },\n * ```\n *\n *\n * ### Example\n *\n * ```ReactNativeWebPlayer\n * import React, { Component } from 'react'\n * import {\n * AppRegistry,\n * StyleSheet,\n * TouchableHighlight,\n * Text,\n * View,\n * } from 'react-native'\n *\n * class App extends Component {\n * constructor(props) {\n * super(props)\n * this.state = { count: 0 }\n * }\n *\n * onPress = () => {\n * this.setState({\n * count: this.state.count+1\n * })\n * }\n *\n * render() {\n * return (\n * \n * \n * Touch Here \n * \n * \n * \n * { this.state.count !== 0 ? this.state.count: null}\n * \n * \n * \n * )\n * }\n * }\n *\n * const styles = StyleSheet.create({\n * container: {\n * flex: 1,\n * justifyContent: 'center',\n * paddingHorizontal: 10\n * },\n * button: {\n * alignItems: 'center',\n * backgroundColor: '#DDDDDD',\n * padding: 10\n * },\n * countContainer: {\n * alignItems: 'center',\n * padding: 10\n * },\n * countText: {\n * color: '#FF00FF'\n * }\n * })\n *\n * AppRegistry.registerComponent('App', () => App)\n * ```\n *\n */\nclass TouchableHighlight extends React.Component {\n _hideTimeout: ?TimeoutID;\n _isMounted: boolean = false;\n\n state: State = {\n pressability: new Pressability(this._createPressabilityConfig()),\n extraStyles:\n this.props.testOnly_pressed === true ? this._createExtraStyles() : null,\n };\n\n _createPressabilityConfig(): PressabilityConfig {\n return {\n cancelable: !this.props.rejectResponderTermination,\n disabled:\n this.props.disabled != null\n ? this.props.disabled\n : this.props.accessibilityState?.disabled,\n hitSlop: this.props.hitSlop,\n delayLongPress: this.props.delayLongPress,\n delayPressIn: this.props.delayPressIn,\n delayPressOut: this.props.delayPressOut,\n minPressDuration: 0,\n pressRectOffset: this.props.pressRetentionOffset,\n android_disableSound: this.props.touchSoundDisabled,\n onBlur: event => {\n if (Platform.isTV) {\n this._hideUnderlay();\n }\n if (this.props.onBlur != null) {\n this.props.onBlur(event);\n }\n },\n onFocus: event => {\n if (Platform.isTV) {\n this._showUnderlay();\n }\n if (this.props.onFocus != null) {\n this.props.onFocus(event);\n }\n },\n onLongPress: this.props.onLongPress,\n onPress: event => {\n if (this._hideTimeout != null) {\n clearTimeout(this._hideTimeout);\n }\n if (!Platform.isTV) {\n this._showUnderlay();\n this._hideTimeout = setTimeout(() => {\n this._hideUnderlay();\n }, this.props.delayPressOut ?? 0);\n }\n if (this.props.onPress != null) {\n this.props.onPress(event);\n }\n },\n onPressIn: event => {\n if (this._hideTimeout != null) {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = null;\n }\n this._showUnderlay();\n if (this.props.onPressIn != null) {\n this.props.onPressIn(event);\n }\n },\n onPressOut: event => {\n if (this._hideTimeout == null) {\n this._hideUnderlay();\n }\n if (this.props.onPressOut != null) {\n this.props.onPressOut(event);\n }\n },\n };\n }\n\n _createExtraStyles(): ExtraStyles {\n return {\n child: {opacity: this.props.activeOpacity ?? 0.85},\n underlay: {\n backgroundColor:\n this.props.underlayColor === undefined\n ? 'black'\n : this.props.underlayColor,\n },\n };\n }\n\n _showUnderlay(): void {\n if (!this._isMounted || !this._hasPressHandler()) {\n return;\n }\n this.setState({extraStyles: this._createExtraStyles()});\n if (this.props.onShowUnderlay != null) {\n this.props.onShowUnderlay();\n }\n }\n\n _hideUnderlay(): void {\n if (this._hideTimeout != null) {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = null;\n }\n if (this.props.testOnly_pressed === true) {\n return;\n }\n if (this._hasPressHandler()) {\n this.setState({extraStyles: null});\n if (this.props.onHideUnderlay != null) {\n this.props.onHideUnderlay();\n }\n }\n }\n\n _hasPressHandler(): boolean {\n return (\n this.props.onPress != null ||\n this.props.onPressIn != null ||\n this.props.onPressOut != null ||\n this.props.onLongPress != null\n );\n }\n\n render(): React.Node {\n const child = React.Children.only(this.props.children);\n\n // BACKWARD-COMPATIBILITY: Focus and blur events were never supported before\n // adopting `Pressability`, so preserve that behavior.\n const {\n onBlur,\n onFocus,\n ...eventHandlersWithoutBlurAndFocus\n } = this.state.pressability.getEventHandlers();\n\n const accessibilityState =\n this.props.disabled != null\n ? {\n ...this.props.accessibilityState,\n disabled: this.props.disabled,\n }\n : this.props.accessibilityState;\n\n return (\n \n {React.cloneElement(child, {\n style: StyleSheet.compose(\n child.props.style,\n this.state.extraStyles?.child,\n ),\n })}\n {__DEV__ ? (\n \n ) : null}\n \n );\n }\n\n componentDidMount(): void {\n this._isMounted = true;\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n this.state.pressability.configure(this._createPressabilityConfig());\n }\n\n componentWillUnmount(): void {\n this._isMounted = false;\n if (this._hideTimeout != null) {\n clearTimeout(this._hideTimeout);\n }\n this.state.pressability.reset();\n }\n}\n\nconst Touchable = (React.forwardRef((props, hostRef) => (\n \n)): React.AbstractComponent<\n $ReadOnly<$Diff|}>>,\n React.ElementRef,\n>);\n\nTouchable.displayName = 'TouchableHighlight';\n\nmodule.exports = Touchable;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport Pressability, {\n type PressabilityConfig,\n} from '../../Pressability/Pressability';\nimport {PressabilityDebugView} from '../../Pressability/PressabilityDebug';\nimport type {\n AccessibilityActionEvent,\n AccessibilityActionInfo,\n AccessibilityRole,\n AccessibilityState,\n AccessibilityValue,\n} from '../../Components/View/ViewAccessibility';\nimport type {EdgeInsetsProp} from '../../StyleSheet/EdgeInsetsPropType';\nimport type {\n BlurEvent,\n FocusEvent,\n LayoutEvent,\n PressEvent,\n} from '../../Types/CoreEventTypes';\nimport View from '../../Components/View/View';\nimport * as React from 'react';\n\ntype Props = $ReadOnly<{|\n accessibilityActions?: ?$ReadOnlyArray,\n accessibilityElementsHidden?: ?boolean,\n accessibilityHint?: ?Stringish,\n accessibilityIgnoresInvertColors?: ?boolean,\n accessibilityLabel?: ?Stringish,\n accessibilityLiveRegion?: ?('none' | 'polite' | 'assertive'),\n accessibilityRole?: ?AccessibilityRole,\n accessibilityState?: ?AccessibilityState,\n accessibilityValue?: ?AccessibilityValue,\n accessibilityViewIsModal?: ?boolean,\n accessible?: ?boolean,\n children?: ?React.Node,\n delayLongPress?: ?number,\n delayPressIn?: ?number,\n delayPressOut?: ?number,\n disabled?: ?boolean,\n focusable?: ?boolean,\n hitSlop?: ?EdgeInsetsProp,\n importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),\n nativeID?: ?string,\n onAccessibilityAction?: ?(event: AccessibilityActionEvent) => mixed,\n onBlur?: ?(event: BlurEvent) => mixed,\n onFocus?: ?(event: FocusEvent) => mixed,\n onLayout?: ?(event: LayoutEvent) => mixed,\n onLongPress?: ?(event: PressEvent) => mixed,\n onPress?: ?(event: PressEvent) => mixed,\n onPressIn?: ?(event: PressEvent) => mixed,\n onPressOut?: ?(event: PressEvent) => mixed,\n pressRetentionOffset?: ?EdgeInsetsProp,\n rejectResponderTermination?: ?boolean,\n testID?: ?string,\n touchSoundDisabled?: ?boolean,\n|}>;\n\ntype State = $ReadOnly<{|\n pressability: Pressability,\n|}>;\n\nconst PASSTHROUGH_PROPS = [\n 'accessibilityActions',\n 'accessibilityElementsHidden',\n 'accessibilityHint',\n 'accessibilityIgnoresInvertColors',\n 'accessibilityLabel',\n 'accessibilityLiveRegion',\n 'accessibilityRole',\n 'accessibilityValue',\n 'accessibilityViewIsModal',\n 'hitSlop',\n 'importantForAccessibility',\n 'nativeID',\n 'onAccessibilityAction',\n 'onBlur',\n 'onFocus',\n 'onLayout',\n 'testID',\n];\n\nclass TouchableWithoutFeedback extends React.Component {\n state: State = {\n pressability: new Pressability(createPressabilityConfig(this.props)),\n };\n\n render(): React.Node {\n const element = React.Children.only(this.props.children);\n const children = [element.props.children];\n if (__DEV__) {\n if (element.type === View) {\n children.push(\n ,\n );\n }\n }\n\n // BACKWARD-COMPATIBILITY: Focus and blur events were never supported before\n // adopting `Pressability`, so preserve that behavior.\n const {\n onBlur,\n onFocus,\n ...eventHandlersWithoutBlurAndFocus\n } = this.state.pressability.getEventHandlers();\n\n const elementProps: {[string]: mixed, ...} = {\n ...eventHandlersWithoutBlurAndFocus,\n accessible: this.props.accessible !== false,\n accessibilityState:\n this.props.disabled != null\n ? {\n ...this.props.accessibilityState,\n disabled: this.props.disabled,\n }\n : this.props.accessibilityState,\n focusable:\n this.props.focusable !== false && this.props.onPress !== undefined,\n };\n for (const prop of PASSTHROUGH_PROPS) {\n if (this.props[prop] !== undefined) {\n elementProps[prop] = this.props[prop];\n }\n }\n\n return React.cloneElement(element, elementProps, ...children);\n }\n\n componentDidUpdate(): void {\n this.state.pressability.configure(createPressabilityConfig(this.props));\n }\n\n componentWillUnmount(): void {\n this.state.pressability.reset();\n }\n}\n\nfunction createPressabilityConfig(props: Props): PressabilityConfig {\n return {\n cancelable: !props.rejectResponderTermination,\n disabled:\n props.disabled !== null\n ? props.disabled\n : props.accessibilityState?.disabled,\n hitSlop: props.hitSlop,\n delayLongPress: props.delayLongPress,\n delayPressIn: props.delayPressIn,\n delayPressOut: props.delayPressOut,\n minPressDuration: 0,\n pressRectOffset: props.pressRetentionOffset,\n android_disableSound: props.touchSoundDisabled,\n onBlur: props.onBlur,\n onFocus: props.onFocus,\n onLongPress: props.onLongPress,\n onPress: props.onPress,\n onPressIn: props.onPressIn,\n onPressOut: props.onPressOut,\n };\n}\n\nTouchableWithoutFeedback.displayName = 'TouchableWithoutFeedback';\n\nmodule.exports = TouchableWithoutFeedback;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport RCTActionSheetManager from './NativeActionSheetManager';\n\nconst invariant = require('invariant');\nconst processColor = require('../StyleSheet/processColor');\nimport type {ColorValue} from '../StyleSheet/StyleSheet';\nimport type {ProcessedColorValue} from '../StyleSheet/processColor';\n\n/**\n * Display action sheets and share sheets on iOS.\n *\n * See https://reactnative.dev/docs/actionsheetios.html\n */\nconst ActionSheetIOS = {\n /**\n * Display an iOS action sheet.\n *\n * The `options` object must contain one or more of:\n *\n * - `options` (array of strings) - a list of button titles (required)\n * - `cancelButtonIndex` (int) - index of cancel button in `options`\n * - `destructiveButtonIndex` (int or array of ints) - index or indices of destructive buttons in `options`\n * - `title` (string) - a title to show above the action sheet\n * - `message` (string) - a message to show below the title\n * - `disabledButtonIndices` (array of numbers) - a list of button indices which should be disabled\n *\n * The 'callback' function takes one parameter, the zero-based index\n * of the selected item.\n *\n * See https://reactnative.dev/docs/actionsheetios.html#showactionsheetwithoptions\n */\n showActionSheetWithOptions(\n options: {|\n +title?: ?string,\n +message?: ?string,\n +options: Array,\n +destructiveButtonIndex?: ?number | ?Array,\n +cancelButtonIndex?: ?number,\n +anchor?: ?number,\n +tintColor?: ColorValue | ProcessedColorValue,\n +userInterfaceStyle?: string,\n +disabledButtonIndices?: Array,\n |},\n callback: (buttonIndex: number) => void,\n ) {\n invariant(\n typeof options === 'object' && options !== null,\n 'Options must be a valid object',\n );\n invariant(typeof callback === 'function', 'Must provide a valid callback');\n invariant(RCTActionSheetManager, \"ActionSheetManager doesn't exist\");\n\n const {tintColor, destructiveButtonIndex, ...remainingOptions} = options;\n let destructiveButtonIndices = null;\n\n if (Array.isArray(destructiveButtonIndex)) {\n destructiveButtonIndices = destructiveButtonIndex;\n } else if (typeof destructiveButtonIndex === 'number') {\n destructiveButtonIndices = [destructiveButtonIndex];\n }\n\n const processedTintColor = processColor(tintColor);\n invariant(\n processedTintColor == null || typeof processedTintColor === 'number',\n 'Unexpected color given for ActionSheetIOS.showActionSheetWithOptions tintColor',\n );\n RCTActionSheetManager.showActionSheetWithOptions(\n {\n ...remainingOptions,\n tintColor: processedTintColor,\n destructiveButtonIndices,\n },\n callback,\n );\n },\n\n /**\n * Display the iOS share sheet. The `options` object should contain\n * one or both of `message` and `url` and can additionally have\n * a `subject` or `excludedActivityTypes`:\n *\n * - `url` (string) - a URL to share\n * - `message` (string) - a message to share\n * - `subject` (string) - a subject for the message\n * - `excludedActivityTypes` (array) - the activities to exclude from\n * the ActionSheet\n * - `tintColor` (color) - tint color of the buttons\n *\n * The 'failureCallback' function takes one parameter, an error object.\n * The only property defined on this object is an optional `stack` property\n * of type `string`.\n *\n * The 'successCallback' function takes two parameters:\n *\n * - a boolean value signifying success or failure\n * - a string that, in the case of success, indicates the method of sharing\n *\n * See https://reactnative.dev/docs/actionsheetios.html#showshareactionsheetwithoptions\n */\n showShareActionSheetWithOptions(\n options: Object,\n failureCallback: Function,\n successCallback: Function,\n ) {\n invariant(\n typeof options === 'object' && options !== null,\n 'Options must be a valid object',\n );\n invariant(\n typeof failureCallback === 'function',\n 'Must provide a valid failureCallback',\n );\n invariant(\n typeof successCallback === 'function',\n 'Must provide a valid successCallback',\n );\n invariant(RCTActionSheetManager, \"ActionSheetManager doesn't exist\");\n RCTActionSheetManager.showShareActionSheetWithOptions(\n {...options, tintColor: processColor(options.tintColor)},\n failureCallback,\n successCallback,\n );\n },\n};\n\nmodule.exports = ActionSheetIOS;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {||};\n +showActionSheetWithOptions: (\n options: {|\n +title?: ?string,\n +message?: ?string,\n +options: ?Array,\n +destructiveButtonIndices?: ?Array,\n +cancelButtonIndex?: ?number,\n +anchor?: ?number,\n +tintColor?: ?number,\n +userInterfaceStyle?: ?string,\n +disabledButtonIndices?: Array,\n |},\n callback: (buttonIndex: number) => void,\n ) => void;\n +showShareActionSheetWithOptions: (\n options: {|\n +message?: ?string,\n +url?: ?string,\n +subject?: ?string,\n +anchor?: ?number,\n +tintColor?: ?number,\n +excludedActivityTypes?: ?Array,\n +userInterfaceStyle?: ?string,\n |},\n failureCallback: (error: {|\n +domain: string,\n +code: string,\n +userInfo?: ?Object,\n +message: string,\n |}) => void,\n successCallback: (completed: boolean, activityType: ?string) => void,\n ) => void;\n}\n\nexport default (TurboModuleRegistry.get('ActionSheetManager'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport EventEmitter, {\n type EventSubscription,\n} from '../vendor/emitter/EventEmitter';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport NativeAppearance, {\n type AppearancePreferences,\n type ColorSchemeName,\n} from './NativeAppearance';\nimport invariant from 'invariant';\nimport {isAsyncDebugging} from './DebugEnvironment';\nimport Platform from '../Utilities/Platform';\n\ntype AppearanceListener = (preferences: AppearancePreferences) => void;\nconst eventEmitter = new EventEmitter<{\n change: [AppearancePreferences],\n}>();\n\ntype NativeAppearanceEventDefinitions = {\n appearanceChanged: [AppearancePreferences],\n};\n\nif (NativeAppearance) {\n const nativeEventEmitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeAppearance,\n );\n nativeEventEmitter.addListener(\n 'appearanceChanged',\n (newAppearance: AppearancePreferences) => {\n const {colorScheme} = newAppearance;\n invariant(\n colorScheme === 'dark' ||\n colorScheme === 'light' ||\n colorScheme == null,\n \"Unrecognized color scheme. Did you mean 'dark' or 'light'?\",\n );\n eventEmitter.emit('change', {colorScheme});\n },\n );\n}\n\nmodule.exports = {\n /**\n * Note: Although color scheme is available immediately, it may change at any\n * time. Any rendering logic or styles that depend on this should try to call\n * this function on every render, rather than caching the value (for example,\n * using inline styles rather than setting a value in a `StyleSheet`).\n *\n * Example: `const colorScheme = Appearance.getColorScheme();`\n *\n * @returns {?ColorSchemeName} Value for the color scheme preference.\n */\n getColorScheme(): ?ColorSchemeName {\n if (__DEV__) {\n if (isAsyncDebugging) {\n // Hard code light theme when using the async debugger as\n // sync calls aren't supported\n return 'light';\n }\n }\n\n // TODO: (hramos) T52919652 Use ?ColorSchemeName once codegen supports union\n const nativeColorScheme: ?string =\n NativeAppearance == null\n ? null\n : NativeAppearance.getColorScheme() || null;\n invariant(\n nativeColorScheme === 'dark' ||\n nativeColorScheme === 'light' ||\n nativeColorScheme == null,\n \"Unrecognized color scheme. Did you mean 'dark' or 'light'?\",\n );\n return nativeColorScheme;\n },\n\n /**\n * Add an event handler that is fired when appearance preferences change.\n */\n addChangeListener(listener: AppearanceListener): EventSubscription {\n return eventEmitter.addListener('change', listener);\n },\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addEventListener`.\n */\n removeChangeListener(listener: AppearanceListener): void {\n // NOTE: This will report a deprecation notice via `console.error`.\n eventEmitter.removeListener('change', listener);\n },\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport type ColorSchemeName = 'light' | 'dark';\n\nexport type AppearancePreferences = {|\n // TODO: (hramos) T52919652 Use ?ColorSchemeName once codegen supports union\n // types.\n /* 'light' | 'dark' */\n colorScheme?: ?string,\n|};\n\nexport interface Spec extends TurboModule {\n // TODO: (hramos) T52919652 Use ?ColorSchemeName once codegen supports union\n // types.\n /* 'light' | 'dark' */\n +getColorScheme: () => ?string;\n\n // RCTEventEmitter\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.get('Appearance'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nexport let isAsyncDebugging: boolean = false;\n\nif (__DEV__) {\n // These native interfaces don't exist in asynchronous debugging environments.\n isAsyncDebugging =\n !global.nativeExtensions &&\n !global.nativeCallSyncHook &&\n !global.RN$Bridgeless;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nconst BatchedBridge = require('../BatchedBridge/BatchedBridge');\nconst BugReporting = require('../BugReporting/BugReporting');\nconst ReactNative = require('../Renderer/shims/ReactNative');\nconst SceneTracker = require('../Utilities/SceneTracker');\n\nconst infoLog = require('../Utilities/infoLog');\nconst invariant = require('invariant');\nconst renderApplication = require('./renderApplication');\nimport type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';\n\nimport {coerceDisplayMode} from './DisplayMode';\nimport createPerformanceLogger from '../Utilities/createPerformanceLogger';\nimport NativeHeadlessJsTaskSupport from './NativeHeadlessJsTaskSupport';\nimport HeadlessJsTaskError from './HeadlessJsTaskError';\nimport type {RootTag} from 'react-native/Libraries/Types/RootTagTypes';\n\ntype Task = (taskData: any) => Promise;\nexport type TaskProvider = () => Task;\ntype TaskCanceller = () => void;\ntype TaskCancelProvider = () => TaskCanceller;\n\nexport type ComponentProvider = () => React$ComponentType;\nexport type ComponentProviderInstrumentationHook = (\n component: ComponentProvider,\n scopedPerformanceLogger: IPerformanceLogger,\n) => React$ComponentType;\nexport type AppConfig = {\n appKey: string,\n component?: ComponentProvider,\n run?: Function,\n section?: boolean,\n ...\n};\nexport type Runnable = {\n component?: ComponentProvider,\n run: Function,\n ...\n};\nexport type Runnables = {[appKey: string]: Runnable, ...};\nexport type Registry = {\n sections: Array,\n runnables: Runnables,\n ...\n};\nexport type WrapperComponentProvider = any => React$ComponentType;\n\nconst runnables: Runnables = {};\nlet runCount = 1;\nconst sections: Runnables = {};\nconst taskProviders: Map = new Map();\nconst taskCancelProviders: Map = new Map();\nlet componentProviderInstrumentationHook: ComponentProviderInstrumentationHook = (\n component: ComponentProvider,\n) => component();\n\nlet wrapperComponentProvider: ?WrapperComponentProvider;\nlet showArchitectureIndicator = false;\n\n/**\n * `AppRegistry` is the JavaScript entry point to running all React Native apps.\n *\n * See https://reactnative.dev/docs/appregistry.html\n */\nconst AppRegistry = {\n setWrapperComponentProvider(provider: WrapperComponentProvider) {\n wrapperComponentProvider = provider;\n },\n\n enableArchitectureIndicator(enabled: boolean): void {\n showArchitectureIndicator = enabled;\n },\n\n registerConfig(config: Array): void {\n config.forEach(appConfig => {\n if (appConfig.run) {\n AppRegistry.registerRunnable(appConfig.appKey, appConfig.run);\n } else {\n invariant(\n appConfig.component != null,\n 'AppRegistry.registerConfig(...): Every config is expected to set ' +\n 'either `run` or `component`, but `%s` has neither.',\n appConfig.appKey,\n );\n AppRegistry.registerComponent(\n appConfig.appKey,\n appConfig.component,\n appConfig.section,\n );\n }\n });\n },\n\n /**\n * Registers an app's root component.\n *\n * See https://reactnative.dev/docs/appregistry.html#registercomponent\n */\n registerComponent(\n appKey: string,\n componentProvider: ComponentProvider,\n section?: boolean,\n ): string {\n let scopedPerformanceLogger = createPerformanceLogger();\n runnables[appKey] = {\n componentProvider,\n run: (appParameters, displayMode) => {\n renderApplication(\n componentProviderInstrumentationHook(\n componentProvider,\n scopedPerformanceLogger,\n ),\n appParameters.initialProps,\n appParameters.rootTag,\n wrapperComponentProvider && wrapperComponentProvider(appParameters),\n appParameters.fabric,\n showArchitectureIndicator,\n scopedPerformanceLogger,\n appKey === 'LogBox',\n appKey,\n coerceDisplayMode(displayMode),\n appParameters.concurrentRoot,\n );\n },\n };\n if (section) {\n sections[appKey] = runnables[appKey];\n }\n return appKey;\n },\n\n registerRunnable(appKey: string, run: Function): string {\n runnables[appKey] = {run};\n return appKey;\n },\n\n registerSection(appKey: string, component: ComponentProvider): void {\n AppRegistry.registerComponent(appKey, component, true);\n },\n\n getAppKeys(): Array {\n return Object.keys(runnables);\n },\n\n getSectionKeys(): Array {\n return Object.keys(sections);\n },\n\n getSections(): Runnables {\n return {\n ...sections,\n };\n },\n\n getRunnable(appKey: string): ?Runnable {\n return runnables[appKey];\n },\n\n getRegistry(): Registry {\n return {\n sections: AppRegistry.getSectionKeys(),\n runnables: {...runnables},\n };\n },\n\n setComponentProviderInstrumentationHook(\n hook: ComponentProviderInstrumentationHook,\n ) {\n componentProviderInstrumentationHook = hook;\n },\n\n /**\n * Loads the JavaScript bundle and runs the app.\n *\n * See https://reactnative.dev/docs/appregistry.html#runapplication\n */\n runApplication(\n appKey: string,\n appParameters: any,\n displayMode?: number,\n ): void {\n if (appKey !== 'LogBox') {\n const msg =\n 'Running \"' + appKey + '\" with ' + JSON.stringify(appParameters);\n infoLog(msg);\n BugReporting.addSource(\n 'AppRegistry.runApplication' + runCount++,\n () => msg,\n );\n }\n invariant(\n runnables[appKey] && runnables[appKey].run,\n `\"${appKey}\" has not been registered. This can happen if:\\n` +\n '* Metro (the local dev server) is run from the wrong folder. ' +\n 'Check if Metro is running, stop it and restart it in the current project.\\n' +\n \"* A module failed to load due to an error and `AppRegistry.registerComponent` wasn't called.\",\n );\n\n SceneTracker.setActiveScene({name: appKey});\n runnables[appKey].run(appParameters, displayMode);\n },\n\n /**\n * Update initial props for a surface that's already rendered\n */\n setSurfaceProps(\n appKey: string,\n appParameters: any,\n displayMode?: number,\n ): void {\n if (appKey !== 'LogBox') {\n const msg =\n 'Updating props for Surface \"' +\n appKey +\n '\" with ' +\n JSON.stringify(appParameters);\n infoLog(msg);\n BugReporting.addSource(\n 'AppRegistry.setSurfaceProps' + runCount++,\n () => msg,\n );\n }\n invariant(\n runnables[appKey] && runnables[appKey].run,\n `\"${appKey}\" has not been registered. This can happen if:\\n` +\n '* Metro (the local dev server) is run from the wrong folder. ' +\n 'Check if Metro is running, stop it and restart it in the current project.\\n' +\n \"* A module failed to load due to an error and `AppRegistry.registerComponent` wasn't called.\",\n );\n\n runnables[appKey].run(appParameters, displayMode);\n },\n\n /**\n * Stops an application when a view should be destroyed.\n *\n * See https://reactnative.dev/docs/appregistry.html#unmountapplicationcomponentatroottag\n */\n unmountApplicationComponentAtRootTag(rootTag: RootTag): void {\n // NOTE: RootTag type\n // $FlowFixMe[incompatible-call] RootTag: RootTag is incompatible with number, needs an updated synced version of the ReactNativeTypes.js file\n ReactNative.unmountComponentAtNodeAndRemoveContainer(rootTag);\n },\n\n /**\n * Register a headless task. A headless task is a bit of code that runs without a UI.\n *\n * See https://reactnative.dev/docs/appregistry.html#registerheadlesstask\n */\n registerHeadlessTask(taskKey: string, taskProvider: TaskProvider): void {\n // $FlowFixMe[object-this-reference]\n this.registerCancellableHeadlessTask(taskKey, taskProvider, () => () => {\n /* Cancel is no-op */\n });\n },\n\n /**\n * Register a cancellable headless task. A headless task is a bit of code that runs without a UI.\n *\n * See https://reactnative.dev/docs/appregistry.html#registercancellableheadlesstask\n */\n registerCancellableHeadlessTask(\n taskKey: string,\n taskProvider: TaskProvider,\n taskCancelProvider: TaskCancelProvider,\n ): void {\n if (taskProviders.has(taskKey)) {\n console.warn(\n `registerHeadlessTask or registerCancellableHeadlessTask called multiple times for same key '${taskKey}'`,\n );\n }\n taskProviders.set(taskKey, taskProvider);\n taskCancelProviders.set(taskKey, taskCancelProvider);\n },\n\n /**\n * Only called from native code. Starts a headless task.\n *\n * See https://reactnative.dev/docs/appregistry.html#startheadlesstask\n */\n startHeadlessTask(taskId: number, taskKey: string, data: any): void {\n const taskProvider = taskProviders.get(taskKey);\n if (!taskProvider) {\n console.warn(`No task registered for key ${taskKey}`);\n if (NativeHeadlessJsTaskSupport) {\n NativeHeadlessJsTaskSupport.notifyTaskFinished(taskId);\n }\n return;\n }\n taskProvider()(data)\n .then(() => {\n if (NativeHeadlessJsTaskSupport) {\n NativeHeadlessJsTaskSupport.notifyTaskFinished(taskId);\n }\n })\n .catch(reason => {\n console.error(reason);\n\n if (\n NativeHeadlessJsTaskSupport &&\n reason instanceof HeadlessJsTaskError\n ) {\n NativeHeadlessJsTaskSupport.notifyTaskRetry(taskId).then(\n retryPosted => {\n if (!retryPosted) {\n NativeHeadlessJsTaskSupport.notifyTaskFinished(taskId);\n }\n },\n );\n }\n });\n },\n\n /**\n * Only called from native code. Cancels a headless task.\n *\n * See https://reactnative.dev/docs/appregistry.html#cancelheadlesstask\n */\n cancelHeadlessTask(taskId: number, taskKey: string): void {\n const taskCancelProvider = taskCancelProviders.get(taskKey);\n if (!taskCancelProvider) {\n throw new Error(`No task canceller registered for key '${taskKey}'`);\n }\n taskCancelProvider()();\n },\n};\n\nBatchedBridge.registerCallableModule('AppRegistry', AppRegistry);\n\nif (__DEV__) {\n const LogBoxInspector = require('../LogBox/LogBoxInspectorContainer').default;\n AppRegistry.registerComponent('LogBox', () => LogBoxInspector);\n} else {\n AppRegistry.registerComponent(\n 'LogBox',\n () =>\n function NoOp() {\n return null;\n },\n );\n}\n\nmodule.exports = AppRegistry;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nexport opaque type DisplayModeType = number;\n\n/** DisplayMode should be in sync with the method displayModeToInt from\n * react/renderer/uimanager/primitives.h. */\nconst DisplayMode: {[string]: DisplayModeType} = Object.freeze({\n VISIBLE: 1,\n SUSPENDED: 2,\n HIDDEN: 3,\n});\n\nexport function coerceDisplayMode(value: ?number): DisplayModeType {\n switch (value) {\n case DisplayMode.SUSPENDED:\n return DisplayMode.SUSPENDED;\n case DisplayMode.HIDDEN:\n return DisplayMode.HIDDEN;\n default:\n return DisplayMode.VISIBLE;\n }\n}\n\nexport default DisplayMode;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +notifyTaskFinished: (taskId: number) => void;\n +notifyTaskRetry: (taskId: number) => Promise;\n}\n\nexport default (TurboModuleRegistry.get('HeadlessJsTaskSupport'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nexport default class HeadlessJsTaskError extends Error {}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\nimport NativeRedBox from '../NativeModules/specs/NativeRedBox';\nimport {type EventSubscription} from '../vendor/emitter/EventEmitter';\nimport NativeBugReporting from './NativeBugReporting';\n\ntype ExtraData = {[key: string]: string, ...};\ntype SourceCallback = () => string;\ntype DebugData = {\n extras: ExtraData,\n files: ExtraData,\n ...\n};\n\nfunction defaultExtras() {\n BugReporting.addFileSource('react_hierarchy.txt', () =>\n require('./dumpReactTree')(),\n );\n}\n\n/**\n * A simple class for collecting bug report data. Components can add sources that will be queried when a bug report\n * is created via `collectExtraData`. For example, a list component might add a source that provides the list of rows\n * that are currently visible on screen. Components should also remember to call `remove()` on the object that is\n * returned by `addSource` when they are unmounted.\n */\nclass BugReporting {\n static _extraSources: Map = new Map();\n static _fileSources: Map = new Map();\n static _subscription: ?EventSubscription = null;\n static _redboxSubscription: ?EventSubscription = null;\n\n static _maybeInit() {\n if (!BugReporting._subscription) {\n BugReporting._subscription = RCTDeviceEventEmitter.addListener(\n 'collectBugExtraData',\n // $FlowFixMe[method-unbinding]\n BugReporting.collectExtraData,\n null,\n );\n defaultExtras();\n }\n\n if (!BugReporting._redboxSubscription) {\n BugReporting._redboxSubscription = RCTDeviceEventEmitter.addListener(\n 'collectRedBoxExtraData',\n // $FlowFixMe[method-unbinding]\n BugReporting.collectExtraData,\n null,\n );\n }\n }\n\n /**\n * Maps a string key to a simple callback that should return a string payload to be attached\n * to a bug report. Source callbacks are called when `collectExtraData` is called.\n *\n * Returns an object to remove the source when the component unmounts.\n *\n * Conflicts trample with a warning.\n */\n static addSource(\n key: string,\n callback: SourceCallback,\n ): {remove: () => void, ...} {\n return this._addSource(key, callback, BugReporting._extraSources);\n }\n\n /**\n * Maps a string key to a simple callback that should return a string payload to be attached\n * to a bug report. Source callbacks are called when `collectExtraData` is called.\n *\n * Returns an object to remove the source when the component unmounts.\n *\n * Conflicts trample with a warning.\n */\n static addFileSource(\n key: string,\n callback: SourceCallback,\n ): {remove: () => void, ...} {\n return this._addSource(key, callback, BugReporting._fileSources);\n }\n\n static _addSource(\n key: string,\n callback: SourceCallback,\n source: Map,\n ): {remove: () => void, ...} {\n BugReporting._maybeInit();\n if (source.has(key)) {\n console.warn(\n `BugReporting.add* called multiple times for same key '${key}'`,\n );\n }\n source.set(key, callback);\n return {\n remove: () => {\n source.delete(key);\n },\n };\n }\n\n /**\n * This can be called from a native bug reporting flow, or from JS code.\n *\n * If available, this will call `NativeModules.BugReporting.setExtraData(extraData)`\n * after collecting `extraData`.\n */\n static collectExtraData(): DebugData {\n const extraData: ExtraData = {};\n for (const [key, callback] of BugReporting._extraSources) {\n extraData[key] = callback();\n }\n const fileData: ExtraData = {};\n for (const [key, callback] of BugReporting._fileSources) {\n fileData[key] = callback();\n }\n\n if (NativeBugReporting != null && NativeBugReporting.setExtraData != null) {\n NativeBugReporting.setExtraData(extraData, fileData);\n }\n\n if (NativeRedBox != null && NativeRedBox.setExtraData != null) {\n NativeRedBox.setExtraData(extraData, 'From BugReporting.js');\n }\n\n return {extras: extraData, files: fileData};\n }\n}\n\nmodule.exports = BugReporting;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +setExtraData: (extraData: Object, forIdentifier: string) => void;\n +dismiss: () => void;\n}\n\nexport default (TurboModuleRegistry.get('RedBox'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +startReportAProblemFlow: () => void;\n +setExtraData: (extraData: Object, extraFiles: Object) => void;\n +setCategoryID: (categoryID: string) => void;\n}\n\nexport default (TurboModuleRegistry.get('BugReporting'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\n/*\nconst getReactData = require('getReactData');\n\nconst INDENTATION_SIZE = 2;\nconst MAX_DEPTH = 2;\nconst MAX_STRING_LENGTH = 50;\n*/\n\n/**\n * Dump all React Native root views and their content. This function tries\n * it best to get the content but ultimately relies on implementation details\n * of React and will fail in future versions.\n */\nfunction dumpReactTree(): string {\n try {\n return getReactTree();\n } catch (e) {\n return 'Failed to dump react tree: ' + e;\n }\n}\n\nfunction getReactTree() {\n // TODO(sema): Reenable tree dumps using the Fiber tree structure. #15945684\n return (\n 'React tree dumps have been temporarily disabled while React is ' +\n 'upgraded to Fiber.'\n );\n /*\n let output = '';\n const rootIds = Object.getOwnPropertyNames(ReactNativeMount._instancesByContainerID);\n for (const rootId of rootIds) {\n const instance = ReactNativeMount._instancesByContainerID[rootId];\n output += `============ Root ID: ${rootId} ============\\n`;\n output += dumpNode(instance, 0);\n output += `============ End root ID: ${rootId} ============\\n`;\n }\n return output;\n*/\n}\n\n/*\nfunction dumpNode(node: Object, indentation: number) {\n const data = getReactData(node);\n if (data.nodeType === 'Text') {\n return indent(indentation) + data.text + '\\n';\n } else if (data.nodeType === 'Empty') {\n return '';\n }\n let output = indent(indentation) + `<${data.name}`;\n if (data.nodeType === 'Composite') {\n for (const propName of Object.getOwnPropertyNames(data.props || {})) {\n if (isNormalProp(propName)) {\n try {\n const value = convertValue(data.props[propName]);\n if (value) {\n output += ` ${propName}=${value}`;\n }\n } catch (e) {\n const message = `[Failed to get property: ${e}]`;\n output += ` ${propName}=${message}`;\n }\n }\n }\n }\n let childOutput = '';\n for (const child of data.children || []) {\n childOutput += dumpNode(child, indentation + 1);\n }\n\n if (childOutput) {\n output += '>\\n' + childOutput + indent(indentation) + `\\n`;\n } else {\n output += ' />\\n';\n }\n\n return output;\n}\n\nfunction isNormalProp(name: string): boolean {\n switch (name) {\n case 'children':\n case 'key':\n case 'ref':\n return false;\n default:\n return true;\n }\n}\n\nfunction convertObject(object: Object, depth: number) {\n if (depth >= MAX_DEPTH) {\n return '[...omitted]';\n }\n let output = '{';\n let first = true;\n for (const key of Object.getOwnPropertyNames(object)) {\n if (!first) {\n output += ', ';\n }\n output += `${key}: ${convertValue(object[key], depth + 1)}`;\n first = false;\n }\n return output + '}';\n}\n\nfunction convertValue(value, depth = 0): ?string {\n if (!value) {\n return null;\n }\n\n switch (typeof value) {\n case 'string':\n return JSON.stringify(possiblyEllipsis(value).replace('\\n', '\\\\n'));\n case 'boolean':\n case 'number':\n return JSON.stringify(value);\n case 'function':\n return '[function]';\n case 'object':\n return convertObject(value, depth);\n default:\n return null;\n }\n}\n\nfunction possiblyEllipsis(value: string) {\n if (value.length > MAX_STRING_LENGTH) {\n return value.slice(0, MAX_STRING_LENGTH) + '...';\n } else {\n return value;\n }\n}\n\nfunction indent(size: number) {\n return ' '.repeat(size * INDENTATION_SIZE);\n}\n*/\n\nmodule.exports = dumpReactTree;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nexport type Scene = {name: string, ...};\n\nlet _listeners: Array<(scene: Scene) => void> = [];\n\nlet _activeScene = {name: 'default'};\n\nconst SceneTracker = {\n setActiveScene(scene: Scene) {\n _activeScene = scene;\n _listeners.forEach(listener => listener(_activeScene));\n },\n\n getActiveScene(): Scene {\n return _activeScene;\n },\n\n addActiveSceneChangedListener(\n callback: (scene: Scene) => void,\n ): {remove: () => void, ...} {\n _listeners.push(callback);\n return {\n remove: () => {\n _listeners = _listeners.filter(listener => callback !== listener);\n },\n };\n },\n};\n\nmodule.exports = SceneTracker;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nconst AppContainer = require('./AppContainer');\nimport GlobalPerformanceLogger from '../Utilities/GlobalPerformanceLogger';\nimport type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';\nimport PerformanceLoggerContext from '../Utilities/PerformanceLoggerContext';\nimport type {DisplayModeType} from './DisplayMode';\nimport getCachedComponentWithDebugName from './getCachedComponentWithDebugName';\nconst React = require('react');\n\nconst invariant = require('invariant');\n\n// require BackHandler so it sets the default handler that exits the app if no listeners respond\nrequire('../Utilities/BackHandler');\n\nfunction renderApplication(\n RootComponent: React.ComponentType,\n initialProps: Props,\n rootTag: any,\n WrapperComponent?: ?React.ComponentType,\n fabric?: boolean,\n showArchitectureIndicator?: boolean,\n scopedPerformanceLogger?: IPerformanceLogger,\n isLogBox?: boolean,\n debugName?: string,\n displayMode?: ?DisplayModeType,\n useConcurrentRoot?: boolean,\n) {\n invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag);\n\n const performanceLogger = scopedPerformanceLogger ?? GlobalPerformanceLogger;\n\n let renderable = (\n \n \n \n \n \n );\n\n if (__DEV__ && debugName) {\n const RootComponentWithMeaningfulName = getCachedComponentWithDebugName(\n `${debugName}(RootComponent)`,\n );\n renderable = (\n \n {renderable}\n \n );\n }\n\n performanceLogger.startTimespan('renderApplication_React_render');\n performanceLogger.setExtra('usedReactFabric', fabric ? '1' : '0');\n if (fabric) {\n require('../Renderer/shims/ReactFabric').render(\n renderable,\n rootTag,\n null,\n useConcurrentRoot,\n );\n } else {\n require('../Renderer/shims/ReactNative').render(renderable, rootTag);\n }\n performanceLogger.stopTimespan('renderApplication_React_render');\n}\n\nmodule.exports = renderApplication;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport * as React from 'react';\nimport {useContext} from 'react';\nimport GlobalPerformanceLogger from './GlobalPerformanceLogger';\nimport type {IPerformanceLogger} from './createPerformanceLogger';\n\n/**\n * This is a React Context that provides a scoped instance of IPerformanceLogger.\n * We wrap every with a Provider for this context so the logger\n * should be available in every component.\n * See React docs about using Context: https://reactjs.org/docs/context.html\n */\nconst PerformanceLoggerContext: React.Context = React.createContext(\n GlobalPerformanceLogger,\n);\nif (__DEV__) {\n PerformanceLoggerContext.displayName = 'PerformanceLoggerContext';\n}\n\nexport function usePerformanceLogger(): IPerformanceLogger {\n return useContext(PerformanceLoggerContext);\n}\n\nexport default PerformanceLoggerContext;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {AbstractComponent, Node} from 'react';\n\ntype NoopComponent = AbstractComponent<{children: Node}>;\n\nconst cache: Map<\n string, // displayName\n NoopComponent, // ComponentWithDisplayName\n> = new Map();\n\nexport default function getCachedComponentWithDisplayName(\n displayName: string,\n): NoopComponent {\n let ComponentWithDisplayName = cache.get(displayName);\n\n if (!ComponentWithDisplayName) {\n ComponentWithDisplayName = ({children}) => children;\n ComponentWithDisplayName.displayName = displayName;\n cache.set(displayName, ComponentWithDisplayName);\n }\n\n return ComponentWithDisplayName;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nmodule.exports = require('../Components/UnimplementedViews/UnimplementedView');\n\ntype BackPressEventName = 'backPress' | 'hardwareBackPress';\n\nfunction emptyFunction(): void {}\n\ntype TBackHandler = {|\n +exitApp: () => void,\n +addEventListener: (\n eventName: BackPressEventName,\n handler: () => ?boolean,\n ) => {remove: () => void, ...},\n +removeEventListener: (\n eventName: BackPressEventName,\n handler: () => ?boolean,\n ) => void,\n|};\n\nlet BackHandler: TBackHandler = {\n exitApp: emptyFunction,\n addEventListener(_eventName: BackPressEventName, _handler: Function) {\n return {\n remove: emptyFunction,\n };\n },\n removeEventListener(_eventName: BackPressEventName, _handler: Function) {},\n};\n\nmodule.exports = BackHandler;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n * @generated SignedSource<<40f01afd3b6d95a617ac8e48748a2a76>>\n *\n * This file was sync'd from the facebook/react repository.\n */\n\n'use strict';\n\nimport {BatchedBridge} from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface';\n\nimport type {ReactFabricType} from './ReactNativeTypes';\n\nlet ReactFabric;\n\nif (__DEV__) {\n ReactFabric = require('../implementations/ReactFabric-dev');\n} else {\n ReactFabric = require('../implementations/ReactFabric-prod');\n}\n\nif (global.RN$Bridgeless) {\n global.RN$stopSurface = ReactFabric.stopSurface;\n} else {\n BatchedBridge.registerCallableModule('ReactFabric', ReactFabric);\n}\n\nmodule.exports = (ReactFabric: ReactFabricType);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @noflow\n * @nolint\n * @providesModule ReactFabric-prod\n * @preventMunge\n * @generated SignedSource<<5749c2b90feb6b0a0271a28ccf62b138>>\n */\n\n\"use strict\";\nrequire(\"react-native/Libraries/ReactPrivate/ReactNativePrivateInitializeCore\");\nvar ReactNativePrivateInterface = require(\"react-native/Libraries/ReactPrivate/ReactNativePrivateInterface\"),\n React = require(\"react\"),\n Scheduler = require(\"scheduler\");\nfunction invokeGuardedCallbackImpl(name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n}\nvar hasError = !1,\n caughtError = null,\n hasRethrowError = !1,\n rethrowError = null,\n reporter = {\n onError: function(error) {\n hasError = !0;\n caughtError = error;\n }\n };\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = !1;\n caughtError = null;\n invokeGuardedCallbackImpl.apply(reporter, arguments);\n}\nfunction invokeGuardedCallbackAndCatchFirstError(\n name,\n func,\n context,\n a,\n b,\n c,\n d,\n e,\n f\n) {\n invokeGuardedCallback.apply(this, arguments);\n if (hasError) {\n if (hasError) {\n var error = caughtError;\n hasError = !1;\n caughtError = null;\n } else\n throw Error(\n \"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\"\n );\n hasRethrowError || ((hasRethrowError = !0), (rethrowError = error));\n }\n}\nvar isArrayImpl = Array.isArray,\n getFiberCurrentPropsFromNode = null,\n getInstanceFromNode = null,\n getNodeFromInstance = null;\nfunction executeDispatch(event, listener, inst) {\n var type = event.type || \"unknown-event\";\n event.currentTarget = getNodeFromInstance(inst);\n invokeGuardedCallbackAndCatchFirstError(type, listener, void 0, event);\n event.currentTarget = null;\n}\nfunction executeDirectDispatch(event) {\n var dispatchListener = event._dispatchListeners,\n dispatchInstance = event._dispatchInstances;\n if (isArrayImpl(dispatchListener))\n throw Error(\"executeDirectDispatch(...): Invalid `event`.\");\n event.currentTarget = dispatchListener\n ? getNodeFromInstance(dispatchInstance)\n : null;\n dispatchListener = dispatchListener ? dispatchListener(event) : null;\n event.currentTarget = null;\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n return dispatchListener;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction SyntheticEvent(\n dispatchConfig,\n targetInst,\n nativeEvent,\n nativeEventTarget\n) {\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n this._dispatchInstances = this._dispatchListeners = null;\n dispatchConfig = this.constructor.Interface;\n for (var propName in dispatchConfig)\n dispatchConfig.hasOwnProperty(propName) &&\n ((targetInst = dispatchConfig[propName])\n ? (this[propName] = targetInst(nativeEvent))\n : \"target\" === propName\n ? (this.target = nativeEventTarget)\n : (this[propName] = nativeEvent[propName]));\n this.isDefaultPrevented = (null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue)\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n}\nObject.assign(SyntheticEvent.prototype, {\n preventDefault: function() {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function() {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble && (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function() {\n this.isPersistent = functionThatReturnsTrue;\n },\n isPersistent: functionThatReturnsFalse,\n destructor: function() {\n var Interface = this.constructor.Interface,\n propName;\n for (propName in Interface) this[propName] = null;\n this.nativeEvent = this._targetInst = this.dispatchConfig = null;\n this.isPropagationStopped = this.isDefaultPrevented = functionThatReturnsFalse;\n this._dispatchInstances = this._dispatchListeners = null;\n }\n});\nSyntheticEvent.Interface = {\n type: null,\n target: null,\n currentTarget: function() {\n return null;\n },\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function(event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\nSyntheticEvent.extend = function(Interface) {\n function E() {}\n function Class() {\n return Super.apply(this, arguments);\n }\n var Super = this;\n E.prototype = Super.prototype;\n var prototype = new E();\n Object.assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n Class.Interface = Object.assign({}, Super.Interface, Interface);\n Class.extend = Super.extend;\n addEventPoolingTo(Class);\n return Class;\n};\naddEventPoolingTo(SyntheticEvent);\nfunction createOrGetPooledEvent(\n dispatchConfig,\n targetInst,\n nativeEvent,\n nativeInst\n) {\n if (this.eventPool.length) {\n var instance = this.eventPool.pop();\n this.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);\n return instance;\n }\n return new this(dispatchConfig, targetInst, nativeEvent, nativeInst);\n}\nfunction releasePooledEvent(event) {\n if (!(event instanceof this))\n throw Error(\n \"Trying to release an event instance into a pool of a different type.\"\n );\n event.destructor();\n 10 > this.eventPool.length && this.eventPool.push(event);\n}\nfunction addEventPoolingTo(EventConstructor) {\n EventConstructor.getPooled = createOrGetPooledEvent;\n EventConstructor.eventPool = [];\n EventConstructor.release = releasePooledEvent;\n}\nvar ResponderSyntheticEvent = SyntheticEvent.extend({\n touchHistory: function() {\n return null;\n }\n});\nfunction isStartish(topLevelType) {\n return \"topTouchStart\" === topLevelType;\n}\nfunction isMoveish(topLevelType) {\n return \"topTouchMove\" === topLevelType;\n}\nvar startDependencies = [\"topTouchStart\"],\n moveDependencies = [\"topTouchMove\"],\n endDependencies = [\"topTouchCancel\", \"topTouchEnd\"],\n touchBank = [],\n touchHistory = {\n touchBank: touchBank,\n numberActiveTouches: 0,\n indexOfSingleActiveTouch: -1,\n mostRecentTimeStamp: 0\n };\nfunction timestampForTouch(touch) {\n return touch.timeStamp || touch.timestamp;\n}\nfunction getTouchIdentifier(_ref) {\n _ref = _ref.identifier;\n if (null == _ref) throw Error(\"Touch object is missing identifier.\");\n return _ref;\n}\nfunction recordTouchStart(touch) {\n var identifier = getTouchIdentifier(touch),\n touchRecord = touchBank[identifier];\n touchRecord\n ? ((touchRecord.touchActive = !0),\n (touchRecord.startPageX = touch.pageX),\n (touchRecord.startPageY = touch.pageY),\n (touchRecord.startTimeStamp = timestampForTouch(touch)),\n (touchRecord.currentPageX = touch.pageX),\n (touchRecord.currentPageY = touch.pageY),\n (touchRecord.currentTimeStamp = timestampForTouch(touch)),\n (touchRecord.previousPageX = touch.pageX),\n (touchRecord.previousPageY = touch.pageY),\n (touchRecord.previousTimeStamp = timestampForTouch(touch)))\n : ((touchRecord = {\n touchActive: !0,\n startPageX: touch.pageX,\n startPageY: touch.pageY,\n startTimeStamp: timestampForTouch(touch),\n currentPageX: touch.pageX,\n currentPageY: touch.pageY,\n currentTimeStamp: timestampForTouch(touch),\n previousPageX: touch.pageX,\n previousPageY: touch.pageY,\n previousTimeStamp: timestampForTouch(touch)\n }),\n (touchBank[identifier] = touchRecord));\n touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n}\nfunction recordTouchMove(touch) {\n var touchRecord = touchBank[getTouchIdentifier(touch)];\n touchRecord &&\n ((touchRecord.touchActive = !0),\n (touchRecord.previousPageX = touchRecord.currentPageX),\n (touchRecord.previousPageY = touchRecord.currentPageY),\n (touchRecord.previousTimeStamp = touchRecord.currentTimeStamp),\n (touchRecord.currentPageX = touch.pageX),\n (touchRecord.currentPageY = touch.pageY),\n (touchRecord.currentTimeStamp = timestampForTouch(touch)),\n (touchHistory.mostRecentTimeStamp = timestampForTouch(touch)));\n}\nfunction recordTouchEnd(touch) {\n var touchRecord = touchBank[getTouchIdentifier(touch)];\n touchRecord &&\n ((touchRecord.touchActive = !1),\n (touchRecord.previousPageX = touchRecord.currentPageX),\n (touchRecord.previousPageY = touchRecord.currentPageY),\n (touchRecord.previousTimeStamp = touchRecord.currentTimeStamp),\n (touchRecord.currentPageX = touch.pageX),\n (touchRecord.currentPageY = touch.pageY),\n (touchRecord.currentTimeStamp = timestampForTouch(touch)),\n (touchHistory.mostRecentTimeStamp = timestampForTouch(touch)));\n}\nvar instrumentationCallback,\n ResponderTouchHistoryStore = {\n instrument: function(callback) {\n instrumentationCallback = callback;\n },\n recordTouchTrack: function(topLevelType, nativeEvent) {\n null != instrumentationCallback &&\n instrumentationCallback(topLevelType, nativeEvent);\n if (isMoveish(topLevelType))\n nativeEvent.changedTouches.forEach(recordTouchMove);\n else if (isStartish(topLevelType))\n nativeEvent.changedTouches.forEach(recordTouchStart),\n (touchHistory.numberActiveTouches = nativeEvent.touches.length),\n 1 === touchHistory.numberActiveTouches &&\n (touchHistory.indexOfSingleActiveTouch =\n nativeEvent.touches[0].identifier);\n else if (\n \"topTouchEnd\" === topLevelType ||\n \"topTouchCancel\" === topLevelType\n )\n if (\n (nativeEvent.changedTouches.forEach(recordTouchEnd),\n (touchHistory.numberActiveTouches = nativeEvent.touches.length),\n 1 === touchHistory.numberActiveTouches)\n )\n for (\n topLevelType = 0;\n topLevelType < touchBank.length;\n topLevelType++\n )\n if (\n ((nativeEvent = touchBank[topLevelType]),\n null != nativeEvent && nativeEvent.touchActive)\n ) {\n touchHistory.indexOfSingleActiveTouch = topLevelType;\n break;\n }\n },\n touchHistory: touchHistory\n };\nfunction accumulate(current, next) {\n if (null == next)\n throw Error(\n \"accumulate(...): Accumulated items must not be null or undefined.\"\n );\n return null == current\n ? next\n : isArrayImpl(current)\n ? current.concat(next)\n : isArrayImpl(next)\n ? [current].concat(next)\n : [current, next];\n}\nfunction accumulateInto(current, next) {\n if (null == next)\n throw Error(\n \"accumulateInto(...): Accumulated items must not be null or undefined.\"\n );\n if (null == current) return next;\n if (isArrayImpl(current)) {\n if (isArrayImpl(next)) return current.push.apply(current, next), current;\n current.push(next);\n return current;\n }\n return isArrayImpl(next) ? [current].concat(next) : [current, next];\n}\nfunction forEachAccumulated(arr, cb, scope) {\n Array.isArray(arr) ? arr.forEach(cb, scope) : arr && cb.call(scope, arr);\n}\nvar responderInst = null,\n trackedTouchCount = 0;\nfunction changeResponder(nextResponderInst, blockHostResponder) {\n var oldResponderInst = responderInst;\n responderInst = nextResponderInst;\n if (null !== ResponderEventPlugin.GlobalResponderHandler)\n ResponderEventPlugin.GlobalResponderHandler.onChange(\n oldResponderInst,\n nextResponderInst,\n blockHostResponder\n );\n}\nvar eventTypes = {\n startShouldSetResponder: {\n phasedRegistrationNames: {\n bubbled: \"onStartShouldSetResponder\",\n captured: \"onStartShouldSetResponderCapture\"\n },\n dependencies: startDependencies\n },\n scrollShouldSetResponder: {\n phasedRegistrationNames: {\n bubbled: \"onScrollShouldSetResponder\",\n captured: \"onScrollShouldSetResponderCapture\"\n },\n dependencies: [\"topScroll\"]\n },\n selectionChangeShouldSetResponder: {\n phasedRegistrationNames: {\n bubbled: \"onSelectionChangeShouldSetResponder\",\n captured: \"onSelectionChangeShouldSetResponderCapture\"\n },\n dependencies: [\"topSelectionChange\"]\n },\n moveShouldSetResponder: {\n phasedRegistrationNames: {\n bubbled: \"onMoveShouldSetResponder\",\n captured: \"onMoveShouldSetResponderCapture\"\n },\n dependencies: moveDependencies\n },\n responderStart: {\n registrationName: \"onResponderStart\",\n dependencies: startDependencies\n },\n responderMove: {\n registrationName: \"onResponderMove\",\n dependencies: moveDependencies\n },\n responderEnd: {\n registrationName: \"onResponderEnd\",\n dependencies: endDependencies\n },\n responderRelease: {\n registrationName: \"onResponderRelease\",\n dependencies: endDependencies\n },\n responderTerminationRequest: {\n registrationName: \"onResponderTerminationRequest\",\n dependencies: []\n },\n responderGrant: { registrationName: \"onResponderGrant\", dependencies: [] },\n responderReject: { registrationName: \"onResponderReject\", dependencies: [] },\n responderTerminate: {\n registrationName: \"onResponderTerminate\",\n dependencies: []\n }\n};\nfunction getParent(inst) {\n do inst = inst.return;\n while (inst && 5 !== inst.tag);\n return inst ? inst : null;\n}\nfunction traverseTwoPhase(inst, fn, arg) {\n for (var path = []; inst; ) path.push(inst), (inst = getParent(inst));\n for (inst = path.length; 0 < inst--; ) fn(path[inst], \"captured\", arg);\n for (inst = 0; inst < path.length; inst++) fn(path[inst], \"bubbled\", arg);\n}\nfunction getListener(inst, registrationName) {\n inst = inst.stateNode;\n if (null === inst) return null;\n inst = getFiberCurrentPropsFromNode(inst);\n if (null === inst) return null;\n if ((inst = inst[registrationName]) && \"function\" !== typeof inst)\n throw Error(\n \"Expected `\" +\n registrationName +\n \"` listener to be a function, instead got a value of `\" +\n typeof inst +\n \"` type.\"\n );\n return inst;\n}\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n if (\n (phase = getListener(\n inst,\n event.dispatchConfig.phasedRegistrationNames[phase]\n ))\n )\n (event._dispatchListeners = accumulateInto(\n event._dispatchListeners,\n phase\n )),\n (event._dispatchInstances = accumulateInto(\n event._dispatchInstances,\n inst\n ));\n}\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n var inst = event._targetInst;\n if (inst && event && event.dispatchConfig.registrationName) {\n var listener = getListener(inst, event.dispatchConfig.registrationName);\n listener &&\n ((event._dispatchListeners = accumulateInto(\n event._dispatchListeners,\n listener\n )),\n (event._dispatchInstances = accumulateInto(\n event._dispatchInstances,\n inst\n )));\n }\n }\n}\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n var targetInst = event._targetInst;\n targetInst = targetInst ? getParent(targetInst) : null;\n traverseTwoPhase(targetInst, accumulateDirectionalDispatches, event);\n }\n}\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n event &&\n event.dispatchConfig.phasedRegistrationNames &&\n traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n}\nvar ResponderEventPlugin = {\n _getResponder: function() {\n return responderInst;\n },\n eventTypes: eventTypes,\n extractEvents: function(\n topLevelType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n if (isStartish(topLevelType)) trackedTouchCount += 1;\n else if (\n \"topTouchEnd\" === topLevelType ||\n \"topTouchCancel\" === topLevelType\n )\n if (0 <= trackedTouchCount) --trackedTouchCount;\n else return null;\n ResponderTouchHistoryStore.recordTouchTrack(topLevelType, nativeEvent);\n if (\n targetInst &&\n ((\"topScroll\" === topLevelType && !nativeEvent.responderIgnoreScroll) ||\n (0 < trackedTouchCount && \"topSelectionChange\" === topLevelType) ||\n isStartish(topLevelType) ||\n isMoveish(topLevelType))\n ) {\n var shouldSetEventType = isStartish(topLevelType)\n ? eventTypes.startShouldSetResponder\n : isMoveish(topLevelType)\n ? eventTypes.moveShouldSetResponder\n : \"topSelectionChange\" === topLevelType\n ? eventTypes.selectionChangeShouldSetResponder\n : eventTypes.scrollShouldSetResponder;\n if (responderInst)\n b: {\n var JSCompiler_temp = responderInst;\n for (\n var depthA = 0, tempA = JSCompiler_temp;\n tempA;\n tempA = getParent(tempA)\n )\n depthA++;\n tempA = 0;\n for (var tempB = targetInst; tempB; tempB = getParent(tempB))\n tempA++;\n for (; 0 < depthA - tempA; )\n (JSCompiler_temp = getParent(JSCompiler_temp)), depthA--;\n for (; 0 < tempA - depthA; )\n (targetInst = getParent(targetInst)), tempA--;\n for (; depthA--; ) {\n if (\n JSCompiler_temp === targetInst ||\n JSCompiler_temp === targetInst.alternate\n )\n break b;\n JSCompiler_temp = getParent(JSCompiler_temp);\n targetInst = getParent(targetInst);\n }\n JSCompiler_temp = null;\n }\n else JSCompiler_temp = targetInst;\n targetInst = JSCompiler_temp;\n JSCompiler_temp = targetInst === responderInst;\n shouldSetEventType = ResponderSyntheticEvent.getPooled(\n shouldSetEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n shouldSetEventType.touchHistory =\n ResponderTouchHistoryStore.touchHistory;\n JSCompiler_temp\n ? forEachAccumulated(\n shouldSetEventType,\n accumulateTwoPhaseDispatchesSingleSkipTarget\n )\n : forEachAccumulated(\n shouldSetEventType,\n accumulateTwoPhaseDispatchesSingle\n );\n b: {\n JSCompiler_temp = shouldSetEventType._dispatchListeners;\n targetInst = shouldSetEventType._dispatchInstances;\n if (isArrayImpl(JSCompiler_temp))\n for (\n depthA = 0;\n depthA < JSCompiler_temp.length &&\n !shouldSetEventType.isPropagationStopped();\n depthA++\n ) {\n if (\n JSCompiler_temp[depthA](shouldSetEventType, targetInst[depthA])\n ) {\n JSCompiler_temp = targetInst[depthA];\n break b;\n }\n }\n else if (\n JSCompiler_temp &&\n JSCompiler_temp(shouldSetEventType, targetInst)\n ) {\n JSCompiler_temp = targetInst;\n break b;\n }\n JSCompiler_temp = null;\n }\n shouldSetEventType._dispatchInstances = null;\n shouldSetEventType._dispatchListeners = null;\n shouldSetEventType.isPersistent() ||\n shouldSetEventType.constructor.release(shouldSetEventType);\n if (JSCompiler_temp && JSCompiler_temp !== responderInst)\n if (\n ((shouldSetEventType = ResponderSyntheticEvent.getPooled(\n eventTypes.responderGrant,\n JSCompiler_temp,\n nativeEvent,\n nativeEventTarget\n )),\n (shouldSetEventType.touchHistory =\n ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(\n shouldSetEventType,\n accumulateDirectDispatchesSingle\n ),\n (targetInst = !0 === executeDirectDispatch(shouldSetEventType)),\n responderInst)\n )\n if (\n ((depthA = ResponderSyntheticEvent.getPooled(\n eventTypes.responderTerminationRequest,\n responderInst,\n nativeEvent,\n nativeEventTarget\n )),\n (depthA.touchHistory = ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(depthA, accumulateDirectDispatchesSingle),\n (tempA =\n !depthA._dispatchListeners || executeDirectDispatch(depthA)),\n depthA.isPersistent() || depthA.constructor.release(depthA),\n tempA)\n ) {\n depthA = ResponderSyntheticEvent.getPooled(\n eventTypes.responderTerminate,\n responderInst,\n nativeEvent,\n nativeEventTarget\n );\n depthA.touchHistory = ResponderTouchHistoryStore.touchHistory;\n forEachAccumulated(depthA, accumulateDirectDispatchesSingle);\n var JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n [shouldSetEventType, depthA]\n );\n changeResponder(JSCompiler_temp, targetInst);\n } else\n (shouldSetEventType = ResponderSyntheticEvent.getPooled(\n eventTypes.responderReject,\n JSCompiler_temp,\n nativeEvent,\n nativeEventTarget\n )),\n (shouldSetEventType.touchHistory =\n ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(\n shouldSetEventType,\n accumulateDirectDispatchesSingle\n ),\n (JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n shouldSetEventType\n ));\n else\n (JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n shouldSetEventType\n )),\n changeResponder(JSCompiler_temp, targetInst);\n else JSCompiler_temp$jscomp$0 = null;\n } else JSCompiler_temp$jscomp$0 = null;\n shouldSetEventType = responderInst && isStartish(topLevelType);\n JSCompiler_temp = responderInst && isMoveish(topLevelType);\n targetInst =\n responderInst &&\n (\"topTouchEnd\" === topLevelType || \"topTouchCancel\" === topLevelType);\n if (\n (shouldSetEventType = shouldSetEventType\n ? eventTypes.responderStart\n : JSCompiler_temp\n ? eventTypes.responderMove\n : targetInst\n ? eventTypes.responderEnd\n : null)\n )\n (shouldSetEventType = ResponderSyntheticEvent.getPooled(\n shouldSetEventType,\n responderInst,\n nativeEvent,\n nativeEventTarget\n )),\n (shouldSetEventType.touchHistory =\n ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(\n shouldSetEventType,\n accumulateDirectDispatchesSingle\n ),\n (JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n shouldSetEventType\n ));\n shouldSetEventType = responderInst && \"topTouchCancel\" === topLevelType;\n if (\n (topLevelType =\n responderInst &&\n !shouldSetEventType &&\n (\"topTouchEnd\" === topLevelType || \"topTouchCancel\" === topLevelType))\n )\n a: {\n if ((topLevelType = nativeEvent.touches) && 0 !== topLevelType.length)\n for (\n JSCompiler_temp = 0;\n JSCompiler_temp < topLevelType.length;\n JSCompiler_temp++\n )\n if (\n ((targetInst = topLevelType[JSCompiler_temp].target),\n null !== targetInst &&\n void 0 !== targetInst &&\n 0 !== targetInst)\n ) {\n depthA = getInstanceFromNode(targetInst);\n b: {\n for (targetInst = responderInst; depthA; ) {\n if (\n targetInst === depthA ||\n targetInst === depthA.alternate\n ) {\n targetInst = !0;\n break b;\n }\n depthA = getParent(depthA);\n }\n targetInst = !1;\n }\n if (targetInst) {\n topLevelType = !1;\n break a;\n }\n }\n topLevelType = !0;\n }\n if (\n (topLevelType = shouldSetEventType\n ? eventTypes.responderTerminate\n : topLevelType\n ? eventTypes.responderRelease\n : null)\n )\n (nativeEvent = ResponderSyntheticEvent.getPooled(\n topLevelType,\n responderInst,\n nativeEvent,\n nativeEventTarget\n )),\n (nativeEvent.touchHistory = ResponderTouchHistoryStore.touchHistory),\n forEachAccumulated(nativeEvent, accumulateDirectDispatchesSingle),\n (JSCompiler_temp$jscomp$0 = accumulate(\n JSCompiler_temp$jscomp$0,\n nativeEvent\n )),\n changeResponder(null);\n return JSCompiler_temp$jscomp$0;\n },\n GlobalResponderHandler: null,\n injection: {\n injectGlobalResponderHandler: function(GlobalResponderHandler) {\n ResponderEventPlugin.GlobalResponderHandler = GlobalResponderHandler;\n }\n }\n },\n eventPluginOrder = null,\n namesToPlugins = {};\nfunction recomputePluginOrdering() {\n if (eventPluginOrder)\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName],\n pluginIndex = eventPluginOrder.indexOf(pluginName);\n if (!(-1 < pluginIndex))\n throw Error(\n \"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" +\n pluginName +\n \"`.\"\n );\n if (!plugins[pluginIndex]) {\n if (!pluginModule.extractEvents)\n throw Error(\n \"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" +\n pluginName +\n \"` does not.\"\n );\n plugins[pluginIndex] = pluginModule;\n pluginIndex = pluginModule.eventTypes;\n for (var eventName in pluginIndex) {\n var JSCompiler_inline_result = void 0;\n var dispatchConfig = pluginIndex[eventName],\n eventName$jscomp$0 = eventName;\n if (eventNameDispatchConfigs.hasOwnProperty(eventName$jscomp$0))\n throw Error(\n \"EventPluginRegistry: More than one plugin attempted to publish the same event name, `\" +\n eventName$jscomp$0 +\n \"`.\"\n );\n eventNameDispatchConfigs[eventName$jscomp$0] = dispatchConfig;\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (JSCompiler_inline_result in phasedRegistrationNames)\n phasedRegistrationNames.hasOwnProperty(\n JSCompiler_inline_result\n ) &&\n publishRegistrationName(\n phasedRegistrationNames[JSCompiler_inline_result],\n pluginModule,\n eventName$jscomp$0\n );\n JSCompiler_inline_result = !0;\n } else\n dispatchConfig.registrationName\n ? (publishRegistrationName(\n dispatchConfig.registrationName,\n pluginModule,\n eventName$jscomp$0\n ),\n (JSCompiler_inline_result = !0))\n : (JSCompiler_inline_result = !1);\n if (!JSCompiler_inline_result)\n throw Error(\n \"EventPluginRegistry: Failed to publish event `\" +\n eventName +\n \"` for plugin `\" +\n pluginName +\n \"`.\"\n );\n }\n }\n }\n}\nfunction publishRegistrationName(registrationName, pluginModule) {\n if (registrationNameModules[registrationName])\n throw Error(\n \"EventPluginRegistry: More than one plugin attempted to publish the same registration name, `\" +\n registrationName +\n \"`.\"\n );\n registrationNameModules[registrationName] = pluginModule;\n}\nvar plugins = [],\n eventNameDispatchConfigs = {},\n registrationNameModules = {};\nfunction getListener$1(inst, registrationName) {\n inst = inst.stateNode;\n if (null === inst) return null;\n inst = getFiberCurrentPropsFromNode(inst);\n if (null === inst) return null;\n if ((inst = inst[registrationName]) && \"function\" !== typeof inst)\n throw Error(\n \"Expected `\" +\n registrationName +\n \"` listener to be a function, instead got a value of `\" +\n typeof inst +\n \"` type.\"\n );\n return inst;\n}\nvar customBubblingEventTypes =\n ReactNativePrivateInterface.ReactNativeViewConfigRegistry\n .customBubblingEventTypes,\n customDirectEventTypes =\n ReactNativePrivateInterface.ReactNativeViewConfigRegistry\n .customDirectEventTypes;\nfunction accumulateDirectionalDispatches$1(inst, phase, event) {\n if (\n (phase = getListener$1(\n inst,\n event.dispatchConfig.phasedRegistrationNames[phase]\n ))\n )\n (event._dispatchListeners = accumulateInto(\n event._dispatchListeners,\n phase\n )),\n (event._dispatchInstances = accumulateInto(\n event._dispatchInstances,\n inst\n ));\n}\nfunction accumulateTwoPhaseDispatchesSingle$1(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n for (var inst = event._targetInst, path = []; inst; ) {\n path.push(inst);\n do inst = inst.return;\n while (inst && 5 !== inst.tag);\n inst = inst ? inst : null;\n }\n for (inst = path.length; 0 < inst--; )\n accumulateDirectionalDispatches$1(path[inst], \"captured\", event);\n for (inst = 0; inst < path.length; inst++)\n accumulateDirectionalDispatches$1(path[inst], \"bubbled\", event);\n }\n}\nfunction accumulateDirectDispatchesSingle$1(event) {\n if (event && event.dispatchConfig.registrationName) {\n var inst = event._targetInst;\n if (inst && event && event.dispatchConfig.registrationName) {\n var listener = getListener$1(inst, event.dispatchConfig.registrationName);\n listener &&\n ((event._dispatchListeners = accumulateInto(\n event._dispatchListeners,\n listener\n )),\n (event._dispatchInstances = accumulateInto(\n event._dispatchInstances,\n inst\n )));\n }\n }\n}\nif (eventPluginOrder)\n throw Error(\n \"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\"\n );\neventPluginOrder = Array.prototype.slice.call([\n \"ResponderEventPlugin\",\n \"ReactNativeBridgeEventPlugin\"\n]);\nrecomputePluginOrdering();\nvar injectedNamesToPlugins$jscomp$inline_216 = {\n ResponderEventPlugin: ResponderEventPlugin,\n ReactNativeBridgeEventPlugin: {\n eventTypes: {},\n extractEvents: function(\n topLevelType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n if (null == targetInst) return null;\n var bubbleDispatchConfig = customBubblingEventTypes[topLevelType],\n directDispatchConfig = customDirectEventTypes[topLevelType];\n if (!bubbleDispatchConfig && !directDispatchConfig)\n throw Error(\n 'Unsupported top level event type \"' + topLevelType + '\" dispatched'\n );\n topLevelType = SyntheticEvent.getPooled(\n bubbleDispatchConfig || directDispatchConfig,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n if (bubbleDispatchConfig)\n forEachAccumulated(\n topLevelType,\n accumulateTwoPhaseDispatchesSingle$1\n );\n else if (directDispatchConfig)\n forEachAccumulated(topLevelType, accumulateDirectDispatchesSingle$1);\n else return null;\n return topLevelType;\n }\n }\n },\n isOrderingDirty$jscomp$inline_217 = !1,\n pluginName$jscomp$inline_218;\nfor (pluginName$jscomp$inline_218 in injectedNamesToPlugins$jscomp$inline_216)\n if (\n injectedNamesToPlugins$jscomp$inline_216.hasOwnProperty(\n pluginName$jscomp$inline_218\n )\n ) {\n var pluginModule$jscomp$inline_219 =\n injectedNamesToPlugins$jscomp$inline_216[pluginName$jscomp$inline_218];\n if (\n !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_218) ||\n namesToPlugins[pluginName$jscomp$inline_218] !==\n pluginModule$jscomp$inline_219\n ) {\n if (namesToPlugins[pluginName$jscomp$inline_218])\n throw Error(\n \"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" +\n pluginName$jscomp$inline_218 +\n \"`.\"\n );\n namesToPlugins[\n pluginName$jscomp$inline_218\n ] = pluginModule$jscomp$inline_219;\n isOrderingDirty$jscomp$inline_217 = !0;\n }\n }\nisOrderingDirty$jscomp$inline_217 && recomputePluginOrdering();\nfunction getInstanceFromInstance(instanceHandle) {\n return instanceHandle;\n}\ngetFiberCurrentPropsFromNode = function(inst) {\n return inst.canonical.currentProps;\n};\ngetInstanceFromNode = getInstanceFromInstance;\ngetNodeFromInstance = function(inst) {\n inst = inst.stateNode.canonical;\n if (!inst._nativeTag) throw Error(\"All native instances should have a tag.\");\n return inst;\n};\nResponderEventPlugin.injection.injectGlobalResponderHandler({\n onChange: function(from, to, blockNativeResponder) {\n var fromOrTo = from || to;\n (fromOrTo = fromOrTo && fromOrTo.stateNode) &&\n fromOrTo.canonical._internalInstanceHandle\n ? (from &&\n nativeFabricUIManager.setIsJSResponder(\n from.stateNode.node,\n !1,\n blockNativeResponder || !1\n ),\n to &&\n nativeFabricUIManager.setIsJSResponder(\n to.stateNode.node,\n !0,\n blockNativeResponder || !1\n ))\n : null !== to\n ? ReactNativePrivateInterface.UIManager.setJSResponder(\n to.stateNode.canonical._nativeTag,\n blockNativeResponder\n )\n : ReactNativePrivateInterface.UIManager.clearJSResponder();\n }\n});\nvar ReactSharedInternals =\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,\n REACT_ELEMENT_TYPE = 60103,\n REACT_PORTAL_TYPE = 60106,\n REACT_FRAGMENT_TYPE = 60107,\n REACT_STRICT_MODE_TYPE = 60108,\n REACT_PROFILER_TYPE = 60114,\n REACT_PROVIDER_TYPE = 60109,\n REACT_CONTEXT_TYPE = 60110,\n REACT_FORWARD_REF_TYPE = 60112,\n REACT_SUSPENSE_TYPE = 60113,\n REACT_SUSPENSE_LIST_TYPE = 60120,\n REACT_MEMO_TYPE = 60115,\n REACT_LAZY_TYPE = 60116,\n REACT_DEBUG_TRACING_MODE_TYPE = 60129,\n REACT_OFFSCREEN_TYPE = 60130,\n REACT_LEGACY_HIDDEN_TYPE = 60131,\n REACT_CACHE_TYPE = 60132;\nif (\"function\" === typeof Symbol && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor(\"react.element\");\n REACT_PORTAL_TYPE = symbolFor(\"react.portal\");\n REACT_FRAGMENT_TYPE = symbolFor(\"react.fragment\");\n REACT_STRICT_MODE_TYPE = symbolFor(\"react.strict_mode\");\n REACT_PROFILER_TYPE = symbolFor(\"react.profiler\");\n REACT_PROVIDER_TYPE = symbolFor(\"react.provider\");\n REACT_CONTEXT_TYPE = symbolFor(\"react.context\");\n REACT_FORWARD_REF_TYPE = symbolFor(\"react.forward_ref\");\n REACT_SUSPENSE_TYPE = symbolFor(\"react.suspense\");\n REACT_SUSPENSE_LIST_TYPE = symbolFor(\"react.suspense_list\");\n REACT_MEMO_TYPE = symbolFor(\"react.memo\");\n REACT_LAZY_TYPE = symbolFor(\"react.lazy\");\n symbolFor(\"react.scope\");\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor(\"react.debug_trace_mode\");\n REACT_OFFSCREEN_TYPE = symbolFor(\"react.offscreen\");\n REACT_LEGACY_HIDDEN_TYPE = symbolFor(\"react.legacy_hidden\");\n REACT_CACHE_TYPE = symbolFor(\"react.cache\");\n}\nvar MAYBE_ITERATOR_SYMBOL = \"function\" === typeof Symbol && Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type) return type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_CACHE_TYPE:\n return \"Cache\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Consumer\";\n case REACT_PROVIDER_TYPE:\n return (type._context.displayName || \"Context\") + \".Provider\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nfunction getComponentNameFromFiber(fiber) {\n var type = fiber.type;\n switch (fiber.tag) {\n case 24:\n return \"Cache\";\n case 9:\n return (type.displayName || \"Context\") + \".Consumer\";\n case 10:\n return (type._context.displayName || \"Context\") + \".Provider\";\n case 18:\n return \"DehydratedFragment\";\n case 11:\n return (\n (fiber = type.render),\n (fiber = fiber.displayName || fiber.name || \"\"),\n type.displayName ||\n (\"\" !== fiber ? \"ForwardRef(\" + fiber + \")\" : \"ForwardRef\")\n );\n case 7:\n return \"Fragment\";\n case 5:\n return type;\n case 4:\n return \"Portal\";\n case 3:\n return \"Root\";\n case 6:\n return \"Text\";\n case 16:\n return getComponentNameFromType(type);\n case 23:\n return \"LegacyHidden\";\n case 8:\n return type === REACT_STRICT_MODE_TYPE ? \"StrictMode\" : \"Mode\";\n case 22:\n return \"Offscreen\";\n case 12:\n return \"Profiler\";\n case 21:\n return \"Scope\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 1:\n case 0:\n case 17:\n case 2:\n case 14:\n case 15:\n if (\"function\" === typeof type)\n return type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n }\n return null;\n}\nfunction getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 2050) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(\"Unable to find node on an unmounted component.\");\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate)\n throw Error(\"Unable to find node on an unmounted component.\");\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild)\n throw Error(\n \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\"\n );\n }\n }\n if (a.alternate !== b)\n throw Error(\n \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (3 !== a.tag)\n throw Error(\"Unable to find node on an unmounted component.\");\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiber(parent) {\n parent = findCurrentFiberUsingSlowPath(parent);\n return null !== parent ? findCurrentHostFiberImpl(parent) : null;\n}\nfunction findCurrentHostFiberImpl(node) {\n if (5 === node.tag || 6 === node.tag) return node;\n for (node = node.child; null !== node; ) {\n var match = findCurrentHostFiberImpl(node);\n if (null !== match) return match;\n node = node.sibling;\n }\n return null;\n}\nfunction mountSafeCallback_NOT_REALLY_SAFE(context, callback) {\n return function() {\n if (\n callback &&\n (\"boolean\" !== typeof context.__isMounted || context.__isMounted)\n )\n return callback.apply(context, arguments);\n };\n}\nvar emptyObject = {},\n removedKeys = null,\n removedKeyCount = 0,\n deepDifferOptions = { unsafelyIgnoreFunctions: !0 };\nfunction defaultDiffer(prevProp, nextProp) {\n return \"object\" !== typeof nextProp || null === nextProp\n ? !0\n : ReactNativePrivateInterface.deepDiffer(\n prevProp,\n nextProp,\n deepDifferOptions\n );\n}\nfunction restoreDeletedValuesInNestedArray(\n updatePayload,\n node,\n validAttributes\n) {\n if (isArrayImpl(node))\n for (var i = node.length; i-- && 0 < removedKeyCount; )\n restoreDeletedValuesInNestedArray(\n updatePayload,\n node[i],\n validAttributes\n );\n else if (node && 0 < removedKeyCount)\n for (i in removedKeys)\n if (removedKeys[i]) {\n var nextProp = node[i];\n if (void 0 !== nextProp) {\n var attributeConfig = validAttributes[i];\n if (attributeConfig) {\n \"function\" === typeof nextProp && (nextProp = !0);\n \"undefined\" === typeof nextProp && (nextProp = null);\n if (\"object\" !== typeof attributeConfig)\n updatePayload[i] = nextProp;\n else if (\n \"function\" === typeof attributeConfig.diff ||\n \"function\" === typeof attributeConfig.process\n )\n (nextProp =\n \"function\" === typeof attributeConfig.process\n ? attributeConfig.process(nextProp)\n : nextProp),\n (updatePayload[i] = nextProp);\n removedKeys[i] = !1;\n removedKeyCount--;\n }\n }\n }\n}\nfunction diffNestedProperty(\n updatePayload,\n prevProp,\n nextProp,\n validAttributes\n) {\n if (!updatePayload && prevProp === nextProp) return updatePayload;\n if (!prevProp || !nextProp)\n return nextProp\n ? addNestedProperty(updatePayload, nextProp, validAttributes)\n : prevProp\n ? clearNestedProperty(updatePayload, prevProp, validAttributes)\n : updatePayload;\n if (!isArrayImpl(prevProp) && !isArrayImpl(nextProp))\n return diffProperties(updatePayload, prevProp, nextProp, validAttributes);\n if (isArrayImpl(prevProp) && isArrayImpl(nextProp)) {\n var minLength =\n prevProp.length < nextProp.length ? prevProp.length : nextProp.length,\n i;\n for (i = 0; i < minLength; i++)\n updatePayload = diffNestedProperty(\n updatePayload,\n prevProp[i],\n nextProp[i],\n validAttributes\n );\n for (; i < prevProp.length; i++)\n updatePayload = clearNestedProperty(\n updatePayload,\n prevProp[i],\n validAttributes\n );\n for (; i < nextProp.length; i++)\n updatePayload = addNestedProperty(\n updatePayload,\n nextProp[i],\n validAttributes\n );\n return updatePayload;\n }\n return isArrayImpl(prevProp)\n ? diffProperties(\n updatePayload,\n ReactNativePrivateInterface.flattenStyle(prevProp),\n nextProp,\n validAttributes\n )\n : diffProperties(\n updatePayload,\n prevProp,\n ReactNativePrivateInterface.flattenStyle(nextProp),\n validAttributes\n );\n}\nfunction addNestedProperty(updatePayload, nextProp, validAttributes) {\n if (!nextProp) return updatePayload;\n if (!isArrayImpl(nextProp))\n return diffProperties(\n updatePayload,\n emptyObject,\n nextProp,\n validAttributes\n );\n for (var i = 0; i < nextProp.length; i++)\n updatePayload = addNestedProperty(\n updatePayload,\n nextProp[i],\n validAttributes\n );\n return updatePayload;\n}\nfunction clearNestedProperty(updatePayload, prevProp, validAttributes) {\n if (!prevProp) return updatePayload;\n if (!isArrayImpl(prevProp))\n return diffProperties(\n updatePayload,\n prevProp,\n emptyObject,\n validAttributes\n );\n for (var i = 0; i < prevProp.length; i++)\n updatePayload = clearNestedProperty(\n updatePayload,\n prevProp[i],\n validAttributes\n );\n return updatePayload;\n}\nfunction diffProperties(updatePayload, prevProps, nextProps, validAttributes) {\n var attributeConfig, propKey;\n for (propKey in nextProps)\n if ((attributeConfig = validAttributes[propKey])) {\n var prevProp = prevProps[propKey];\n var nextProp = nextProps[propKey];\n \"function\" === typeof nextProp &&\n ((nextProp = !0), \"function\" === typeof prevProp && (prevProp = !0));\n \"undefined\" === typeof nextProp &&\n ((nextProp = null),\n \"undefined\" === typeof prevProp && (prevProp = null));\n removedKeys && (removedKeys[propKey] = !1);\n if (updatePayload && void 0 !== updatePayload[propKey])\n if (\"object\" !== typeof attributeConfig)\n updatePayload[propKey] = nextProp;\n else {\n if (\n \"function\" === typeof attributeConfig.diff ||\n \"function\" === typeof attributeConfig.process\n )\n (attributeConfig =\n \"function\" === typeof attributeConfig.process\n ? attributeConfig.process(nextProp)\n : nextProp),\n (updatePayload[propKey] = attributeConfig);\n }\n else if (prevProp !== nextProp)\n if (\"object\" !== typeof attributeConfig)\n defaultDiffer(prevProp, nextProp) &&\n ((updatePayload || (updatePayload = {}))[propKey] = nextProp);\n else if (\n \"function\" === typeof attributeConfig.diff ||\n \"function\" === typeof attributeConfig.process\n ) {\n if (\n void 0 === prevProp ||\n (\"function\" === typeof attributeConfig.diff\n ? attributeConfig.diff(prevProp, nextProp)\n : defaultDiffer(prevProp, nextProp))\n )\n (attributeConfig =\n \"function\" === typeof attributeConfig.process\n ? attributeConfig.process(nextProp)\n : nextProp),\n ((updatePayload || (updatePayload = {}))[\n propKey\n ] = attributeConfig);\n } else\n (removedKeys = null),\n (removedKeyCount = 0),\n (updatePayload = diffNestedProperty(\n updatePayload,\n prevProp,\n nextProp,\n attributeConfig\n )),\n 0 < removedKeyCount &&\n updatePayload &&\n (restoreDeletedValuesInNestedArray(\n updatePayload,\n nextProp,\n attributeConfig\n ),\n (removedKeys = null));\n }\n for (var propKey$2 in prevProps)\n void 0 === nextProps[propKey$2] &&\n (!(attributeConfig = validAttributes[propKey$2]) ||\n (updatePayload && void 0 !== updatePayload[propKey$2]) ||\n ((prevProp = prevProps[propKey$2]),\n void 0 !== prevProp &&\n (\"object\" !== typeof attributeConfig ||\n \"function\" === typeof attributeConfig.diff ||\n \"function\" === typeof attributeConfig.process\n ? (((updatePayload || (updatePayload = {}))[propKey$2] = null),\n removedKeys || (removedKeys = {}),\n removedKeys[propKey$2] ||\n ((removedKeys[propKey$2] = !0), removedKeyCount++))\n : (updatePayload = clearNestedProperty(\n updatePayload,\n prevProp,\n attributeConfig\n )))));\n return updatePayload;\n}\nfunction batchedUpdatesImpl(fn, bookkeeping) {\n return fn(bookkeeping);\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates(fn, bookkeeping) {\n if (isInsideEventHandler) return fn(bookkeeping);\n isInsideEventHandler = !0;\n try {\n return batchedUpdatesImpl(fn, bookkeeping);\n } finally {\n isInsideEventHandler = !1;\n }\n}\nvar eventQueue = null;\nfunction executeDispatchesAndReleaseTopLevel(e) {\n if (e) {\n var dispatchListeners = e._dispatchListeners,\n dispatchInstances = e._dispatchInstances;\n if (isArrayImpl(dispatchListeners))\n for (\n var i = 0;\n i < dispatchListeners.length && !e.isPropagationStopped();\n i++\n )\n executeDispatch(e, dispatchListeners[i], dispatchInstances[i]);\n else\n dispatchListeners &&\n executeDispatch(e, dispatchListeners, dispatchInstances);\n e._dispatchListeners = null;\n e._dispatchInstances = null;\n e.isPersistent() || e.constructor.release(e);\n }\n}\nfunction dispatchEvent(target, topLevelType, nativeEvent) {\n var eventTarget = null;\n if (null != target) {\n var stateNode = target.stateNode;\n null != stateNode && (eventTarget = stateNode.canonical);\n }\n batchedUpdates(function() {\n var JSCompiler_inline_result = eventTarget;\n for (\n var events = null, legacyPlugins = plugins, i = 0;\n i < legacyPlugins.length;\n i++\n ) {\n var possiblePlugin = legacyPlugins[i];\n possiblePlugin &&\n (possiblePlugin = possiblePlugin.extractEvents(\n topLevelType,\n target,\n nativeEvent,\n JSCompiler_inline_result\n )) &&\n (events = accumulateInto(events, possiblePlugin));\n }\n JSCompiler_inline_result = events;\n null !== JSCompiler_inline_result &&\n (eventQueue = accumulateInto(eventQueue, JSCompiler_inline_result));\n JSCompiler_inline_result = eventQueue;\n eventQueue = null;\n if (JSCompiler_inline_result) {\n forEachAccumulated(\n JSCompiler_inline_result,\n executeDispatchesAndReleaseTopLevel\n );\n if (eventQueue)\n throw Error(\n \"processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.\"\n );\n if (hasRethrowError)\n throw ((JSCompiler_inline_result = rethrowError),\n (hasRethrowError = !1),\n (rethrowError = null),\n JSCompiler_inline_result);\n }\n });\n}\nvar scheduleCallback = Scheduler.unstable_scheduleCallback,\n cancelCallback = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority = Scheduler.unstable_NormalPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n rendererID = null,\n injectedHook = null;\nfunction onCommitRoot(root) {\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n try {\n injectedHook.onCommitFiberRoot(\n rendererID,\n root,\n void 0,\n 128 === (root.current.flags & 128)\n );\n } catch (err) {}\n}\nvar nextTransitionLane = 64,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 4194240;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n case 67108864:\n return lanes & 130023424;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 1073741824;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n nonIdlePendingLanes = pendingLanes & 268435455;\n if (0 !== nonIdlePendingLanes) {\n var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes;\n 0 !== nonIdleUnblockedLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes &&\n (nextLanes = getHighestPriorityLanes(pingedLanes)));\n } else\n (nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes &&\n (nextLanes = getHighestPriorityLanes(pingedLanes));\n if (0 === nextLanes) return 0;\n if (\n 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (pingedLanes = wipLanes & -wipLanes),\n suspendedLanes >= pingedLanes ||\n (16 === suspendedLanes && 0 !== (pingedLanes & 4194240)))\n )\n return wipLanes;\n 0 !== (nextLanes & 4) && (nextLanes |= pendingLanes & 16);\n wipLanes = root.entangledLanes;\n if (0 !== wipLanes)\n for (root = root.entanglements, wipLanes &= nextLanes; 0 < wipLanes; )\n (pendingLanes = 31 - clz32(wipLanes)),\n (suspendedLanes = 1 << pendingLanes),\n (nextLanes |= root[pendingLanes]),\n (wipLanes &= ~suspendedLanes);\n return nextLanes;\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n return currentTime + 250;\n case 8:\n case 16:\n case 32:\n case 64:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n case 67108864:\n return -1;\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction getLanesToRetrySynchronouslyOnError(root) {\n root = root.pendingLanes & -1073741825;\n return 0 !== root ? root : root & 1073741824 ? 1073741824 : 0;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated(root, updateLane, eventTime) {\n root.pendingLanes |= updateLane;\n 536870912 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0));\n root = root.eventTimes;\n updateLane = 31 - clz32(updateLane);\n root[updateLane] = eventTime;\n}\nfunction markRootFinished(root, remainingLanes) {\n var noLongerPendingLanes = root.pendingLanes & ~remainingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.mutableReadLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n remainingLanes = root.entanglements;\n var eventTimes = root.eventTimes;\n for (root = root.expirationTimes; 0 < noLongerPendingLanes; ) {\n var index$7 = 31 - clz32(noLongerPendingLanes),\n lane = 1 << index$7;\n remainingLanes[index$7] = 0;\n eventTimes[index$7] = -1;\n root[index$7] = -1;\n noLongerPendingLanes &= ~lane;\n }\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(lanes) {\n return 0 === lanes ? 32 : (31 - ((log(lanes) / LN2) | 0)) | 0;\n}\nvar currentUpdatePriority = 0;\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 1 < lanes\n ? 4 < lanes\n ? 0 !== (lanes & 268435455)\n ? 16\n : 536870912\n : 4\n : 1;\n}\nfunction shim() {\n throw Error(\n \"The current renderer does not support mutation. This error is likely caused by a bug in React. Please file an issue.\"\n );\n}\nfunction shim$1() {\n throw Error(\n \"The current renderer does not support hydration. This error is likely caused by a bug in React. Please file an issue.\"\n );\n}\nvar _nativeFabricUIManage = nativeFabricUIManager,\n createNode = _nativeFabricUIManage.createNode,\n cloneNode = _nativeFabricUIManage.cloneNode,\n cloneNodeWithNewChildren = _nativeFabricUIManage.cloneNodeWithNewChildren,\n cloneNodeWithNewChildrenAndProps =\n _nativeFabricUIManage.cloneNodeWithNewChildrenAndProps,\n cloneNodeWithNewProps = _nativeFabricUIManage.cloneNodeWithNewProps,\n createChildNodeSet = _nativeFabricUIManage.createChildSet,\n appendChildNode = _nativeFabricUIManage.appendChild,\n appendChildNodeToSet = _nativeFabricUIManage.appendChildToSet,\n completeRoot = _nativeFabricUIManage.completeRoot,\n registerEventHandler = _nativeFabricUIManage.registerEventHandler,\n fabricMeasure = _nativeFabricUIManage.measure,\n fabricMeasureInWindow = _nativeFabricUIManage.measureInWindow,\n fabricMeasureLayout = _nativeFabricUIManage.measureLayout,\n FabricDiscretePriority = _nativeFabricUIManage.unstable_DiscreteEventPriority,\n fabricGetCurrentEventPriority =\n _nativeFabricUIManage.unstable_getCurrentEventPriority,\n getViewConfigForType =\n ReactNativePrivateInterface.ReactNativeViewConfigRegistry.get,\n nextReactTag = 2;\nregisterEventHandler && registerEventHandler(dispatchEvent);\nvar ReactFabricHostComponent = (function() {\n function ReactFabricHostComponent(\n tag,\n viewConfig,\n props,\n internalInstanceHandle\n ) {\n this._nativeTag = tag;\n this.viewConfig = viewConfig;\n this.currentProps = props;\n this._internalInstanceHandle = internalInstanceHandle;\n }\n var _proto = ReactFabricHostComponent.prototype;\n _proto.blur = function() {\n ReactNativePrivateInterface.TextInputState.blurTextInput(this);\n };\n _proto.focus = function() {\n ReactNativePrivateInterface.TextInputState.focusTextInput(this);\n };\n _proto.measure = function(callback) {\n fabricMeasure(\n this._internalInstanceHandle.stateNode.node,\n mountSafeCallback_NOT_REALLY_SAFE(this, callback)\n );\n };\n _proto.measureInWindow = function(callback) {\n fabricMeasureInWindow(\n this._internalInstanceHandle.stateNode.node,\n mountSafeCallback_NOT_REALLY_SAFE(this, callback)\n );\n };\n _proto.measureLayout = function(relativeToNativeNode, onSuccess, onFail) {\n \"number\" !== typeof relativeToNativeNode &&\n relativeToNativeNode instanceof ReactFabricHostComponent &&\n fabricMeasureLayout(\n this._internalInstanceHandle.stateNode.node,\n relativeToNativeNode._internalInstanceHandle.stateNode.node,\n mountSafeCallback_NOT_REALLY_SAFE(this, onFail),\n mountSafeCallback_NOT_REALLY_SAFE(this, onSuccess)\n );\n };\n _proto.setNativeProps = function() {};\n return ReactFabricHostComponent;\n})();\nfunction createTextInstance(\n text,\n rootContainerInstance,\n hostContext,\n internalInstanceHandle\n) {\n if (!hostContext.isInAParentText)\n throw Error(\"Text strings must be rendered within a component.\");\n hostContext = nextReactTag;\n nextReactTag += 2;\n return {\n node: createNode(\n hostContext,\n \"RCTRawText\",\n rootContainerInstance,\n { text: text },\n internalInstanceHandle\n )\n };\n}\nvar scheduleTimeout = setTimeout,\n cancelTimeout = clearTimeout;\nfunction cloneHiddenInstance(instance) {\n var node = instance.node;\n var JSCompiler_inline_result = diffProperties(\n null,\n emptyObject,\n { style: { display: \"none\" } },\n instance.canonical.viewConfig.validAttributes\n );\n return {\n node: cloneNodeWithNewProps(node, JSCompiler_inline_result),\n canonical: instance.canonical\n };\n}\nfunction describeComponentFrame(name, source, ownerName) {\n source = \"\";\n ownerName && (source = \" (created by \" + ownerName + \")\");\n return \"\\n in \" + (name || \"Unknown\") + source;\n}\nfunction describeFunctionComponentFrame(fn, source) {\n return fn\n ? describeComponentFrame(fn.displayName || fn.name || null, source, null)\n : \"\";\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar emptyContextObject = {},\n contextStackCursor = createCursor(emptyContextObject),\n didPerformWorkStackCursor = createCursor(!1),\n previousContext = emptyContextObject;\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n var contextTypes = workInProgress.type.contextTypes;\n if (!contextTypes) return emptyContextObject;\n var instance = workInProgress.stateNode;\n if (\n instance &&\n instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext\n )\n return instance.__reactInternalMemoizedMaskedChildContext;\n var context = {},\n key;\n for (key in contextTypes) context[key] = unmaskedContext[key];\n instance &&\n ((workInProgress = workInProgress.stateNode),\n (workInProgress.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext),\n (workInProgress.__reactInternalMemoizedMaskedChildContext = context));\n return context;\n}\nfunction isContextProvider(type) {\n type = type.childContextTypes;\n return null !== type && void 0 !== type;\n}\nfunction popContext() {\n pop(didPerformWorkStackCursor);\n pop(contextStackCursor);\n}\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n if (contextStackCursor.current !== emptyContextObject)\n throw Error(\n \"Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.\"\n );\n push(contextStackCursor, context);\n push(didPerformWorkStackCursor, didChange);\n}\nfunction processChildContext(fiber, type, parentContext) {\n var instance = fiber.stateNode;\n type = type.childContextTypes;\n if (\"function\" !== typeof instance.getChildContext) return parentContext;\n instance = instance.getChildContext();\n for (var contextKey in instance)\n if (!(contextKey in type))\n throw Error(\n (getComponentNameFromFiber(fiber) || \"Unknown\") +\n '.getChildContext(): key \"' +\n contextKey +\n '\" is not defined in childContextTypes.'\n );\n return Object.assign({}, parentContext, instance);\n}\nfunction pushContextProvider(workInProgress) {\n workInProgress =\n ((workInProgress = workInProgress.stateNode) &&\n workInProgress.__reactInternalMemoizedMergedChildContext) ||\n emptyContextObject;\n previousContext = contextStackCursor.current;\n push(contextStackCursor, workInProgress);\n push(didPerformWorkStackCursor, didPerformWorkStackCursor.current);\n return !0;\n}\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n var instance = workInProgress.stateNode;\n if (!instance)\n throw Error(\n \"Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.\"\n );\n didChange\n ? ((workInProgress = processChildContext(\n workInProgress,\n type,\n previousContext\n )),\n (instance.__reactInternalMemoizedMergedChildContext = workInProgress),\n pop(didPerformWorkStackCursor),\n pop(contextStackCursor),\n push(contextStackCursor, workInProgress))\n : pop(didPerformWorkStackCursor);\n push(didPerformWorkStackCursor, didChange);\n}\nvar syncQueue = null,\n includesLegacySyncCallbacks = !1,\n isFlushingSyncQueue = !1;\nfunction flushSyncCallbacks() {\n if (!isFlushingSyncQueue && null !== syncQueue) {\n isFlushingSyncQueue = !0;\n var i = 0,\n previousUpdatePriority = currentUpdatePriority;\n try {\n var queue = syncQueue;\n for (currentUpdatePriority = 1; i < queue.length; i++) {\n var callback = queue[i];\n do callback = callback(!0);\n while (null !== callback);\n }\n syncQueue = null;\n includesLegacySyncCallbacks = !1;\n } catch (error) {\n throw (null !== syncQueue && (syncQueue = syncQueue.slice(i + 1)),\n scheduleCallback(ImmediatePriority, flushSyncCallbacks),\n error);\n } finally {\n (currentUpdatePriority = previousUpdatePriority),\n (isFlushingSyncQueue = !1);\n }\n }\n return null;\n}\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig;\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++)\n if (\n !hasOwnProperty.call(objB, keysA[keysB]) ||\n !objectIs(objA[keysA[keysB]], objB[keysA[keysB]])\n )\n return !1;\n return !0;\n}\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case 5:\n return describeComponentFrame(fiber.type, null, null);\n case 16:\n return describeComponentFrame(\"Lazy\", null, null);\n case 13:\n return describeComponentFrame(\"Suspense\", null, null);\n case 19:\n return describeComponentFrame(\"SuspenseList\", null, null);\n case 0:\n case 2:\n case 15:\n return describeFunctionComponentFrame(fiber.type, null);\n case 11:\n return describeFunctionComponentFrame(fiber.type.render, null);\n case 1:\n return (fiber = describeFunctionComponentFrame(fiber.type, null)), fiber;\n default:\n return \"\";\n }\n}\nfunction resolveDefaultProps(Component, baseProps) {\n if (Component && Component.defaultProps) {\n baseProps = Object.assign({}, baseProps);\n Component = Component.defaultProps;\n for (var propName in Component)\n void 0 === baseProps[propName] &&\n (baseProps[propName] = Component[propName]);\n return baseProps;\n }\n return baseProps;\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber = null,\n lastContextDependency = null,\n lastFullyObservedContext = null;\nfunction resetContextDependencies() {\n lastFullyObservedContext = lastContextDependency = currentlyRenderingFiber = null;\n}\nfunction popProvider(context) {\n var currentValue = valueCursor.current;\n pop(valueCursor);\n context._currentValue2 = currentValue;\n}\nfunction scheduleWorkOnParentPath(parent, renderLanes) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n if ((parent.childLanes & renderLanes) === renderLanes)\n if (\n null === alternate ||\n (alternate.childLanes & renderLanes) === renderLanes\n )\n break;\n else alternate.childLanes |= renderLanes;\n else\n (parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes);\n parent = parent.return;\n }\n}\nfunction prepareToReadContext(workInProgress, renderLanes) {\n currentlyRenderingFiber = workInProgress;\n lastFullyObservedContext = lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress &&\n null !== workInProgress.firstContext &&\n (0 !== (workInProgress.lanes & renderLanes) && (didReceiveUpdate = !0),\n (workInProgress.firstContext = null));\n}\nfunction readContext(context) {\n var value = context._currentValue2;\n if (lastFullyObservedContext !== context)\n if (\n ((context = { context: context, memoizedValue: value, next: null }),\n null === lastContextDependency)\n ) {\n if (null === currentlyRenderingFiber)\n throw Error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n lastContextDependency = context;\n currentlyRenderingFiber.dependencies = {\n lanes: 0,\n firstContext: context\n };\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar interleavedQueues = null,\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, interleaved: null, lanes: 0 },\n effects: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n effects: current.effects\n });\n}\nfunction createUpdate(eventTime, lane) {\n return {\n eventTime: eventTime,\n lane: lane,\n tag: 0,\n payload: null,\n callback: null,\n next: null\n };\n}\nfunction enqueueUpdate(fiber, update) {\n var updateQueue = fiber.updateQueue;\n null !== updateQueue &&\n ((updateQueue = updateQueue.shared),\n null !== workInProgressRoot &&\n 0 !== (fiber.mode & 1) &&\n 0 === (executionContext & 8)\n ? ((fiber = updateQueue.interleaved),\n null === fiber\n ? ((update.next = update),\n null === interleavedQueues\n ? (interleavedQueues = [updateQueue])\n : interleavedQueues.push(updateQueue))\n : ((update.next = fiber.next), (fiber.next = update)),\n (updateQueue.interleaved = update))\n : ((fiber = updateQueue.pending),\n null === fiber\n ? (update.next = update)\n : ((update.next = fiber.next), (fiber.next = update)),\n (updateQueue.pending = update)));\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194240))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n eventTime: queue.eventTime,\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: queue.callback,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n effects: current.effects\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance,\n renderLanes\n) {\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane,\n updateEventTime = pendingQueue.eventTime;\n if ((renderLanes & updateLane) === updateLane) {\n null !== current &&\n (current = current.next = {\n eventTime: updateEventTime,\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n updateEventTime = instance;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(\n updateEventTime,\n newState,\n updateLane\n );\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -16385) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(updateEventTime, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = Object.assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n null !== pendingQueue.callback &&\n 0 !== pendingQueue.lane &&\n ((workInProgress$jscomp$0.flags |= 64),\n (updateLane = queue.effects),\n null === updateLane\n ? (queue.effects = [pendingQueue])\n : updateLane.push(pendingQueue));\n } else\n (updateEventTime = {\n eventTime: updateEventTime,\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = updateEventTime),\n (lastPendingUpdate = newState))\n : (current = current.next = updateEventTime),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (updateLane = pendingQueue),\n (pendingQueue = updateLane.next),\n (updateLane.next = null),\n (queue.lastBaseUpdate = updateLane),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n props = queue.shared.interleaved;\n if (null !== props) {\n queue = props;\n do (lastBaseUpdate |= queue.lane), (queue = queue.next);\n while (queue !== props);\n } else null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance) {\n finishedWork = finishedQueue.effects;\n finishedQueue.effects = null;\n if (null !== finishedWork)\n for (\n finishedQueue = 0;\n finishedQueue < finishedWork.length;\n finishedQueue++\n ) {\n var effect = finishedWork[finishedQueue],\n callback = effect.callback;\n if (null !== callback) {\n effect.callback = null;\n if (\"function\" !== typeof callback)\n throw Error(\n \"Invalid argument passed as callback. Expected a function. Instead received: \" +\n callback\n );\n callback.call(instance);\n }\n }\n}\nvar emptyRefsObject = new React.Component().refs;\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : Object.assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n isMounted: function(component) {\n return (component = component._reactInternals)\n ? getNearestMountedFiber(component) === component\n : !1;\n },\n enqueueSetState: function(inst, payload, callback) {\n inst = inst._reactInternals;\n var eventTime = requestEventTime(),\n lane = requestUpdateLane(inst),\n update = createUpdate(eventTime, lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n enqueueUpdate(inst, update);\n payload = scheduleUpdateOnFiber(inst, lane, eventTime);\n null !== payload && entangleTransitions(payload, inst, lane);\n },\n enqueueReplaceState: function(inst, payload, callback) {\n inst = inst._reactInternals;\n var eventTime = requestEventTime(),\n lane = requestUpdateLane(inst),\n update = createUpdate(eventTime, lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n enqueueUpdate(inst, update);\n payload = scheduleUpdateOnFiber(inst, lane, eventTime);\n null !== payload && entangleTransitions(payload, inst, lane);\n },\n enqueueForceUpdate: function(inst, callback) {\n inst = inst._reactInternals;\n var eventTime = requestEventTime(),\n lane = requestUpdateLane(inst),\n update = createUpdate(eventTime, lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n enqueueUpdate(inst, update);\n callback = scheduleUpdateOnFiber(inst, lane, eventTime);\n null !== callback && entangleTransitions(callback, inst, lane);\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction constructClassInstance(workInProgress, ctor, props) {\n var isLegacyContextConsumer = !1,\n unmaskedContext = emptyContextObject;\n var context = ctor.contextType;\n \"object\" === typeof context && null !== context\n ? (context = readContext(context))\n : ((unmaskedContext = isContextProvider(ctor)\n ? previousContext\n : contextStackCursor.current),\n (isLegacyContextConsumer = ctor.contextTypes),\n (context = (isLegacyContextConsumer =\n null !== isLegacyContextConsumer && void 0 !== isLegacyContextConsumer)\n ? getMaskedContext(workInProgress, unmaskedContext)\n : emptyContextObject));\n ctor = new ctor(props, context);\n workInProgress.memoizedState =\n null !== ctor.state && void 0 !== ctor.state ? ctor.state : null;\n ctor.updater = classComponentUpdater;\n workInProgress.stateNode = ctor;\n ctor._reactInternals = workInProgress;\n isLegacyContextConsumer &&\n ((workInProgress = workInProgress.stateNode),\n (workInProgress.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext),\n (workInProgress.__reactInternalMemoizedMaskedChildContext = context));\n return ctor;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction mountClassInstance(workInProgress, ctor, newProps, renderLanes) {\n var instance = workInProgress.stateNode;\n instance.props = newProps;\n instance.state = workInProgress.memoizedState;\n instance.refs = emptyRefsObject;\n initializeUpdateQueue(workInProgress);\n var contextType = ctor.contextType;\n \"object\" === typeof contextType && null !== contextType\n ? (instance.context = readContext(contextType))\n : ((contextType = isContextProvider(ctor)\n ? previousContext\n : contextStackCursor.current),\n (instance.context = getMaskedContext(workInProgress, contextType)));\n instance.state = workInProgress.memoizedState;\n contextType = ctor.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(workInProgress, ctor, contextType, newProps),\n (instance.state = workInProgress.memoizedState));\n \"function\" === typeof ctor.getDerivedStateFromProps ||\n \"function\" === typeof instance.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof instance.componentWillMount) ||\n ((ctor = instance.state),\n \"function\" === typeof instance.componentWillMount &&\n instance.componentWillMount(),\n \"function\" === typeof instance.UNSAFE_componentWillMount &&\n instance.UNSAFE_componentWillMount(),\n ctor !== instance.state &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null),\n processUpdateQueue(workInProgress, newProps, instance, renderLanes),\n (instance.state = workInProgress.memoizedState));\n \"function\" === typeof instance.componentDidMount &&\n (workInProgress.flags |= 4);\n}\nfunction coerceRef(returnFiber, current, element) {\n returnFiber = element.ref;\n if (\n null !== returnFiber &&\n \"function\" !== typeof returnFiber &&\n \"object\" !== typeof returnFiber\n ) {\n if (element._owner) {\n element = element._owner;\n if (element) {\n if (1 !== element.tag)\n throw Error(\n \"Function components cannot have string refs. We recommend using useRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref\"\n );\n var inst = element.stateNode;\n }\n if (!inst)\n throw Error(\n \"Missing owner for string ref \" +\n returnFiber +\n \". This error is likely caused by a bug in React. Please file an issue.\"\n );\n var stringRef = \"\" + returnFiber;\n if (\n null !== current &&\n null !== current.ref &&\n \"function\" === typeof current.ref &&\n current.ref._stringRef === stringRef\n )\n return current.ref;\n current = function(value) {\n var refs = inst.refs;\n refs === emptyRefsObject && (refs = inst.refs = {});\n null === value ? delete refs[stringRef] : (refs[stringRef] = value);\n };\n current._stringRef = stringRef;\n return current;\n }\n if (\"string\" !== typeof returnFiber)\n throw Error(\n \"Expected ref to be a function, a string, an object returned by React.createRef(), or null.\"\n );\n if (!element._owner)\n throw Error(\n \"Element ref was specified as a string (\" +\n returnFiber +\n \") but no owner was set. This could happen for one of the following reasons:\\n1. You may be adding a ref to a function component\\n2. You may be adding a ref to a component that was not created inside a component's render method\\n3. You have multiple copies of React loaded\\nSee https://reactjs.org/link/refs-must-have-owner for more information.\"\n );\n }\n return returnFiber;\n}\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n}\nfunction ChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(returnFiber, currentFirstChild) {\n for (returnFiber = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? returnFiber.set(currentFirstChild.key, currentFirstChild)\n : returnFiber.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return returnFiber;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects) return lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 2), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 2;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 2);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n );\n if (null !== current && current.elementType === elementType)\n return (\n (lanes = useFiber(current, element.props)),\n (lanes.ref = coerceRef(returnFiber, current, element)),\n (lanes.return = returnFiber),\n lanes\n );\n lanes = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n lanes.ref = coerceRef(returnFiber, current, element);\n lanes.return = returnFiber;\n return lanes;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\"string\" === typeof newChild || \"number\" === typeof newChild)\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n (lanes.ref = coerceRef(returnFiber, null, newChild)),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\"string\" === typeof newChild || \"number\" === typeof newChild)\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\"string\" === typeof newChild || \"number\" === typeof newChild)\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber), resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(returnFiber, oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function(child) {\n return deleteChild(returnFiber, child);\n });\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildrenIterable,\n lanes\n ) {\n var iteratorFn = getIteratorFn(newChildrenIterable);\n if (\"function\" !== typeof iteratorFn)\n throw Error(\n \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\"\n );\n newChildrenIterable = iteratorFn.call(newChildrenIterable);\n if (null == newChildrenIterable)\n throw Error(\"An iterable object provided no iterator.\");\n for (\n var previousNewFiber = (iteratorFn = null),\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildrenIterable.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildrenIterable.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (iteratorFn = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return deleteRemainingChildren(returnFiber, oldFiber), iteratorFn;\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildrenIterable.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (iteratorFn = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n return iteratorFn;\n }\n for (\n oldFiber = mapRemainingChildren(returnFiber, oldFiber);\n !step.done;\n newIdx++, step = newChildrenIterable.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n null !== step.alternate &&\n oldFiber.delete(null === step.key ? newIdx : step.key),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (iteratorFn = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function(child) {\n return deleteChild(returnFiber, child);\n });\n return iteratorFn;\n }\n return function(returnFiber, currentFirstChild, newChild, lanes) {\n var isUnkeyedTopLevelFragment =\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key;\n isUnkeyedTopLevelFragment && (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n var key = newChild.key;\n for (\n isUnkeyedTopLevelFragment = currentFirstChild;\n null !== isUnkeyedTopLevelFragment;\n\n ) {\n if (isUnkeyedTopLevelFragment.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === isUnkeyedTopLevelFragment.tag) {\n deleteRemainingChildren(\n returnFiber,\n isUnkeyedTopLevelFragment.sibling\n );\n currentFirstChild = useFiber(\n isUnkeyedTopLevelFragment,\n newChild.props.children\n );\n currentFirstChild.return = returnFiber;\n returnFiber = currentFirstChild;\n break a;\n }\n } else if (isUnkeyedTopLevelFragment.elementType === key) {\n deleteRemainingChildren(\n returnFiber,\n isUnkeyedTopLevelFragment.sibling\n );\n currentFirstChild = useFiber(\n isUnkeyedTopLevelFragment,\n newChild.props\n );\n currentFirstChild.ref = coerceRef(\n returnFiber,\n isUnkeyedTopLevelFragment,\n newChild\n );\n currentFirstChild.return = returnFiber;\n returnFiber = currentFirstChild;\n break a;\n }\n deleteRemainingChildren(returnFiber, isUnkeyedTopLevelFragment);\n break;\n } else deleteChild(returnFiber, isUnkeyedTopLevelFragment);\n isUnkeyedTopLevelFragment = isUnkeyedTopLevelFragment.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((currentFirstChild = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (currentFirstChild.return = returnFiber),\n (returnFiber = currentFirstChild))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n (lanes.ref = coerceRef(\n returnFiber,\n currentFirstChild,\n newChild\n )),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (\n isUnkeyedTopLevelFragment = newChild.key;\n null !== currentFirstChild;\n\n ) {\n if (currentFirstChild.key === isUnkeyedTopLevelFragment)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n currentFirstChild = useFiber(\n currentFirstChild,\n newChild.children || []\n );\n currentFirstChild.return = returnFiber;\n returnFiber = currentFirstChild;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n currentFirstChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n );\n currentFirstChild.return = returnFiber;\n returnFiber = currentFirstChild;\n }\n return placeSingleChild(returnFiber);\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild))\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n if (\"string\" === typeof newChild || \"number\" === typeof newChild)\n return (\n (newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (currentFirstChild = useFiber(currentFirstChild, newChild)),\n (currentFirstChild.return = returnFiber),\n (returnFiber = currentFirstChild))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (currentFirstChild = createFiberFromText(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (currentFirstChild.return = returnFiber),\n (returnFiber = currentFirstChild)),\n placeSingleChild(returnFiber)\n );\n if (\"undefined\" === typeof newChild && !isUnkeyedTopLevelFragment)\n switch (returnFiber.tag) {\n case 1:\n case 0:\n case 11:\n case 15:\n throw Error(\n (getComponentNameFromFiber(returnFiber) || \"Component\") +\n \"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.\"\n );\n }\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n };\n}\nvar reconcileChildFibers = ChildReconciler(!0),\n mountChildFibers = ChildReconciler(!1),\n NO_CONTEXT = {},\n contextStackCursor$1 = createCursor(NO_CONTEXT),\n contextFiberStackCursor = createCursor(NO_CONTEXT),\n rootInstanceStackCursor = createCursor(NO_CONTEXT);\nfunction requiredContext(c) {\n if (c === NO_CONTEXT)\n throw Error(\n \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\"\n );\n return c;\n}\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor$1, NO_CONTEXT);\n pop(contextStackCursor$1);\n push(contextStackCursor$1, { isInAParentText: !1 });\n}\nfunction popHostContainer() {\n pop(contextStackCursor$1);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n requiredContext(rootInstanceStackCursor.current);\n var context = requiredContext(contextStackCursor$1.current);\n var JSCompiler_inline_result = fiber.type;\n JSCompiler_inline_result =\n \"AndroidTextInput\" === JSCompiler_inline_result ||\n \"RCTMultilineTextInputView\" === JSCompiler_inline_result ||\n \"RCTSinglelineTextInputView\" === JSCompiler_inline_result ||\n \"RCTText\" === JSCompiler_inline_result ||\n \"RCTVirtualText\" === JSCompiler_inline_result;\n JSCompiler_inline_result =\n context.isInAParentText !== JSCompiler_inline_result\n ? { isInAParentText: JSCompiler_inline_result }\n : context;\n context !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor$1, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor$1), pop(contextFiberStackCursor));\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (null !== state && (null === state.dehydrated || shim$1() || shim$1()))\n return node;\n } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar workInProgressSources = [];\nfunction resetWorkInProgressVersions() {\n for (var i = 0; i < workInProgressSources.length; i++)\n workInProgressSources[i]._workInProgressVersionSecondary = null;\n workInProgressSources.length = 0;\n}\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig,\n renderLanes = 0,\n currentlyRenderingFiber$1 = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\nfunction throwInvalidHookError() {\n throw Error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber$1 = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactCurrentDispatcher$1.current =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n current = Component(props, secondArg);\n if (didScheduleRenderPhaseUpdateDuringThisPass) {\n nextRenderLanes = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (!(25 > nextRenderLanes))\n throw Error(\n \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\"\n );\n nextRenderLanes += 1;\n workInProgressHook = currentHook = null;\n workInProgress.updateQueue = null;\n ReactCurrentDispatcher$1.current = HooksDispatcherOnRerender;\n current = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n }\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n workInProgress = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber$1 = null;\n didScheduleRenderPhaseUpdate = !1;\n if (workInProgress)\n throw Error(\n \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\"\n );\n return current;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber$1.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber$1.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook)\n throw Error(\"Rendered more hooks than during the previous render.\");\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber$1.memoizedState = workInProgressHook = nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. This is likely a bug in React. Please file an issue.\"\n );\n queue.lastRenderedReducer = reducer;\n var current = currentHook,\n baseQueue = current.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n if (null !== baseQueue) {\n pendingQueue = baseQueue.next;\n current = current.baseState;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = pendingQueue;\n do {\n var updateLane = update.lane;\n if ((renderLanes & updateLane) === updateLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next = {\n lane: 0,\n action: update.action,\n eagerReducer: update.eagerReducer,\n eagerState: update.eagerState,\n next: null\n }),\n (current =\n update.eagerReducer === reducer\n ? update.eagerState\n : reducer(current, update.action));\n else {\n var clone = {\n lane: updateLane,\n action: update.action,\n eagerReducer: update.eagerReducer,\n eagerState: update.eagerState,\n next: null\n };\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = clone),\n (baseFirst = current))\n : (newBaseQueueLast = newBaseQueueLast.next = clone);\n currentlyRenderingFiber$1.lanes |= updateLane;\n workInProgressRootSkippedLanes |= updateLane;\n }\n update = update.next;\n } while (null !== update && update !== pendingQueue);\n null === newBaseQueueLast\n ? (baseFirst = current)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n objectIs(current, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = current;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = current;\n }\n reducer = queue.interleaved;\n if (null !== reducer) {\n baseQueue = reducer;\n do\n (pendingQueue = baseQueue.lane),\n (currentlyRenderingFiber$1.lanes |= pendingQueue),\n (workInProgressRootSkippedLanes |= pendingQueue),\n (baseQueue = baseQueue.next);\n while (baseQueue !== reducer);\n } else null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. This is likely a bug in React. Please file an issue.\"\n );\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction readFromUnsubcribedMutableSource(root, source, getSnapshot) {\n var getVersion = source._getVersion;\n getVersion = getVersion(source._source);\n var JSCompiler_inline_result = source._workInProgressVersionSecondary;\n if (null !== JSCompiler_inline_result)\n root = JSCompiler_inline_result === getVersion;\n else if (\n ((root = root.mutableReadLanes), (root = (renderLanes & root) === root))\n )\n (source._workInProgressVersionSecondary = getVersion),\n workInProgressSources.push(source);\n if (root) return getSnapshot(source._source);\n workInProgressSources.push(source);\n throw Error(\n \"Cannot read from mutable source during the current render without tearing. This may be a bug in React. Please file an issue.\"\n );\n}\nfunction useMutableSource(hook, source, getSnapshot, subscribe) {\n var root = workInProgressRoot;\n if (null === root)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n var getVersion = source._getVersion,\n version = getVersion(source._source),\n dispatcher = ReactCurrentDispatcher$1.current,\n _dispatcher$useState = dispatcher.useState(function() {\n return readFromUnsubcribedMutableSource(root, source, getSnapshot);\n }),\n setSnapshot = _dispatcher$useState[1],\n snapshot = _dispatcher$useState[0];\n _dispatcher$useState = workInProgressHook;\n var memoizedState = hook.memoizedState,\n refs = memoizedState.refs,\n prevGetSnapshot = refs.getSnapshot,\n prevSource = memoizedState.source;\n memoizedState = memoizedState.subscribe;\n var fiber = currentlyRenderingFiber$1;\n hook.memoizedState = { refs: refs, source: source, subscribe: subscribe };\n dispatcher.useEffect(\n function() {\n refs.getSnapshot = getSnapshot;\n refs.setSnapshot = setSnapshot;\n var maybeNewVersion = getVersion(source._source);\n objectIs(version, maybeNewVersion) ||\n ((maybeNewVersion = getSnapshot(source._source)),\n objectIs(snapshot, maybeNewVersion) ||\n (setSnapshot(maybeNewVersion),\n (maybeNewVersion = requestUpdateLane(fiber)),\n (root.mutableReadLanes |= maybeNewVersion & root.pendingLanes)),\n markRootEntangled(root, root.mutableReadLanes));\n },\n [getSnapshot, source, subscribe]\n );\n dispatcher.useEffect(\n function() {\n return subscribe(source._source, function() {\n var latestGetSnapshot = refs.getSnapshot,\n latestSetSnapshot = refs.setSnapshot;\n try {\n latestSetSnapshot(latestGetSnapshot(source._source));\n var lane = requestUpdateLane(fiber);\n root.mutableReadLanes |= lane & root.pendingLanes;\n } catch (error) {\n latestSetSnapshot(function() {\n throw error;\n });\n }\n });\n },\n [source, subscribe]\n );\n (objectIs(prevGetSnapshot, getSnapshot) &&\n objectIs(prevSource, source) &&\n objectIs(memoizedState, subscribe)) ||\n ((hook = {\n pending: null,\n interleaved: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: snapshot\n }),\n (hook.dispatch = setSnapshot = dispatchAction.bind(\n null,\n currentlyRenderingFiber$1,\n hook\n )),\n (_dispatcher$useState.queue = hook),\n (_dispatcher$useState.baseQueue = null),\n (snapshot = readFromUnsubcribedMutableSource(root, source, getSnapshot)),\n (_dispatcher$useState.memoizedState = _dispatcher$useState.baseState = snapshot));\n return snapshot;\n}\nfunction updateMutableSource(source, getSnapshot, subscribe) {\n var hook = updateWorkInProgressHook();\n return useMutableSource(hook, source, getSnapshot, subscribe);\n}\nfunction mountState(initialState) {\n var hook = mountWorkInProgressHook();\n \"function\" === typeof initialState && (initialState = initialState());\n hook.memoizedState = hook.baseState = initialState;\n initialState = hook.queue = {\n pending: null,\n interleaved: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n initialState = initialState.dispatch = dispatchAction.bind(\n null,\n currentlyRenderingFiber$1,\n initialState\n );\n return [hook.memoizedState, initialState];\n}\nfunction pushEffect(tag, create, destroy, deps) {\n tag = { tag: tag, create: create, destroy: destroy, deps: deps, next: null };\n create = currentlyRenderingFiber$1.updateQueue;\n null === create\n ? ((create = { lastEffect: null }),\n (currentlyRenderingFiber$1.updateQueue = create),\n (create.lastEffect = tag.next = tag))\n : ((destroy = create.lastEffect),\n null === destroy\n ? (create.lastEffect = tag.next = tag)\n : ((deps = destroy.next),\n (destroy.next = tag),\n (tag.next = deps),\n (create.lastEffect = tag)));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(\n 1 | hookFlags,\n create,\n void 0,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var destroy = void 0;\n if (null !== currentHook) {\n var prevEffect = currentHook.memoizedState;\n destroy = prevEffect.destroy;\n if (null !== deps && areHookInputsEqual(deps, prevEffect.deps)) {\n hook.memoizedState = pushEffect(hookFlags, create, destroy, deps);\n return;\n }\n }\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(1 | hookFlags, create, destroy, deps);\n}\nfunction mountEffect(create, deps) {\n return mountEffectImpl(1049600, 4, create, deps);\n}\nfunction updateEffect(create, deps) {\n return updateEffectImpl(1024, 4, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref)\n return (\n (create = create()),\n ref(create),\n function() {\n ref(null);\n }\n );\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function() {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n return updateEffectImpl(\n 4,\n 2,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (\n null !== prevState &&\n null !== deps &&\n areHookInputsEqual(deps, prevState[1])\n )\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (\n null !== prevState &&\n null !== deps &&\n areHookInputsEqual(deps, prevState[1])\n )\n return prevState[0];\n nextCreate = nextCreate();\n hook.memoizedState = [nextCreate, deps];\n return nextCreate;\n}\nfunction startTransition(setPending, callback) {\n var previousPriority = currentUpdatePriority;\n currentUpdatePriority =\n 0 !== previousPriority && 4 > previousPriority ? previousPriority : 4;\n setPending(!0);\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = 1;\n try {\n setPending(!1), callback();\n } finally {\n (currentUpdatePriority = previousPriority),\n (ReactCurrentBatchConfig$1.transition = prevTransition);\n }\n}\nfunction dispatchAction(fiber, queue, action) {\n var eventTime = requestEventTime(),\n lane = requestUpdateLane(fiber),\n update = {\n lane: lane,\n action: action,\n eagerReducer: null,\n eagerState: null,\n next: null\n },\n alternate = fiber.alternate;\n if (\n fiber === currentlyRenderingFiber$1 ||\n (null !== alternate && alternate === currentlyRenderingFiber$1)\n )\n (didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = !0),\n (lane = queue.pending),\n null === lane\n ? (update.next = update)\n : ((update.next = lane.next), (lane.next = update)),\n (queue.pending = update);\n else {\n if (\n null !== workInProgressRoot &&\n 0 !== (fiber.mode & 1) &&\n 0 === (executionContext & 8)\n ) {\n var interleaved = queue.interleaved;\n null === interleaved\n ? ((update.next = update),\n null === interleavedQueues\n ? (interleavedQueues = [queue])\n : interleavedQueues.push(queue))\n : ((update.next = interleaved.next), (interleaved.next = update));\n queue.interleaved = update;\n } else\n (interleaved = queue.pending),\n null === interleaved\n ? (update.next = update)\n : ((update.next = interleaved.next), (interleaved.next = update)),\n (queue.pending = update);\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.eagerReducer = alternate;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState)) return;\n } catch (error) {\n } finally {\n }\n update = scheduleUpdateOnFiber(fiber, lane, eventTime);\n 0 !== (lane & 4194240) &&\n null !== update &&\n ((fiber = queue.lanes),\n (fiber &= update.pendingLanes),\n (lane |= fiber),\n (queue.lanes = lane),\n markRootEntangled(update, lane));\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useMutableSource: throwInvalidHookError,\n useOpaqueIdentifier: throwInvalidHookError,\n unstable_isNewReconciler: !1\n },\n HooksDispatcherOnMount = {\n readContext: readContext,\n useCallback: function(callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n return mountEffectImpl(\n 4,\n 2,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function(create, deps) {\n return mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n nextCreate = nextCreate();\n hook.memoizedState = [nextCreate, deps];\n return nextCreate;\n },\n useReducer: function(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n initialArg = void 0 !== init ? init(initialArg) : initialArg;\n hook.memoizedState = hook.baseState = initialArg;\n reducer = hook.queue = {\n pending: null,\n interleaved: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialArg\n };\n reducer = reducer.dispatch = dispatchAction.bind(\n null,\n currentlyRenderingFiber$1,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function(initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: mountState,\n useDebugValue: mountDebugValue,\n useDeferredValue: function(value) {\n var _mountState = mountState(value),\n prevValue = _mountState[0],\n setValue = _mountState[1];\n mountEffect(\n function() {\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = 1;\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.transition = prevTransition;\n }\n },\n [value]\n );\n return prevValue;\n },\n useTransition: function() {\n var _mountState2 = mountState(!1),\n isPending = _mountState2[0];\n _mountState2 = startTransition.bind(null, _mountState2[1]);\n mountWorkInProgressHook().memoizedState = _mountState2;\n return [isPending, _mountState2];\n },\n useMutableSource: function(source, getSnapshot, subscribe) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = {\n refs: { getSnapshot: getSnapshot, setSnapshot: null },\n source: source,\n subscribe: subscribe\n };\n return useMutableSource(hook, source, getSnapshot, subscribe);\n },\n useOpaqueIdentifier: function() {\n throw Error(\"Not yet implemented\");\n },\n unstable_isNewReconciler: !1\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function() {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function(value) {\n var _updateState = updateReducer(basicStateReducer),\n prevValue = _updateState[0],\n setValue = _updateState[1];\n updateEffect(\n function() {\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = 1;\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.transition = prevTransition;\n }\n },\n [value]\n );\n return prevValue;\n },\n useTransition: function() {\n var isPending = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [isPending, start];\n },\n useMutableSource: updateMutableSource,\n useOpaqueIdentifier: function() {\n return updateReducer(basicStateReducer)[0];\n },\n unstable_isNewReconciler: !1\n },\n HooksDispatcherOnRerender = {\n readContext: readContext,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function() {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function(value) {\n var _rerenderState = rerenderReducer(basicStateReducer),\n prevValue = _rerenderState[0],\n setValue = _rerenderState[1];\n updateEffect(\n function() {\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = 1;\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.transition = prevTransition;\n }\n },\n [value]\n );\n return prevValue;\n },\n useTransition: function() {\n var isPending = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [isPending, start];\n },\n useMutableSource: updateMutableSource,\n useOpaqueIdentifier: function() {\n return rerenderReducer(basicStateReducer)[0];\n },\n unstable_isNewReconciler: !1\n };\nfunction createCapturedValue(value, source) {\n try {\n var info = \"\",\n node = source;\n do (info += describeFiber(node)), (node = node.return);\n while (node);\n var JSCompiler_inline_result = info;\n } catch (x) {\n JSCompiler_inline_result =\n \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n return { value: value, source: source, stack: JSCompiler_inline_result };\n}\nif (\n \"function\" !==\n typeof ReactNativePrivateInterface.ReactFiberErrorDialog.showErrorDialog\n)\n throw Error(\n \"Expected ReactFiberErrorDialog.showErrorDialog to be a function.\"\n );\nfunction logCapturedError(boundary, errorInfo) {\n try {\n !1 !==\n ReactNativePrivateInterface.ReactFiberErrorDialog.showErrorDialog({\n componentStack: null !== errorInfo.stack ? errorInfo.stack : \"\",\n error: errorInfo.value,\n errorBoundary:\n null !== boundary && 1 === boundary.tag ? boundary.stateNode : null\n }) && console.error(errorInfo.value);\n } catch (e) {\n setTimeout(function() {\n throw e;\n });\n }\n}\nvar PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map;\nfunction createRootErrorUpdate(fiber, errorInfo, lane) {\n lane = createUpdate(-1, lane);\n lane.tag = 3;\n lane.payload = { element: null };\n var error = errorInfo.value;\n lane.callback = function() {\n hasUncaughtError || ((hasUncaughtError = !0), (firstUncaughtError = error));\n logCapturedError(fiber, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(fiber, errorInfo, lane) {\n lane = createUpdate(-1, lane);\n lane.tag = 3;\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n lane.payload = function() {\n logCapturedError(fiber, errorInfo);\n return getDerivedStateFromError(error);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (lane.callback = function() {\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this),\n logCapturedError(fiber, errorInfo));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n return lane;\n}\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner,\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n prepareToReadContext(workInProgress, renderLanes);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n ref,\n renderLanes\n );\n if (null !== current && !didReceiveUpdate)\n return (\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.flags &= -1029),\n (current.lanes &= ~renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n updateLanes,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare &&\n void 0 === Component.defaultProps\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n updateLanes,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (\n 0 === (updateLanes & renderLanes) &&\n ((updateLanes = type.memoizedProps),\n (Component = Component.compare),\n (Component = null !== Component ? Component : shallowEqual),\n Component(updateLanes, nextProps) && current.ref === workInProgress.ref)\n )\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n updateLanes,\n renderLanes\n) {\n if (\n null !== current &&\n shallowEqual(current.memoizedProps, nextProps) &&\n current.ref === workInProgress.ref\n ) {\n didReceiveUpdate = !1;\n if (0 === (renderLanes & updateLanes))\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n 0 !== (current.flags & 32768) && (didReceiveUpdate = !0);\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n if (\n \"hidden\" === nextProps.mode ||\n \"unstable-defer-without-hiding\" === nextProps.mode\n )\n if (0 === (workInProgress.mode & 1))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n push(subtreeRenderLanesCursor, subtreeRenderLanes),\n (subtreeRenderLanes |= renderLanes);\n else {\n if (0 === (renderLanes & 1073741824))\n return (\n (current =\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes),\n (workInProgress.lanes = workInProgress.childLanes = 1073741824),\n (workInProgress.memoizedState = {\n baseLanes: current,\n cachePool: null\n }),\n (workInProgress.updateQueue = null),\n push(subtreeRenderLanesCursor, subtreeRenderLanes),\n (subtreeRenderLanes |= current),\n null\n );\n workInProgress.memoizedState = { baseLanes: 0, cachePool: null };\n nextProps = null !== prevState ? prevState.baseLanes : renderLanes;\n push(subtreeRenderLanesCursor, subtreeRenderLanes);\n subtreeRenderLanes |= nextProps;\n }\n else\n null !== prevState\n ? ((nextProps = prevState.baseLanes | renderLanes),\n (workInProgress.memoizedState = null))\n : (nextProps = renderLanes),\n push(subtreeRenderLanesCursor, subtreeRenderLanes),\n (subtreeRenderLanes |= nextProps);\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (\n (null === current && null !== ref) ||\n (null !== current && current.ref !== ref)\n )\n workInProgress.flags |= 256;\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n var context = isContextProvider(Component)\n ? previousContext\n : contextStackCursor.current;\n context = getMaskedContext(workInProgress, context);\n prepareToReadContext(workInProgress, renderLanes);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n context,\n renderLanes\n );\n if (null !== current && !didReceiveUpdate)\n return (\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.flags &= -1029),\n (current.lanes &= ~renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (isContextProvider(Component)) {\n var hasContext = !0;\n pushContextProvider(workInProgress);\n } else hasContext = !1;\n prepareToReadContext(workInProgress, renderLanes);\n if (null === workInProgress.stateNode)\n null !== current &&\n ((current.alternate = null),\n (workInProgress.alternate = null),\n (workInProgress.flags |= 2)),\n constructClassInstance(workInProgress, Component, nextProps),\n mountClassInstance(workInProgress, Component, nextProps, renderLanes),\n (nextProps = !0);\n else if (null === current) {\n var instance = workInProgress.stateNode,\n oldProps = workInProgress.memoizedProps;\n instance.props = oldProps;\n var oldContext = instance.context,\n contextType = Component.contextType;\n \"object\" === typeof contextType && null !== contextType\n ? (contextType = readContext(contextType))\n : ((contextType = isContextProvider(Component)\n ? previousContext\n : contextStackCursor.current),\n (contextType = getMaskedContext(workInProgress, contextType)));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps,\n hasNewLifecycles =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof instance.getSnapshotBeforeUpdate;\n hasNewLifecycles ||\n (\"function\" !== typeof instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof instance.componentWillReceiveProps) ||\n ((oldProps !== nextProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n instance,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, instance, renderLanes);\n oldContext = workInProgress.memoizedState;\n oldProps !== nextProps ||\n oldState !== oldContext ||\n didPerformWorkStackCursor.current ||\n hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (hasNewLifecycles ||\n (\"function\" !== typeof instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof instance.componentWillMount) ||\n (\"function\" === typeof instance.componentWillMount &&\n instance.componentWillMount(),\n \"function\" === typeof instance.UNSAFE_componentWillMount &&\n instance.UNSAFE_componentWillMount()),\n \"function\" === typeof instance.componentDidMount &&\n (workInProgress.flags |= 4))\n : (\"function\" === typeof instance.componentDidMount &&\n (workInProgress.flags |= 4),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (instance.props = nextProps),\n (instance.state = oldContext),\n (instance.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof instance.componentDidMount &&\n (workInProgress.flags |= 4),\n (nextProps = !1));\n } else {\n instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n oldProps = workInProgress.memoizedProps;\n contextType =\n workInProgress.type === workInProgress.elementType\n ? oldProps\n : resolveDefaultProps(workInProgress.type, oldProps);\n instance.props = contextType;\n hasNewLifecycles = workInProgress.pendingProps;\n oldState = instance.context;\n oldContext = Component.contextType;\n \"object\" === typeof oldContext && null !== oldContext\n ? (oldContext = readContext(oldContext))\n : ((oldContext = isContextProvider(Component)\n ? previousContext\n : contextStackCursor.current),\n (oldContext = getMaskedContext(workInProgress, oldContext)));\n var getDerivedStateFromProps$jscomp$0 = Component.getDerivedStateFromProps;\n (getDerivedStateFromProps =\n \"function\" === typeof getDerivedStateFromProps$jscomp$0 ||\n \"function\" === typeof instance.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof instance.componentWillReceiveProps) ||\n ((oldProps !== hasNewLifecycles || oldState !== oldContext) &&\n callComponentWillReceiveProps(\n workInProgress,\n instance,\n nextProps,\n oldContext\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, instance, renderLanes);\n var newState = workInProgress.memoizedState;\n oldProps !== hasNewLifecycles ||\n oldState !== newState ||\n didPerformWorkStackCursor.current ||\n hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps$jscomp$0 &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps$jscomp$0,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType,\n nextProps,\n oldState,\n newState,\n oldContext\n ) ||\n !1)\n ? (getDerivedStateFromProps ||\n (\"function\" !== typeof instance.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof instance.componentWillUpdate) ||\n (\"function\" === typeof instance.componentWillUpdate &&\n instance.componentWillUpdate(nextProps, newState, oldContext),\n \"function\" === typeof instance.UNSAFE_componentWillUpdate &&\n instance.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldContext\n )),\n \"function\" === typeof instance.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof instance.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 512))\n : (\"function\" !== typeof instance.componentDidUpdate ||\n (oldProps === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof instance.getSnapshotBeforeUpdate ||\n (oldProps === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 512),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (instance.props = nextProps),\n (instance.state = newState),\n (instance.context = oldContext),\n (nextProps = contextType))\n : (\"function\" !== typeof instance.componentDidUpdate ||\n (oldProps === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof instance.getSnapshotBeforeUpdate ||\n (oldProps === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 512),\n (nextProps = !1));\n }\n return finishClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n hasContext,\n renderLanes\n );\n}\nfunction finishClassComponent(\n current,\n workInProgress,\n Component,\n shouldUpdate,\n hasContext,\n renderLanes\n) {\n markRef(current, workInProgress);\n var didCaptureError = 0 !== (workInProgress.flags & 128);\n if (!shouldUpdate && !didCaptureError)\n return (\n hasContext && invalidateContextProvider(workInProgress, Component, !1),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n shouldUpdate = workInProgress.stateNode;\n ReactCurrentOwner$1.current = workInProgress;\n var nextChildren =\n didCaptureError && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : shouldUpdate.render();\n workInProgress.flags |= 1;\n null !== current && didCaptureError\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n nextChildren,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n workInProgress.memoizedState = shouldUpdate.state;\n hasContext && invalidateContextProvider(workInProgress, Component, !0);\n return workInProgress.child;\n}\nfunction pushHostRootContext(workInProgress) {\n var root = workInProgress.stateNode;\n root.pendingContext\n ? pushTopLevelContextObject(\n workInProgress,\n root.pendingContext,\n root.pendingContext !== root.context\n )\n : root.context &&\n pushTopLevelContextObject(workInProgress, root.context, !1);\n pushHostContainer(workInProgress, root.containerInfo);\n}\nvar SUSPENDED_MARKER = { dehydrated: null, retryLane: 0 };\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: null };\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n suspenseContext = suspenseStackCursor.current,\n showFallback = !1,\n JSCompiler_temp;\n (JSCompiler_temp = 0 !== (workInProgress.flags & 128)) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseContext & 2));\n JSCompiler_temp\n ? ((showFallback = !0), (workInProgress.flags &= -129))\n : (null !== current && null === current.memoizedState) ||\n void 0 === nextProps.fallback ||\n !0 === nextProps.unstable_avoidThisFallback ||\n (suspenseContext |= 1);\n push(suspenseStackCursor, suspenseContext & 1);\n if (null === current) {\n current = nextProps.children;\n suspenseContext = nextProps.fallback;\n if (showFallback)\n return (\n (current = mountSuspenseFallbackChildren(\n workInProgress,\n current,\n suspenseContext,\n renderLanes\n )),\n (workInProgress.child.memoizedState = mountSuspenseOffscreenState(\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n current\n );\n if (\"number\" === typeof nextProps.unstable_expectedLoadTime)\n return (\n (current = mountSuspenseFallbackChildren(\n workInProgress,\n current,\n suspenseContext,\n renderLanes\n )),\n (workInProgress.child.memoizedState = mountSuspenseOffscreenState(\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress.lanes = 4194304),\n current\n );\n renderLanes = createFiberFromOffscreen(\n { mode: \"visible\", children: current },\n workInProgress.mode,\n renderLanes,\n null\n );\n renderLanes.return = workInProgress;\n return (workInProgress.child = renderLanes);\n }\n if (null !== current.memoizedState) {\n if (showFallback)\n return (\n (nextProps = updateSuspenseFallbackChildren(\n current,\n workInProgress,\n nextProps.children,\n nextProps.fallback,\n renderLanes\n )),\n (showFallback = workInProgress.child),\n (suspenseContext = current.child.memoizedState),\n (showFallback.memoizedState =\n null === suspenseContext\n ? mountSuspenseOffscreenState(renderLanes)\n : {\n baseLanes: suspenseContext.baseLanes | renderLanes,\n cachePool: null\n }),\n (showFallback.childLanes = current.childLanes & ~renderLanes),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n nextProps\n );\n renderLanes = updateSuspensePrimaryChildren(\n current,\n workInProgress,\n nextProps.children,\n renderLanes\n );\n workInProgress.memoizedState = null;\n return renderLanes;\n }\n if (showFallback)\n return (\n (nextProps = updateSuspenseFallbackChildren(\n current,\n workInProgress,\n nextProps.children,\n nextProps.fallback,\n renderLanes\n )),\n (showFallback = workInProgress.child),\n (suspenseContext = current.child.memoizedState),\n (showFallback.memoizedState =\n null === suspenseContext\n ? mountSuspenseOffscreenState(renderLanes)\n : {\n baseLanes: suspenseContext.baseLanes | renderLanes,\n cachePool: null\n }),\n (showFallback.childLanes = current.childLanes & ~renderLanes),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n nextProps\n );\n renderLanes = updateSuspensePrimaryChildren(\n current,\n workInProgress,\n nextProps.children,\n renderLanes\n );\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspenseFallbackChildren(\n workInProgress,\n primaryChildren,\n fallbackChildren,\n renderLanes\n) {\n var mode = workInProgress.mode,\n progressedPrimaryFragment = workInProgress.child;\n primaryChildren = { mode: \"hidden\", children: primaryChildren };\n 0 === (mode & 1) && null !== progressedPrimaryFragment\n ? ((progressedPrimaryFragment.childLanes = 0),\n (progressedPrimaryFragment.pendingProps = primaryChildren))\n : (progressedPrimaryFragment = createFiberFromOffscreen(\n primaryChildren,\n mode,\n 0,\n null\n ));\n fallbackChildren = createFiberFromFragment(\n fallbackChildren,\n mode,\n renderLanes,\n null\n );\n progressedPrimaryFragment.return = workInProgress;\n fallbackChildren.return = workInProgress;\n progressedPrimaryFragment.sibling = fallbackChildren;\n workInProgress.child = progressedPrimaryFragment;\n return fallbackChildren;\n}\nfunction updateSuspensePrimaryChildren(\n current,\n workInProgress,\n primaryChildren,\n renderLanes\n) {\n var currentPrimaryChildFragment = current.child;\n current = currentPrimaryChildFragment.sibling;\n primaryChildren = createWorkInProgress(currentPrimaryChildFragment, {\n mode: \"visible\",\n children: primaryChildren\n });\n 0 === (workInProgress.mode & 1) && (primaryChildren.lanes = renderLanes);\n primaryChildren.return = workInProgress;\n primaryChildren.sibling = null;\n null !== current &&\n ((renderLanes = workInProgress.deletions),\n null === renderLanes\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : renderLanes.push(current));\n return (workInProgress.child = primaryChildren);\n}\nfunction updateSuspenseFallbackChildren(\n current,\n workInProgress,\n primaryChildren,\n fallbackChildren,\n renderLanes\n) {\n var mode = workInProgress.mode;\n current = current.child;\n var currentFallbackChildFragment = current.sibling,\n primaryChildProps = { mode: \"hidden\", children: primaryChildren };\n 0 === (mode & 1) && workInProgress.child !== current\n ? ((primaryChildren = workInProgress.child),\n (primaryChildren.childLanes = 0),\n (primaryChildren.pendingProps = primaryChildProps),\n (workInProgress.deletions = null))\n : ((primaryChildren = createWorkInProgress(current, primaryChildProps)),\n (primaryChildren.subtreeFlags = current.subtreeFlags & 1835008));\n null !== currentFallbackChildFragment\n ? (fallbackChildren = createWorkInProgress(\n currentFallbackChildFragment,\n fallbackChildren\n ))\n : ((fallbackChildren = createFiberFromFragment(\n fallbackChildren,\n mode,\n renderLanes,\n null\n )),\n (fallbackChildren.flags |= 2));\n fallbackChildren.return = workInProgress;\n primaryChildren.return = workInProgress;\n primaryChildren.sibling = fallbackChildren;\n workInProgress.child = primaryChildren;\n return fallbackChildren;\n}\nfunction scheduleWorkOnFiber(fiber, renderLanes) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleWorkOnParentPath(fiber.return, renderLanes);\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n nextProps = suspenseStackCursor.current;\n if (0 !== (nextProps & 2))\n (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n else {\n if (null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleWorkOnFiber(current, renderLanes);\n else if (19 === current.tag) scheduleWorkOnFiber(current, renderLanes);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n nextProps &= 1;\n }\n push(suspenseStackCursor, nextProps);\n if (0 === (workInProgress.mode & 1)) workInProgress.memoizedState = null;\n else\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode\n );\n break;\n case \"backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode\n );\n break;\n case \"together\":\n initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes)) return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(\"Resuming work not yet implemented.\");\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling = createWorkInProgress(\n current,\n current.pendingProps\n )),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction hadNoMutationsEffects(current, completedWork) {\n if (null !== current && current.child === completedWork.child) return !0;\n if (0 !== (completedWork.flags & 16)) return !1;\n for (current = completedWork.child; null !== current; ) {\n if (0 !== (current.flags & 6454) || 0 !== (current.subtreeFlags & 6454))\n return !1;\n current = current.sibling;\n }\n return !0;\n}\nvar appendAllChildren,\n updateHostContainer,\n updateHostComponent$1,\n updateHostText$1;\nappendAllChildren = function(\n parent,\n workInProgress,\n needsVisibilityToggle,\n isHidden\n) {\n for (var node = workInProgress.child; null !== node; ) {\n if (5 === node.tag) {\n var instance = node.stateNode;\n needsVisibilityToggle &&\n isHidden &&\n (instance = cloneHiddenInstance(instance));\n appendChildNode(parent.node, instance.node);\n } else if (6 === node.tag) {\n instance = node.stateNode;\n if (needsVisibilityToggle && isHidden)\n throw Error(\"Not yet implemented.\");\n appendChildNode(parent.node, instance.node);\n } else if (4 !== node.tag) {\n if (\n 13 === node.tag &&\n 0 !== (node.flags & 4) &&\n (instance = null !== node.memoizedState)\n ) {\n var primaryChildParent = node.child;\n if (\n null !== primaryChildParent &&\n (null !== primaryChildParent.child &&\n ((primaryChildParent.child.return = primaryChildParent),\n appendAllChildren(parent, primaryChildParent, !0, instance)),\n (instance = primaryChildParent.sibling),\n null !== instance)\n ) {\n instance.return = node;\n node = instance;\n continue;\n }\n }\n if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n }\n if (node === workInProgress) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === workInProgress) return;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n};\nfunction appendAllChildrenToContainer(\n containerChildSet,\n workInProgress,\n needsVisibilityToggle,\n isHidden\n) {\n for (var node = workInProgress.child; null !== node; ) {\n if (5 === node.tag) {\n var instance = node.stateNode;\n needsVisibilityToggle &&\n isHidden &&\n (instance = cloneHiddenInstance(instance));\n appendChildNodeToSet(containerChildSet, instance.node);\n } else if (6 === node.tag) {\n instance = node.stateNode;\n if (needsVisibilityToggle && isHidden)\n throw Error(\"Not yet implemented.\");\n appendChildNodeToSet(containerChildSet, instance.node);\n } else if (4 !== node.tag) {\n if (\n 13 === node.tag &&\n 0 !== (node.flags & 4) &&\n (instance = null !== node.memoizedState)\n ) {\n var primaryChildParent = node.child;\n if (\n null !== primaryChildParent &&\n (null !== primaryChildParent.child &&\n ((primaryChildParent.child.return = primaryChildParent),\n appendAllChildrenToContainer(\n containerChildSet,\n primaryChildParent,\n !0,\n instance\n )),\n (instance = primaryChildParent.sibling),\n null !== instance)\n ) {\n instance.return = node;\n node = instance;\n continue;\n }\n }\n if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n }\n if (node === workInProgress) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === workInProgress) return;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\nupdateHostContainer = function(current, workInProgress) {\n var portalOrRoot = workInProgress.stateNode;\n if (!hadNoMutationsEffects(current, workInProgress)) {\n current = portalOrRoot.containerInfo;\n var newChildSet = createChildNodeSet(current);\n appendAllChildrenToContainer(newChildSet, workInProgress, !1, !1);\n portalOrRoot.pendingChildren = newChildSet;\n workInProgress.flags |= 4;\n completeRoot(current, newChildSet);\n }\n};\nupdateHostComponent$1 = function(current, workInProgress, type, newProps) {\n type = current.stateNode;\n var oldProps = current.memoizedProps;\n if (\n (current = hadNoMutationsEffects(current, workInProgress)) &&\n oldProps === newProps\n )\n workInProgress.stateNode = type;\n else {\n var recyclableInstance = workInProgress.stateNode;\n requiredContext(contextStackCursor$1.current);\n var updatePayload = null;\n oldProps !== newProps &&\n ((oldProps = diffProperties(\n null,\n oldProps,\n newProps,\n recyclableInstance.canonical.viewConfig.validAttributes\n )),\n (recyclableInstance.canonical.currentProps = newProps),\n (updatePayload = oldProps));\n current && null === updatePayload\n ? (workInProgress.stateNode = type)\n : ((newProps = updatePayload),\n (oldProps = type.node),\n (type = {\n node: current\n ? null !== newProps\n ? cloneNodeWithNewProps(oldProps, newProps)\n : cloneNode(oldProps)\n : null !== newProps\n ? cloneNodeWithNewChildrenAndProps(oldProps, newProps)\n : cloneNodeWithNewChildren(oldProps),\n canonical: type.canonical\n }),\n (workInProgress.stateNode = type),\n current\n ? (workInProgress.flags |= 4)\n : appendAllChildren(type, workInProgress, !1, !1));\n }\n};\nupdateHostText$1 = function(current, workInProgress, oldText, newText) {\n oldText !== newText\n ? ((current = requiredContext(rootInstanceStackCursor.current)),\n (oldText = requiredContext(contextStackCursor$1.current)),\n (workInProgress.stateNode = createTextInstance(\n newText,\n current,\n oldText,\n workInProgress\n )),\n (workInProgress.flags |= 4))\n : (workInProgress.stateNode = current.stateNode);\n};\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var lastTailNode$69 = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (lastTailNode$69 = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === lastTailNode$69\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode$69.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$70 = completedWork.child; null !== child$70; )\n (newChildLanes |= child$70.lanes | child$70.childLanes),\n (subtreeFlags |= child$70.subtreeFlags & 1835008),\n (subtreeFlags |= child$70.flags & 1835008),\n (child$70.return = completedWork),\n (child$70 = child$70.sibling);\n else\n for (child$70 = completedWork.child; null !== child$70; )\n (newChildLanes |= child$70.lanes | child$70.childLanes),\n (subtreeFlags |= child$70.subtreeFlags),\n (subtreeFlags |= child$70.flags),\n (child$70.return = completedWork),\n (child$70 = child$70.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n switch (workInProgress.tag) {\n case 2:\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return (\n isContextProvider(workInProgress.type) && popContext(),\n bubbleProperties(workInProgress),\n null\n );\n case 3:\n return (\n (newProps = workInProgress.stateNode),\n popHostContainer(),\n pop(didPerformWorkStackCursor),\n pop(contextStackCursor),\n resetWorkInProgressVersions(),\n newProps.pendingContext &&\n ((newProps.context = newProps.pendingContext),\n (newProps.pendingContext = null)),\n (null !== current && null !== current.child) ||\n newProps.hydrate ||\n (workInProgress.flags |= 512),\n updateHostContainer(current, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 5:\n popHostContext(workInProgress);\n renderLanes = requiredContext(rootInstanceStackCursor.current);\n var type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n updateHostComponent$1(\n current,\n workInProgress,\n type,\n newProps,\n renderLanes\n ),\n current.ref !== workInProgress.ref && (workInProgress.flags |= 256);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n requiredContext(contextStackCursor$1.current);\n current = nextReactTag;\n nextReactTag += 2;\n type = getViewConfigForType(type);\n var updatePayload = diffProperties(\n null,\n emptyObject,\n newProps,\n type.validAttributes\n );\n renderLanes = createNode(\n current,\n type.uiViewClassName,\n renderLanes,\n updatePayload,\n workInProgress\n );\n current = new ReactFabricHostComponent(\n current,\n type,\n newProps,\n workInProgress\n );\n current = { node: renderLanes, canonical: current };\n appendAllChildren(current, workInProgress, !1, !1);\n workInProgress.stateNode = current;\n null !== workInProgress.ref && (workInProgress.flags |= 256);\n }\n bubbleProperties(workInProgress);\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n updateHostText$1(\n current,\n workInProgress,\n current.memoizedProps,\n newProps\n );\n else {\n if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n current = requiredContext(rootInstanceStackCursor.current);\n renderLanes = requiredContext(contextStackCursor$1.current);\n workInProgress.stateNode = createTextInstance(\n newProps,\n current,\n renderLanes,\n workInProgress\n );\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n pop(suspenseStackCursor);\n newProps = workInProgress.memoizedState;\n if (0 !== (workInProgress.flags & 128))\n return (workInProgress.lanes = renderLanes), workInProgress;\n newProps = null !== newProps;\n renderLanes = !1;\n null !== current && (renderLanes = null !== current.memoizedState);\n if (newProps && !renderLanes && 0 !== (workInProgress.mode & 1))\n if (\n (null === current &&\n !0 !== workInProgress.memoizedProps.unstable_avoidThisFallback) ||\n 0 !== (suspenseStackCursor.current & 1)\n )\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3);\n else {\n if (\n 0 === workInProgressRootExitStatus ||\n 3 === workInProgressRootExitStatus\n )\n workInProgressRootExitStatus = 4;\n null === workInProgressRoot ||\n (0 === (workInProgressRootSkippedLanes & 268435455) &&\n 0 === (workInProgressRootUpdatedLanes & 268435455)) ||\n markRootSuspended$1(\n workInProgressRoot,\n workInProgressRootRenderLanes\n );\n }\n newProps && (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n return null;\n case 4:\n return (\n popHostContainer(),\n updateHostContainer(current, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type._context),\n bubbleProperties(workInProgress),\n null\n );\n case 17:\n return (\n isContextProvider(workInProgress.type) && popContext(),\n bubbleProperties(workInProgress),\n null\n );\n case 19:\n pop(suspenseStackCursor);\n type = workInProgress.memoizedState;\n if (null === type) return bubbleProperties(workInProgress), null;\n newProps = 0 !== (workInProgress.flags & 128);\n updatePayload = type.rendering;\n if (null === updatePayload)\n if (newProps) cutOffTailIfNeeded(type, !1);\n else {\n if (\n 0 !== workInProgressRootExitStatus ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n updatePayload = findFirstSuspended(current);\n if (null !== updatePayload) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(type, !1);\n current = updatePayload.updateQueue;\n null !== current &&\n ((workInProgress.updateQueue = current),\n (workInProgress.flags |= 4));\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (newProps = workInProgress.child; null !== newProps; )\n (renderLanes = newProps),\n (type = current),\n (renderLanes.flags &= 1835010),\n (updatePayload = renderLanes.alternate),\n null === updatePayload\n ? ((renderLanes.childLanes = 0),\n (renderLanes.lanes = type),\n (renderLanes.child = null),\n (renderLanes.subtreeFlags = 0),\n (renderLanes.memoizedProps = null),\n (renderLanes.memoizedState = null),\n (renderLanes.updateQueue = null),\n (renderLanes.dependencies = null),\n (renderLanes.stateNode = null))\n : ((renderLanes.childLanes = updatePayload.childLanes),\n (renderLanes.lanes = updatePayload.lanes),\n (renderLanes.child = updatePayload.child),\n (renderLanes.subtreeFlags = 0),\n (renderLanes.deletions = null),\n (renderLanes.memoizedProps =\n updatePayload.memoizedProps),\n (renderLanes.memoizedState =\n updatePayload.memoizedState),\n (renderLanes.updateQueue = updatePayload.updateQueue),\n (renderLanes.type = updatePayload.type),\n (type = updatePayload.dependencies),\n (renderLanes.dependencies =\n null === type\n ? null\n : {\n lanes: type.lanes,\n firstContext: type.firstContext\n })),\n (newProps = newProps.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current & 1) | 2\n );\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== type.tail &&\n now() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(type, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!newProps)\n if (\n ((current = findFirstSuspended(updatePayload)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (newProps = !0),\n (current = current.updateQueue),\n null !== current &&\n ((workInProgress.updateQueue = current),\n (workInProgress.flags |= 4)),\n cutOffTailIfNeeded(type, !0),\n null === type.tail &&\n \"hidden\" === type.tailMode &&\n !updatePayload.alternate)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now() - type.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 1073741824 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(type, !1),\n (workInProgress.lanes = 4194304));\n type.isBackwards\n ? ((updatePayload.sibling = workInProgress.child),\n (workInProgress.child = updatePayload))\n : ((current = type.last),\n null !== current\n ? (current.sibling = updatePayload)\n : (workInProgress.child = updatePayload),\n (type.last = updatePayload));\n }\n if (null !== type.tail)\n return (\n (workInProgress = type.tail),\n (type.rendering = workInProgress),\n (type.tail = workInProgress.sibling),\n (type.renderingStartTime = now()),\n (workInProgress.sibling = null),\n (current = suspenseStackCursor.current),\n push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n workInProgress\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popRenderLanes(),\n (renderLanes = null !== workInProgress.memoizedState),\n null !== current &&\n (null !== current.memoizedState) !== renderLanes &&\n \"unstable-defer-without-hiding\" !== newProps.mode &&\n (workInProgress.flags |= 4),\n (renderLanes &&\n 0 === (subtreeRenderLanes & 1073741824) &&\n 0 !== (workInProgress.mode & 1)) ||\n bubbleProperties(workInProgress),\n null\n );\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n}\nfunction unwindWork(workInProgress) {\n switch (workInProgress.tag) {\n case 1:\n isContextProvider(workInProgress.type) && popContext();\n var flags = workInProgress.flags;\n return flags & 16384\n ? ((workInProgress.flags = (flags & -16385) | 128), workInProgress)\n : null;\n case 3:\n popHostContainer();\n pop(didPerformWorkStackCursor);\n pop(contextStackCursor);\n resetWorkInProgressVersions();\n flags = workInProgress.flags;\n if (0 !== (flags & 128))\n throw Error(\n \"The root failed to unmount after an error. This is likely a bug in React. Please file an issue.\"\n );\n workInProgress.flags = (flags & -16385) | 128;\n return workInProgress;\n case 5:\n return popHostContext(workInProgress), null;\n case 13:\n return (\n pop(suspenseStackCursor),\n (flags = workInProgress.flags),\n flags & 16384\n ? ((workInProgress.flags = (flags & -16385) | 128), workInProgress)\n : null\n );\n case 19:\n return pop(suspenseStackCursor), null;\n case 4:\n return popHostContainer(), null;\n case 10:\n return popProvider(workInProgress.type._context), null;\n case 22:\n case 23:\n return popRenderLanes(), null;\n case 24:\n return null;\n default:\n return null;\n }\n}\nvar PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null;\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref;\n if (null !== ref)\n if (\"function\" === typeof ref)\n try {\n ref(null);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n else ref.current = null;\n}\nvar shouldFireAfterActiveInstanceBlur = !1;\nfunction commitBeforeMutationEffects(root, firstChild) {\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((root = nextEffect),\n (firstChild = root.child),\n 0 !== (root.subtreeFlags & 516) && null !== firstChild)\n )\n (firstChild.return = root), (nextEffect = firstChild);\n else\n for (; null !== nextEffect; ) {\n root = nextEffect;\n try {\n var current = root.alternate;\n if (0 !== (root.flags & 512))\n switch (root.tag) {\n case 0:\n case 11:\n case 15:\n break;\n case 1:\n if (null !== current) {\n var prevProps = current.memoizedProps,\n prevState = current.memoizedState,\n instance = root.stateNode,\n snapshot = instance.getSnapshotBeforeUpdate(\n root.elementType === root.type\n ? prevProps\n : resolveDefaultProps(root.type, prevProps),\n prevState\n );\n instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n }\n break;\n case 3:\n break;\n case 5:\n case 6:\n case 4:\n case 17:\n break;\n default:\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n } catch (error) {\n captureCommitPhaseError(root, root.return, error);\n }\n firstChild = root.sibling;\n if (null !== firstChild) {\n firstChild.return = root.return;\n nextEffect = firstChild;\n break;\n }\n nextEffect = root.return;\n }\n current = shouldFireAfterActiveInstanceBlur;\n shouldFireAfterActiveInstanceBlur = !1;\n return current;\n}\nfunction commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor$jscomp$0\n) {\n var updateQueue = finishedWork.updateQueue;\n updateQueue = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== updateQueue) {\n var effect = (updateQueue = updateQueue.next);\n do {\n if ((effect.tag & flags) === flags) {\n var destroy = effect.destroy;\n effect.destroy = void 0;\n if (void 0 !== destroy) {\n var current = finishedWork,\n nearestMountedAncestor = nearestMountedAncestor$jscomp$0;\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n }\n effect = effect.next;\n } while (effect !== updateQueue);\n }\n}\nfunction commitHookEffectListMount(tag, finishedWork) {\n finishedWork = finishedWork.updateQueue;\n finishedWork = null !== finishedWork ? finishedWork.lastEffect : null;\n if (null !== finishedWork) {\n var effect = (finishedWork = finishedWork.next);\n do {\n if ((effect.tag & tag) === tag) {\n var create$82 = effect.create;\n effect.destroy = create$82();\n }\n effect = effect.next;\n } while (effect !== finishedWork);\n }\n}\nfunction detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n fiber.stateNode = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n}\nfunction commitWork(current, finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(3, finishedWork, finishedWork.return);\n return;\n case 12:\n return;\n case 13:\n null !== finishedWork.memoizedState &&\n (globalMostRecentFallbackTime = now());\n attachSuspenseRetryListeners(finishedWork);\n return;\n case 19:\n attachSuspenseRetryListeners(finishedWork);\n return;\n case 22:\n case 23:\n return;\n }\n a: {\n switch (finishedWork.tag) {\n case 1:\n case 5:\n case 6:\n break a;\n case 3:\n case 4:\n break a;\n }\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n}\nfunction attachSuspenseRetryListeners(finishedWork) {\n var wakeables = finishedWork.updateQueue;\n if (null !== wakeables) {\n finishedWork.updateQueue = null;\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n wakeables.forEach(function(wakeable) {\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n retryCache.has(wakeable) ||\n (retryCache.add(wakeable), wakeable.then(retry, retry));\n });\n }\n}\nfunction commitMutationEffects(root, firstChild) {\n for (nextEffect = firstChild; null !== nextEffect; ) {\n root = nextEffect;\n firstChild = root.deletions;\n if (null !== firstChild)\n for (var i = 0; i < firstChild.length; i++) {\n var childToDelete = firstChild[i];\n try {\n a: for (var node = childToDelete; ; ) {\n var current = node;\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onCommitFiberUnmount\n )\n try {\n injectedHook.onCommitFiberUnmount(rendererID, current);\n } catch (err) {}\n switch (current.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n var updateQueue = current.updateQueue;\n if (null !== updateQueue) {\n var lastEffect = updateQueue.lastEffect;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next,\n effect = firstEffect;\n do {\n var _effect = effect,\n destroy = _effect.destroy,\n tag = _effect.tag;\n if (void 0 !== destroy && 0 !== (tag & 2)) {\n _effect = current;\n var nearestMountedAncestor = root;\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(\n _effect,\n nearestMountedAncestor,\n error\n );\n }\n }\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n }\n break;\n case 1:\n safelyDetachRef(current, root);\n var instance = current.stateNode;\n if (\"function\" === typeof instance.componentWillUnmount)\n try {\n (effect = current),\n (_effect = instance),\n (_effect.props = effect.memoizedProps),\n (_effect.state = effect.memoizedState),\n _effect.componentWillUnmount();\n } catch (unmountError) {\n captureCommitPhaseError(current, root, unmountError);\n }\n break;\n case 5:\n safelyDetachRef(current, root);\n break;\n case 4:\n createChildNodeSet(current.stateNode.containerInfo);\n }\n if (null !== node.child)\n (node.child.return = node), (node = node.child);\n else {\n if (node === childToDelete) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === childToDelete)\n break a;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n var alternate = childToDelete.alternate;\n null !== alternate && (alternate.return = null);\n childToDelete.return = null;\n } catch (error) {\n captureCommitPhaseError(childToDelete, root, error);\n }\n }\n firstChild = root.child;\n if (0 !== (root.subtreeFlags & 6454) && null !== firstChild)\n (firstChild.return = root), (nextEffect = firstChild);\n else\n for (; null !== nextEffect; ) {\n root = nextEffect;\n try {\n var flags = root.flags;\n if (flags & 256) {\n var current$jscomp$0 = root.alternate;\n if (null !== current$jscomp$0) {\n var currentRef = current$jscomp$0.ref;\n null !== currentRef &&\n (\"function\" === typeof currentRef\n ? currentRef(null)\n : (currentRef.current = null));\n }\n }\n switch (flags & 2054) {\n case 2:\n root.flags &= -3;\n break;\n case 6:\n root.flags &= -3;\n commitWork(root.alternate, root);\n break;\n case 2048:\n root.flags &= -2049;\n break;\n case 2052:\n root.flags &= -2049;\n commitWork(root.alternate, root);\n break;\n case 4:\n commitWork(root.alternate, root);\n }\n } catch (error) {\n captureCommitPhaseError(root, root.return, error);\n }\n firstChild = root.sibling;\n if (null !== firstChild) {\n firstChild.return = root.return;\n nextEffect = firstChild;\n break;\n }\n nextEffect = root.return;\n }\n }\n}\nfunction commitLayoutEffects(finishedWork) {\n for (nextEffect = finishedWork; null !== nextEffect; ) {\n var fiber = nextEffect,\n firstChild = fiber.child;\n if (0 !== (fiber.subtreeFlags & 324) && null !== firstChild)\n (firstChild.return = fiber), (nextEffect = firstChild);\n else\n for (fiber = finishedWork; null !== nextEffect; ) {\n firstChild = nextEffect;\n if (0 !== (firstChild.flags & 324)) {\n var current = firstChild.alternate;\n try {\n if (0 !== (firstChild.flags & 68))\n switch (firstChild.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListMount(3, firstChild);\n break;\n case 1:\n var instance = firstChild.stateNode;\n if (firstChild.flags & 4)\n if (null === current) instance.componentDidMount();\n else {\n var prevProps =\n firstChild.elementType === firstChild.type\n ? current.memoizedProps\n : resolveDefaultProps(\n firstChild.type,\n current.memoizedProps\n );\n instance.componentDidUpdate(\n prevProps,\n current.memoizedState,\n instance.__reactInternalSnapshotBeforeUpdate\n );\n }\n var updateQueue = firstChild.updateQueue;\n null !== updateQueue &&\n commitUpdateQueue(firstChild, updateQueue, instance);\n break;\n case 3:\n var updateQueue$83 = firstChild.updateQueue;\n if (null !== updateQueue$83) {\n current = null;\n if (null !== firstChild.child)\n switch (firstChild.child.tag) {\n case 5:\n current = firstChild.child.stateNode.canonical;\n break;\n case 1:\n current = firstChild.child.stateNode;\n }\n commitUpdateQueue(firstChild, updateQueue$83, current);\n }\n break;\n case 5:\n null === current && firstChild.flags & 4 && shim();\n break;\n case 6:\n break;\n case 4:\n break;\n case 12:\n break;\n case 13:\n break;\n case 19:\n case 17:\n case 21:\n case 22:\n case 23:\n break;\n default:\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (firstChild.flags & 256) {\n current = void 0;\n var ref = firstChild.ref;\n if (null !== ref) {\n var instance$jscomp$0 = firstChild.stateNode;\n switch (firstChild.tag) {\n case 5:\n current = instance$jscomp$0.canonical;\n break;\n default:\n current = instance$jscomp$0;\n }\n \"function\" === typeof ref\n ? ref(current)\n : (ref.current = current);\n }\n }\n } catch (error) {\n captureCommitPhaseError(firstChild, firstChild.return, error);\n }\n }\n if (firstChild === fiber) {\n nextEffect = null;\n break;\n }\n current = firstChild.sibling;\n if (null !== current) {\n current.return = firstChild.return;\n nextEffect = current;\n break;\n }\n nextEffect = firstChild.return;\n }\n }\n}\nvar ceil = Math.ceil,\n ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,\n ReactCurrentBatchConfig$2 = ReactSharedInternals.ReactCurrentBatchConfig,\n executionContext = 0,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n subtreeRenderLanes = 0,\n subtreeRenderLanesCursor = createCursor(0),\n workInProgressRootExitStatus = 0,\n workInProgressRootFatalError = null,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n globalMostRecentFallbackTime = 0,\n workInProgressRootRenderTargetTime = Infinity,\n hasUncaughtError = !1,\n firstUncaughtError = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n rootDoesHavePassiveEffects = !1,\n rootWithPendingPassiveEffects = null,\n pendingPassiveEffectsLanes = 0,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null,\n currentEventTime = -1,\n currentEventTransitionLane = 0;\nfunction requestEventTime() {\n return 0 !== (executionContext & 24)\n ? now()\n : -1 !== currentEventTime\n ? currentEventTime\n : (currentEventTime = now());\n}\nfunction requestUpdateLane(fiber) {\n if (0 === (fiber.mode & 1)) return 1;\n if (0 !== (executionContext & 8) && 0 !== workInProgressRootRenderLanes)\n return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n if (0 !== ReactCurrentBatchConfig.transition)\n return (\n 0 === currentEventTransitionLane &&\n ((fiber = nextTransitionLane),\n (nextTransitionLane <<= 1),\n 0 === (nextTransitionLane & 4194240) && (nextTransitionLane = 64),\n (currentEventTransitionLane = fiber)),\n currentEventTransitionLane\n );\n fiber = currentUpdatePriority;\n if (0 === fiber)\n a: {\n fiber = fabricGetCurrentEventPriority\n ? fabricGetCurrentEventPriority()\n : null;\n if (null != fiber)\n switch (fiber) {\n case FabricDiscretePriority:\n fiber = 1;\n break a;\n }\n fiber = 16;\n }\n return fiber;\n}\nfunction scheduleUpdateOnFiber(fiber, lane, eventTime) {\n if (50 < nestedUpdateCount)\n throw ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(\n \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\"\n ));\n var root = markUpdateLaneFromFiberToRoot(fiber, lane);\n if (null === root) return null;\n markRootUpdated(root, lane, eventTime);\n root === workInProgressRoot &&\n (0 === (executionContext & 8) && (workInProgressRootUpdatedLanes |= lane),\n 4 === workInProgressRootExitStatus &&\n markRootSuspended$1(root, workInProgressRootRenderLanes));\n 1 === lane\n ? 0 !== (executionContext & 4) && 0 === (executionContext & 24)\n ? performSyncWorkOnRoot(root)\n : (ensureRootIsScheduled(root, eventTime),\n 0 === executionContext &&\n 0 === (fiber.mode & 1) &&\n ((workInProgressRootRenderTargetTime = now() + 500),\n includesLegacySyncCallbacks && flushSyncCallbacks()))\n : ensureRootIsScheduled(root, eventTime);\n return root;\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n alternate = sourceFiber;\n for (sourceFiber = sourceFiber.return; null !== sourceFiber; )\n (sourceFiber.childLanes |= lane),\n (alternate = sourceFiber.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n (alternate = sourceFiber),\n (sourceFiber = sourceFiber.return);\n return 3 === alternate.tag ? alternate.stateNode : null;\n}\nfunction ensureRootIsScheduled(root, currentTime) {\n for (\n var existingCallbackNode = root.callbackNode,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes;\n 0 < lanes;\n\n ) {\n var index$5 = 31 - clz32(lanes),\n lane = 1 << index$5,\n expirationTime = expirationTimes[index$5];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n suspendedLanes = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes : 0\n );\n if (0 === suspendedLanes)\n null !== existingCallbackNode && cancelCallback(existingCallbackNode),\n (root.callbackNode = null),\n (root.callbackPriority = 0);\n else if (\n ((currentTime = suspendedLanes & -suspendedLanes),\n root.callbackPriority !== currentTime)\n ) {\n null != existingCallbackNode && cancelCallback(existingCallbackNode);\n if (1 === currentTime)\n 0 === root.tag\n ? ((existingCallbackNode = performSyncWorkOnRoot.bind(null, root)),\n (includesLegacySyncCallbacks = !0),\n null === syncQueue\n ? (syncQueue = [existingCallbackNode])\n : syncQueue.push(existingCallbackNode))\n : ((existingCallbackNode = performSyncWorkOnRoot.bind(null, root)),\n null === syncQueue\n ? (syncQueue = [existingCallbackNode])\n : syncQueue.push(existingCallbackNode)),\n scheduleCallback(ImmediatePriority, flushSyncCallbacks),\n (existingCallbackNode = null);\n else {\n switch (lanesToEventPriority(suspendedLanes)) {\n case 1:\n existingCallbackNode = ImmediatePriority;\n break;\n case 4:\n existingCallbackNode = UserBlockingPriority;\n break;\n case 16:\n existingCallbackNode = NormalPriority;\n break;\n case 536870912:\n existingCallbackNode = IdlePriority;\n break;\n default:\n existingCallbackNode = NormalPriority;\n }\n existingCallbackNode = scheduleCallback(\n existingCallbackNode,\n performConcurrentWorkOnRoot.bind(null, root)\n );\n }\n root.callbackPriority = currentTime;\n root.callbackNode = existingCallbackNode;\n }\n}\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n currentEventTime = -1;\n currentEventTransitionLane = 0;\n if (0 !== (executionContext & 24))\n throw Error(\"Should not already be working.\");\n var originalCallbackNode = root.callbackNode;\n if (flushPassiveEffects() && root.callbackNode !== originalCallbackNode)\n return null;\n var lanes = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes : 0\n );\n if (0 === lanes) return null;\n var JSCompiler_inline_result =\n 0 !== (lanes & root.expiredLanes) ? !1 : 0 === (lanes & 30);\n if (JSCompiler_inline_result && !didTimeout) {\n didTimeout = lanes;\n JSCompiler_inline_result = executionContext;\n executionContext |= 8;\n var prevDispatcher = pushDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== didTimeout\n )\n (workInProgressRootRenderTargetTime = now() + 500),\n prepareFreshStack(root, didTimeout);\n do\n try {\n workLoopConcurrent();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n while (1);\n resetContextDependencies();\n ReactCurrentDispatcher$2.current = prevDispatcher;\n executionContext = JSCompiler_inline_result;\n null !== workInProgress\n ? (didTimeout = 0)\n : ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n (didTimeout = workInProgressRootExitStatus));\n } else didTimeout = renderRootSync(root, lanes);\n if (0 !== didTimeout) {\n 2 === didTimeout &&\n ((executionContext |= 32),\n root.hydrate && ((root.hydrate = !1), shim(root.containerInfo)),\n (JSCompiler_inline_result = getLanesToRetrySynchronouslyOnError(root)),\n 0 !== JSCompiler_inline_result &&\n ((lanes = JSCompiler_inline_result),\n (didTimeout = renderRootSync(root, JSCompiler_inline_result))));\n if (1 === didTimeout)\n throw ((originalCallbackNode = workInProgressRootFatalError),\n prepareFreshStack(root, 0),\n markRootSuspended$1(root, lanes),\n ensureRootIsScheduled(root, now()),\n originalCallbackNode);\n root.finishedWork = root.current.alternate;\n root.finishedLanes = lanes;\n switch (didTimeout) {\n case 0:\n case 1:\n throw Error(\"Root did not complete. This is a bug in React.\");\n case 2:\n commitRoot(root);\n break;\n case 3:\n markRootSuspended$1(root, lanes);\n if (\n (lanes & 130023424) === lanes &&\n ((didTimeout = globalMostRecentFallbackTime + 500 - now()),\n 10 < didTimeout)\n ) {\n if (0 !== getNextLanes(root, 0)) break;\n JSCompiler_inline_result = root.suspendedLanes;\n if ((JSCompiler_inline_result & lanes) !== lanes) {\n requestEventTime();\n root.pingedLanes |= root.suspendedLanes & JSCompiler_inline_result;\n break;\n }\n root.timeoutHandle = scheduleTimeout(\n commitRoot.bind(null, root),\n didTimeout\n );\n break;\n }\n commitRoot(root);\n break;\n case 4:\n markRootSuspended$1(root, lanes);\n if ((lanes & 4194240) === lanes) break;\n didTimeout = root.eventTimes;\n for (JSCompiler_inline_result = -1; 0 < lanes; ) {\n var index$4 = 31 - clz32(lanes);\n prevDispatcher = 1 << index$4;\n index$4 = didTimeout[index$4];\n index$4 > JSCompiler_inline_result &&\n (JSCompiler_inline_result = index$4);\n lanes &= ~prevDispatcher;\n }\n lanes = JSCompiler_inline_result;\n lanes = now() - lanes;\n lanes =\n (120 > lanes\n ? 120\n : 480 > lanes\n ? 480\n : 1080 > lanes\n ? 1080\n : 1920 > lanes\n ? 1920\n : 3e3 > lanes\n ? 3e3\n : 4320 > lanes\n ? 4320\n : 1960 * ceil(lanes / 1960)) - lanes;\n if (10 < lanes) {\n root.timeoutHandle = scheduleTimeout(\n commitRoot.bind(null, root),\n lanes\n );\n break;\n }\n commitRoot(root);\n break;\n case 5:\n commitRoot(root);\n break;\n default:\n throw Error(\"Unknown root exit status.\");\n }\n }\n ensureRootIsScheduled(root, now());\n return root.callbackNode === originalCallbackNode\n ? performConcurrentWorkOnRoot.bind(null, root)\n : null;\n}\nfunction markRootSuspended$1(root, suspendedLanes) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n for (root = root.expirationTimes; 0 < suspendedLanes; ) {\n var index$6 = 31 - clz32(suspendedLanes),\n lane = 1 << index$6;\n root[index$6] = -1;\n suspendedLanes &= ~lane;\n }\n}\nfunction performSyncWorkOnRoot(root) {\n if (0 !== (executionContext & 24))\n throw Error(\"Should not already be working.\");\n flushPassiveEffects();\n var lanes = getNextLanes(root, 0);\n if (0 === (lanes & 1)) return ensureRootIsScheduled(root, now()), null;\n var exitStatus = renderRootSync(root, lanes);\n if (0 !== root.tag && 2 === exitStatus) {\n executionContext |= 32;\n root.hydrate && ((root.hydrate = !1), shim(root.containerInfo));\n var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);\n 0 !== errorRetryLanes &&\n ((lanes = errorRetryLanes), (exitStatus = renderRootSync(root, lanes)));\n }\n if (1 === exitStatus)\n throw ((exitStatus = workInProgressRootFatalError),\n prepareFreshStack(root, 0),\n markRootSuspended$1(root, lanes),\n ensureRootIsScheduled(root, now()),\n exitStatus);\n root.finishedWork = root.current.alternate;\n root.finishedLanes = lanes;\n commitRoot(root);\n ensureRootIsScheduled(root, now());\n return null;\n}\nfunction popRenderLanes() {\n subtreeRenderLanes = subtreeRenderLanesCursor.current;\n pop(subtreeRenderLanesCursor);\n}\nfunction prepareFreshStack(root, lanes) {\n root.finishedWork = null;\n root.finishedLanes = 0;\n var timeoutHandle = root.timeoutHandle;\n -1 !== timeoutHandle &&\n ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n if (null !== workInProgress)\n for (timeoutHandle = workInProgress.return; null !== timeoutHandle; ) {\n var interruptedWork = timeoutHandle;\n switch (interruptedWork.tag) {\n case 1:\n interruptedWork = interruptedWork.type.childContextTypes;\n null !== interruptedWork &&\n void 0 !== interruptedWork &&\n popContext();\n break;\n case 3:\n popHostContainer();\n pop(didPerformWorkStackCursor);\n pop(contextStackCursor);\n resetWorkInProgressVersions();\n break;\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer();\n break;\n case 13:\n pop(suspenseStackCursor);\n break;\n case 19:\n pop(suspenseStackCursor);\n break;\n case 10:\n popProvider(interruptedWork.type._context);\n break;\n case 22:\n case 23:\n popRenderLanes();\n }\n timeoutHandle = timeoutHandle.return;\n }\n workInProgressRoot = root;\n workInProgress = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = subtreeRenderLanes = lanes;\n workInProgressRootExitStatus = 0;\n workInProgressRootFatalError = null;\n workInProgressRootPingedLanes = workInProgressRootUpdatedLanes = workInProgressRootSkippedLanes = 0;\n if (null !== interleavedQueues) {\n for (root = 0; root < interleavedQueues.length; root++)\n if (\n ((lanes = interleavedQueues[root]),\n (timeoutHandle = lanes.interleaved),\n null !== timeoutHandle)\n ) {\n lanes.interleaved = null;\n interruptedWork = timeoutHandle.next;\n var lastPendingUpdate = lanes.pending;\n if (null !== lastPendingUpdate) {\n var firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = interruptedWork;\n timeoutHandle.next = firstPendingUpdate;\n }\n lanes.pending = timeoutHandle;\n }\n interleavedQueues = null;\n }\n}\nfunction handleError(root$jscomp$0, thrownValue) {\n do {\n var erroredWork = workInProgress;\n try {\n resetContextDependencies();\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n if (didScheduleRenderPhaseUpdate) {\n for (\n var hook = currentlyRenderingFiber$1.memoizedState;\n null !== hook;\n\n ) {\n var queue = hook.queue;\n null !== queue && (queue.pending = null);\n hook = hook.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber$1 = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n ReactCurrentOwner$2.current = null;\n if (null === erroredWork || null === erroredWork.return) {\n workInProgressRootExitStatus = 1;\n workInProgressRootFatalError = thrownValue;\n workInProgress = null;\n break;\n }\n a: {\n var root = root$jscomp$0,\n returnFiber = erroredWork.return,\n sourceFiber = erroredWork,\n value = thrownValue;\n thrownValue = workInProgressRootRenderLanes;\n sourceFiber.flags |= 8192;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n var wakeable = value,\n tag = sourceFiber.tag;\n if (\n 0 === (sourceFiber.mode & 1) &&\n (0 === tag || 11 === tag || 15 === tag)\n ) {\n var currentSource = sourceFiber.alternate;\n currentSource\n ? ((sourceFiber.updateQueue = currentSource.updateQueue),\n (sourceFiber.memoizedState = currentSource.memoizedState),\n (sourceFiber.lanes = currentSource.lanes))\n : ((sourceFiber.updateQueue = null),\n (sourceFiber.memoizedState = null));\n }\n var hasInvisibleParentBoundary =\n 0 !== (suspenseStackCursor.current & 1),\n workInProgress$30 = returnFiber;\n do {\n var JSCompiler_temp;\n if ((JSCompiler_temp = 13 === workInProgress$30.tag)) {\n var nextState = workInProgress$30.memoizedState;\n if (null !== nextState)\n JSCompiler_temp = null !== nextState.dehydrated ? !0 : !1;\n else {\n var props = workInProgress$30.memoizedProps;\n JSCompiler_temp =\n void 0 === props.fallback\n ? !1\n : !0 !== props.unstable_avoidThisFallback\n ? !0\n : hasInvisibleParentBoundary\n ? !1\n : !0;\n }\n }\n if (JSCompiler_temp) {\n var wakeables = workInProgress$30.updateQueue;\n if (null === wakeables) {\n var updateQueue = new Set();\n updateQueue.add(wakeable);\n workInProgress$30.updateQueue = updateQueue;\n } else wakeables.add(wakeable);\n if (\n 0 === (workInProgress$30.mode & 1) &&\n workInProgress$30 !== returnFiber\n ) {\n workInProgress$30.flags |= 128;\n sourceFiber.flags |= 32768;\n sourceFiber.flags &= -10053;\n if (1 === sourceFiber.tag)\n if (null === sourceFiber.alternate) sourceFiber.tag = 17;\n else {\n var update = createUpdate(-1, 1);\n update.tag = 2;\n enqueueUpdate(sourceFiber, update);\n }\n sourceFiber.lanes |= 1;\n break a;\n }\n value = void 0;\n sourceFiber = thrownValue;\n var pingCache = root.pingCache;\n null === pingCache\n ? ((pingCache = root.pingCache = new PossiblyWeakMap()),\n (value = new Set()),\n pingCache.set(wakeable, value))\n : ((value = pingCache.get(wakeable)),\n void 0 === value &&\n ((value = new Set()), pingCache.set(wakeable, value)));\n if (!value.has(sourceFiber)) {\n value.add(sourceFiber);\n var ping = pingSuspendedRoot.bind(\n null,\n root,\n wakeable,\n sourceFiber\n );\n wakeable.then(ping, ping);\n }\n workInProgress$30.flags |= 16384;\n workInProgress$30.lanes = thrownValue;\n break a;\n }\n workInProgress$30 = workInProgress$30.return;\n } while (null !== workInProgress$30);\n value = Error(\n (getComponentNameFromFiber(sourceFiber) || \"A React component\") +\n \" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a component higher in the tree to provide a loading indicator or placeholder to display.\"\n );\n }\n 5 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2);\n value = createCapturedValue(value, sourceFiber);\n workInProgress$30 = returnFiber;\n do {\n switch (workInProgress$30.tag) {\n case 3:\n root = value;\n workInProgress$30.flags |= 16384;\n thrownValue &= -thrownValue;\n workInProgress$30.lanes |= thrownValue;\n var update$31 = createRootErrorUpdate(\n workInProgress$30,\n root,\n thrownValue\n );\n enqueueCapturedUpdate(workInProgress$30, update$31);\n break a;\n case 1:\n root = value;\n var ctor = workInProgress$30.type,\n instance = workInProgress$30.stateNode;\n if (\n 0 === (workInProgress$30.flags & 128) &&\n (\"function\" === typeof ctor.getDerivedStateFromError ||\n (null !== instance &&\n \"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance))))\n ) {\n workInProgress$30.flags |= 16384;\n thrownValue &= -thrownValue;\n workInProgress$30.lanes |= thrownValue;\n var update$34 = createClassErrorUpdate(\n workInProgress$30,\n root,\n thrownValue\n );\n enqueueCapturedUpdate(workInProgress$30, update$34);\n break a;\n }\n }\n workInProgress$30 = workInProgress$30.return;\n } while (null !== workInProgress$30);\n }\n completeUnitOfWork(erroredWork);\n } catch (yetAnotherThrownValue) {\n thrownValue = yetAnotherThrownValue;\n workInProgress === erroredWork &&\n null !== erroredWork &&\n (workInProgress = erroredWork = erroredWork.return);\n continue;\n }\n break;\n } while (1);\n}\nfunction pushDispatcher() {\n var prevDispatcher = ReactCurrentDispatcher$2.current;\n ReactCurrentDispatcher$2.current = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction renderRootSync(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= 8;\n var prevDispatcher = pushDispatcher();\n (workInProgressRoot === root && workInProgressRootRenderLanes === lanes) ||\n prepareFreshStack(root, lanes);\n do\n try {\n workLoopSync();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n while (1);\n resetContextDependencies();\n executionContext = prevExecutionContext;\n ReactCurrentDispatcher$2.current = prevDispatcher;\n if (null !== workInProgress)\n throw Error(\n \"Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.\"\n );\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n return workInProgressRootExitStatus;\n}\nfunction workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction workLoopConcurrent() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n var next = beginWork$1(unitOfWork.alternate, unitOfWork, subtreeRenderLanes);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n ReactCurrentOwner$2.current = null;\n}\nfunction completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n var current = completedWork.alternate;\n unitOfWork = completedWork.return;\n if (0 === (completedWork.flags & 8192)) {\n if (\n ((current = completeWork(current, completedWork, subtreeRenderLanes)),\n null !== current)\n ) {\n workInProgress = current;\n return;\n }\n } else {\n current = unwindWork(completedWork);\n if (null !== current) {\n current.flags &= 8191;\n workInProgress = current;\n return;\n }\n null !== unitOfWork &&\n ((unitOfWork.flags |= 8192),\n (unitOfWork.subtreeFlags = 0),\n (unitOfWork.deletions = null));\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n 0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction commitRoot(root) {\n var previousUpdateLanePriority = currentUpdatePriority,\n prevTransition = ReactCurrentBatchConfig$2.transition;\n try {\n (ReactCurrentBatchConfig$2.transition = 0),\n (currentUpdatePriority = 1),\n commitRootImpl(root, previousUpdateLanePriority);\n } finally {\n (ReactCurrentBatchConfig$2.transition = prevTransition),\n (currentUpdatePriority = previousUpdateLanePriority);\n }\n return null;\n}\nfunction commitRootImpl(root, renderPriorityLevel) {\n do flushPassiveEffects();\n while (null !== rootWithPendingPassiveEffects);\n if (0 !== (executionContext & 24))\n throw Error(\"Should not already be working.\");\n var finishedWork = root.finishedWork,\n lanes = root.finishedLanes;\n if (null === finishedWork) return null;\n root.finishedWork = null;\n root.finishedLanes = 0;\n if (finishedWork === root.current)\n throw Error(\n \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\"\n );\n root.callbackNode = null;\n root.callbackPriority = 0;\n var remainingLanes = finishedWork.lanes | finishedWork.childLanes;\n markRootFinished(root, remainingLanes);\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n (0 === (finishedWork.subtreeFlags & 1040) &&\n 0 === (finishedWork.flags & 1040)) ||\n rootDoesHavePassiveEffects ||\n ((rootDoesHavePassiveEffects = !0),\n scheduleCallback(NormalPriority, function() {\n flushPassiveEffects();\n return null;\n }));\n remainingLanes = 0 !== (finishedWork.flags & 8054);\n if (0 !== (finishedWork.subtreeFlags & 8054) || remainingLanes) {\n remainingLanes = ReactCurrentBatchConfig$2.transition;\n ReactCurrentBatchConfig$2.transition = 0;\n var previousPriority = currentUpdatePriority;\n currentUpdatePriority = 1;\n var prevExecutionContext = executionContext;\n executionContext |= 16;\n ReactCurrentOwner$2.current = null;\n commitBeforeMutationEffects(root, finishedWork);\n commitMutationEffects(root, finishedWork);\n root.current = finishedWork;\n commitLayoutEffects(finishedWork, root, lanes);\n requestPaint();\n executionContext = prevExecutionContext;\n currentUpdatePriority = previousPriority;\n ReactCurrentBatchConfig$2.transition = remainingLanes;\n } else root.current = finishedWork;\n rootDoesHavePassiveEffects &&\n ((rootDoesHavePassiveEffects = !1),\n (rootWithPendingPassiveEffects = root),\n (pendingPassiveEffectsLanes = lanes));\n remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n 0 !== (remainingLanes & 1)\n ? root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n : (nestedUpdateCount = 0);\n onCommitRoot(finishedWork.stateNode, renderPriorityLevel);\n ensureRootIsScheduled(root, now());\n if (hasUncaughtError)\n throw ((hasUncaughtError = !1),\n (root = firstUncaughtError),\n (firstUncaughtError = null),\n root);\n if (0 !== (executionContext & 4)) return null;\n 0 !== (pendingPassiveEffectsLanes & 1) &&\n 0 !== root.tag &&\n flushPassiveEffects();\n flushSyncCallbacks();\n return null;\n}\nfunction flushPassiveEffects() {\n if (null !== rootWithPendingPassiveEffects) {\n var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes),\n prevTransition = ReactCurrentBatchConfig$2.transition,\n previousPriority = currentUpdatePriority;\n try {\n ReactCurrentBatchConfig$2.transition = 0;\n currentUpdatePriority = 16 > renderPriority ? 16 : renderPriority;\n if (null === rootWithPendingPassiveEffects)\n var JSCompiler_inline_result = !1;\n else {\n renderPriority = rootWithPendingPassiveEffects;\n rootWithPendingPassiveEffects = null;\n pendingPassiveEffectsLanes = 0;\n if (0 !== (executionContext & 24))\n throw Error(\"Cannot flush passive effects while already rendering.\");\n var prevExecutionContext = executionContext;\n executionContext |= 16;\n for (nextEffect = renderPriority.current; null !== nextEffect; ) {\n var fiber = nextEffect,\n child = fiber.child;\n if (0 !== (nextEffect.flags & 16)) {\n var deletions = fiber.deletions;\n if (null !== deletions) {\n for (var i = 0; i < deletions.length; i++) {\n var fiberToDelete = deletions[i];\n for (nextEffect = fiberToDelete; null !== nextEffect; ) {\n var fiber$jscomp$0 = nextEffect;\n switch (fiber$jscomp$0.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(4, fiber$jscomp$0, fiber);\n }\n var child$jscomp$0 = fiber$jscomp$0.child;\n if (null !== child$jscomp$0)\n (child$jscomp$0.return = fiber$jscomp$0),\n (nextEffect = child$jscomp$0);\n else\n for (; null !== nextEffect; ) {\n fiber$jscomp$0 = nextEffect;\n var sibling = fiber$jscomp$0.sibling,\n returnFiber = fiber$jscomp$0.return;\n detachFiberAfterEffects(fiber$jscomp$0);\n if (fiber$jscomp$0 === fiberToDelete) {\n nextEffect = null;\n break;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break;\n }\n nextEffect = returnFiber;\n }\n }\n }\n var previousFiber = fiber.alternate;\n if (null !== previousFiber) {\n var detachedChild = previousFiber.child;\n if (null !== detachedChild) {\n previousFiber.child = null;\n do {\n var detachedSibling = detachedChild.sibling;\n detachedChild.sibling = null;\n detachedChild = detachedSibling;\n } while (null !== detachedChild);\n }\n }\n nextEffect = fiber;\n }\n }\n if (0 !== (fiber.subtreeFlags & 1040) && null !== child)\n (child.return = fiber), (nextEffect = child);\n else\n b: for (; null !== nextEffect; ) {\n fiber = nextEffect;\n if (0 !== (fiber.flags & 1024))\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(5, fiber, fiber.return);\n }\n var sibling$jscomp$0 = fiber.sibling;\n if (null !== sibling$jscomp$0) {\n sibling$jscomp$0.return = fiber.return;\n nextEffect = sibling$jscomp$0;\n break b;\n }\n nextEffect = fiber.return;\n }\n }\n var finishedWork = renderPriority.current;\n for (nextEffect = finishedWork; null !== nextEffect; ) {\n child = nextEffect;\n var firstChild = child.child;\n if (0 !== (child.subtreeFlags & 1040) && null !== firstChild)\n (firstChild.return = child), (nextEffect = firstChild);\n else\n b: for (child = finishedWork; null !== nextEffect; ) {\n deletions = nextEffect;\n if (0 !== (deletions.flags & 1024))\n try {\n switch (deletions.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListMount(5, deletions);\n }\n } catch (error) {\n captureCommitPhaseError(deletions, deletions.return, error);\n }\n if (deletions === child) {\n nextEffect = null;\n break b;\n }\n var sibling$jscomp$1 = deletions.sibling;\n if (null !== sibling$jscomp$1) {\n sibling$jscomp$1.return = deletions.return;\n nextEffect = sibling$jscomp$1;\n break b;\n }\n nextEffect = deletions.return;\n }\n }\n executionContext = prevExecutionContext;\n flushSyncCallbacks();\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, renderPriority);\n } catch (err) {}\n JSCompiler_inline_result = !0;\n }\n return JSCompiler_inline_result;\n } finally {\n (currentUpdatePriority = previousPriority),\n (ReactCurrentBatchConfig$2.transition = prevTransition);\n }\n }\n return !1;\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValue(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber, sourceFiber, 1);\n enqueueUpdate(rootFiber, sourceFiber);\n sourceFiber = requestEventTime();\n rootFiber = markUpdateLaneFromFiberToRoot(rootFiber, 1);\n null !== rootFiber &&\n (markRootUpdated(rootFiber, 1, sourceFiber),\n ensureRootIsScheduled(rootFiber, sourceFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else\n for (\n nearestMountedAncestor = sourceFiber.return;\n null !== nearestMountedAncestor;\n\n ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n break;\n } else if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValue(error, sourceFiber);\n sourceFiber = createClassErrorUpdate(\n nearestMountedAncestor,\n sourceFiber,\n 1\n );\n enqueueUpdate(nearestMountedAncestor, sourceFiber);\n sourceFiber = requestEventTime();\n nearestMountedAncestor = markUpdateLaneFromFiberToRoot(\n nearestMountedAncestor,\n 1\n );\n null !== nearestMountedAncestor &&\n (markRootUpdated(nearestMountedAncestor, 1, sourceFiber),\n ensureRootIsScheduled(nearestMountedAncestor, sourceFiber));\n break;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n wakeable = requestEventTime();\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (4 === workInProgressRootExitStatus ||\n (3 === workInProgressRootExitStatus &&\n (workInProgressRootRenderLanes & 130023424) ===\n workInProgressRootRenderLanes &&\n 500 > now() - globalMostRecentFallbackTime)\n ? prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes));\n ensureRootIsScheduled(root, wakeable);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryCache = boundaryFiber.stateNode;\n null !== retryCache && retryCache.delete(wakeable);\n wakeable = 0;\n 0 === wakeable &&\n (0 === (boundaryFiber.mode & 1)\n ? (wakeable = 1)\n : ((wakeable = nextRetryLane),\n (nextRetryLane <<= 1),\n 0 === (nextRetryLane & 130023424) && (nextRetryLane = 4194304)));\n retryCache = requestEventTime();\n boundaryFiber = markUpdateLaneFromFiberToRoot(boundaryFiber, wakeable);\n null !== boundaryFiber &&\n (markRootUpdated(boundaryFiber, wakeable, retryCache),\n ensureRootIsScheduled(boundaryFiber, retryCache));\n}\nvar beginWork$1;\nbeginWork$1 = function(current, workInProgress, renderLanes) {\n var updateLanes = workInProgress.lanes;\n if (null !== current)\n if (\n current.memoizedProps !== workInProgress.pendingProps ||\n didPerformWorkStackCursor.current\n )\n didReceiveUpdate = !0;\n else {\n if (0 === (renderLanes & updateLanes)) {\n didReceiveUpdate = !1;\n switch (workInProgress.tag) {\n case 3:\n pushHostRootContext(workInProgress);\n break;\n case 5:\n pushHostContext(workInProgress);\n break;\n case 1:\n isContextProvider(workInProgress.type) &&\n pushContextProvider(workInProgress);\n break;\n case 4:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n break;\n case 10:\n updateLanes = workInProgress.type._context;\n var nextValue = workInProgress.memoizedProps.value;\n push(valueCursor, updateLanes._currentValue2);\n updateLanes._currentValue2 = nextValue;\n break;\n case 13:\n if (null !== workInProgress.memoizedState) {\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(\n current,\n workInProgress,\n renderLanes\n );\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== workInProgress ? workInProgress.sibling : null;\n }\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n break;\n case 19:\n updateLanes = 0 !== (renderLanes & workInProgress.childLanes);\n if (0 !== (current.flags & 128)) {\n if (updateLanes)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n nextValue = workInProgress.memoizedState;\n null !== nextValue &&\n ((nextValue.rendering = null),\n (nextValue.tail = null),\n (nextValue.lastEffect = null));\n push(suspenseStackCursor, suspenseStackCursor.current);\n if (updateLanes) break;\n else return null;\n case 22:\n case 23:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(current, workInProgress, renderLanes)\n );\n }\n return bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n }\n didReceiveUpdate = 0 !== (current.flags & 32768) ? !0 : !1;\n }\n else didReceiveUpdate = !1;\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 2:\n updateLanes = workInProgress.type;\n null !== current &&\n ((current.alternate = null),\n (workInProgress.alternate = null),\n (workInProgress.flags |= 2));\n current = workInProgress.pendingProps;\n nextValue = getMaskedContext(workInProgress, contextStackCursor.current);\n prepareToReadContext(workInProgress, renderLanes);\n nextValue = renderWithHooks(\n null,\n workInProgress,\n updateLanes,\n current,\n nextValue,\n renderLanes\n );\n workInProgress.flags |= 1;\n if (\n \"object\" === typeof nextValue &&\n null !== nextValue &&\n \"function\" === typeof nextValue.render &&\n void 0 === nextValue.$$typeof\n ) {\n workInProgress.tag = 1;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n if (isContextProvider(updateLanes)) {\n var hasContext = !0;\n pushContextProvider(workInProgress);\n } else hasContext = !1;\n workInProgress.memoizedState =\n null !== nextValue.state && void 0 !== nextValue.state\n ? nextValue.state\n : null;\n initializeUpdateQueue(workInProgress);\n nextValue.updater = classComponentUpdater;\n workInProgress.stateNode = nextValue;\n nextValue._reactInternals = workInProgress;\n mountClassInstance(workInProgress, updateLanes, current, renderLanes);\n workInProgress = finishClassComponent(\n null,\n workInProgress,\n updateLanes,\n !0,\n hasContext,\n renderLanes\n );\n } else\n (workInProgress.tag = 0),\n reconcileChildren(null, workInProgress, nextValue, renderLanes),\n (workInProgress = workInProgress.child);\n return workInProgress;\n case 16:\n nextValue = workInProgress.elementType;\n a: {\n null !== current &&\n ((current.alternate = null),\n (workInProgress.alternate = null),\n (workInProgress.flags |= 2));\n current = workInProgress.pendingProps;\n hasContext = nextValue._init;\n nextValue = hasContext(nextValue._payload);\n workInProgress.type = nextValue;\n hasContext = workInProgress.tag = resolveLazyComponentTag(nextValue);\n current = resolveDefaultProps(nextValue, current);\n switch (hasContext) {\n case 0:\n workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n nextValue,\n current,\n renderLanes\n );\n break a;\n case 1:\n workInProgress = updateClassComponent(\n null,\n workInProgress,\n nextValue,\n current,\n renderLanes\n );\n break a;\n case 11:\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n nextValue,\n current,\n renderLanes\n );\n break a;\n case 14:\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n nextValue,\n resolveDefaultProps(nextValue.type, current),\n updateLanes,\n renderLanes\n );\n break a;\n }\n throw Error(\n \"Element type is invalid. Received a promise that resolves to: \" +\n nextValue +\n \". Lazy element type must resolve to a class or function.\"\n );\n }\n return workInProgress;\n case 0:\n return (\n (updateLanes = workInProgress.type),\n (nextValue = workInProgress.pendingProps),\n (nextValue =\n workInProgress.elementType === updateLanes\n ? nextValue\n : resolveDefaultProps(updateLanes, nextValue)),\n updateFunctionComponent(\n current,\n workInProgress,\n updateLanes,\n nextValue,\n renderLanes\n )\n );\n case 1:\n return (\n (updateLanes = workInProgress.type),\n (nextValue = workInProgress.pendingProps),\n (nextValue =\n workInProgress.elementType === updateLanes\n ? nextValue\n : resolveDefaultProps(updateLanes, nextValue)),\n updateClassComponent(\n current,\n workInProgress,\n updateLanes,\n nextValue,\n renderLanes\n )\n );\n case 3:\n pushHostRootContext(workInProgress);\n updateLanes = workInProgress.updateQueue;\n if (null === current || null === updateLanes)\n throw Error(\n \"If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue.\"\n );\n nextValue = workInProgress.pendingProps;\n updateLanes = workInProgress.memoizedState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, nextValue, null, renderLanes);\n nextValue = workInProgress.memoizedState.element;\n nextValue === updateLanes\n ? (workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ))\n : (reconcileChildren(current, workInProgress, nextValue, renderLanes),\n (workInProgress = workInProgress.child));\n return workInProgress;\n case 5:\n return (\n pushHostContext(workInProgress),\n (updateLanes = workInProgress.pendingProps.children),\n markRef(current, workInProgress),\n reconcileChildren(current, workInProgress, updateLanes, renderLanes),\n workInProgress.child\n );\n case 6:\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (updateLanes = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n updateLanes,\n renderLanes\n ))\n : reconcileChildren(\n current,\n workInProgress,\n updateLanes,\n renderLanes\n ),\n workInProgress.child\n );\n case 11:\n return (\n (updateLanes = workInProgress.type),\n (nextValue = workInProgress.pendingProps),\n (nextValue =\n workInProgress.elementType === updateLanes\n ? nextValue\n : resolveDefaultProps(updateLanes, nextValue)),\n updateForwardRef(\n current,\n workInProgress,\n updateLanes,\n nextValue,\n renderLanes\n )\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n a: {\n updateLanes = workInProgress.type._context;\n nextValue = workInProgress.pendingProps;\n hasContext = workInProgress.memoizedProps;\n var newValue = nextValue.value;\n push(valueCursor, updateLanes._currentValue2);\n updateLanes._currentValue2 = newValue;\n if (null !== hasContext)\n if (objectIs(hasContext.value, newValue)) {\n if (\n hasContext.children === nextValue.children &&\n !didPerformWorkStackCursor.current\n ) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n } else\n for (\n newValue = workInProgress.child,\n null !== newValue && (newValue.return = workInProgress);\n null !== newValue;\n\n ) {\n var list = newValue.dependencies;\n if (null !== list) {\n hasContext = newValue.child;\n for (\n var dependency = list.firstContext;\n null !== dependency;\n\n ) {\n if (dependency.context === updateLanes) {\n if (1 === newValue.tag) {\n dependency = createUpdate(-1, renderLanes & -renderLanes);\n dependency.tag = 2;\n var updateQueue = newValue.updateQueue;\n if (null !== updateQueue) {\n updateQueue = updateQueue.shared;\n var pending = updateQueue.pending;\n null === pending\n ? (dependency.next = dependency)\n : ((dependency.next = pending.next),\n (pending.next = dependency));\n updateQueue.pending = dependency;\n }\n }\n newValue.lanes |= renderLanes;\n dependency = newValue.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleWorkOnParentPath(newValue.return, renderLanes);\n list.lanes |= renderLanes;\n break;\n }\n dependency = dependency.next;\n }\n } else\n hasContext =\n 10 === newValue.tag\n ? newValue.type === workInProgress.type\n ? null\n : newValue.child\n : newValue.child;\n if (null !== hasContext) hasContext.return = newValue;\n else\n for (hasContext = newValue; null !== hasContext; ) {\n if (hasContext === workInProgress) {\n hasContext = null;\n break;\n }\n newValue = hasContext.sibling;\n if (null !== newValue) {\n newValue.return = hasContext.return;\n hasContext = newValue;\n break;\n }\n hasContext = hasContext.return;\n }\n newValue = hasContext;\n }\n reconcileChildren(\n current,\n workInProgress,\n nextValue.children,\n renderLanes\n );\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 9:\n return (\n (nextValue = workInProgress.type),\n (updateLanes = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress, renderLanes),\n (nextValue = readContext(nextValue)),\n (updateLanes = updateLanes(nextValue)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, updateLanes, renderLanes),\n workInProgress.child\n );\n case 14:\n return (\n (nextValue = workInProgress.type),\n (hasContext = resolveDefaultProps(\n nextValue,\n workInProgress.pendingProps\n )),\n (hasContext = resolveDefaultProps(nextValue.type, hasContext)),\n updateMemoComponent(\n current,\n workInProgress,\n nextValue,\n hasContext,\n updateLanes,\n renderLanes\n )\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n updateLanes,\n renderLanes\n );\n case 17:\n return (\n (updateLanes = workInProgress.type),\n (nextValue = workInProgress.pendingProps),\n (nextValue =\n workInProgress.elementType === updateLanes\n ? nextValue\n : resolveDefaultProps(updateLanes, nextValue)),\n null !== current &&\n ((current.alternate = null),\n (workInProgress.alternate = null),\n (workInProgress.flags |= 2)),\n (workInProgress.tag = 1),\n isContextProvider(updateLanes)\n ? ((current = !0), pushContextProvider(workInProgress))\n : (current = !1),\n prepareToReadContext(workInProgress, renderLanes),\n constructClassInstance(workInProgress, updateLanes, nextValue),\n mountClassInstance(workInProgress, updateLanes, nextValue, renderLanes),\n finishClassComponent(\n null,\n workInProgress,\n updateLanes,\n !0,\n current,\n renderLanes\n )\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n case 23:\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null;\n this.index = 0;\n this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiber(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction resolveLazyComponentTag(Component) {\n if (\"function\" === typeof Component)\n return shouldConstruct(Component) ? 1 : 0;\n if (void 0 !== Component && null !== Component) {\n Component = Component.$$typeof;\n if (Component === REACT_FORWARD_REF_TYPE) return 11;\n if (Component === REACT_MEMO_TYPE) return 14;\n }\n return 2;\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiber(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 1835008;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 2;\n owner = type;\n if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n else if (\"string\" === typeof type) fiberTag = 5;\n else\n a: switch (type) {\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_DEBUG_TRACING_MODE_TYPE:\n fiberTag = 8;\n mode |= 4;\n break;\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 8;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiber(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiber(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiber(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_OFFSCREEN_TYPE:\n return createFiberFromOffscreen(pendingProps, mode, lanes, key);\n case REACT_LEGACY_HIDDEN_TYPE:\n return (\n (type = createFiber(23, pendingProps, key, mode)),\n (type.elementType = REACT_LEGACY_HIDDEN_TYPE),\n (type.lanes = lanes),\n type\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONTEXT_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n throw Error(\n \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" +\n (null == type ? type : typeof type) +\n \".\"\n );\n }\n key = createFiber(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiber(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromOffscreen(pendingProps, mode, lanes, key) {\n pendingProps = createFiber(22, pendingProps, key, mode);\n pendingProps.elementType = REACT_OFFSCREEN_TYPE;\n pendingProps.lanes = lanes;\n return pendingProps;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiber(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiber(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nfunction FiberRootNode(containerInfo, tag, hydrate) {\n this.tag = tag;\n this.containerInfo = containerInfo;\n this.finishedWork = this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = -1;\n this.pendingContext = this.context = null;\n this.hydrate = hydrate;\n this.callbackNode = null;\n this.callbackPriority = 0;\n this.eventTimes = createLaneMap(0);\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes = this.finishedLanes = this.mutableReadLanes = this.expiredLanes = this.pingedLanes = this.suspendedLanes = this.pendingLanes = 0;\n this.entanglements = createLaneMap(0);\n}\nfunction createPortal(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nfunction findHostInstance(component) {\n var fiber = component._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof component.render)\n throw Error(\"Unable to find node on an unmounted component.\");\n throw Error(\n \"Argument appears to not be a ReactComponent. Keys: \" +\n Object.keys(component)\n );\n }\n component = findCurrentHostFiber(fiber);\n return null === component ? null : component.stateNode;\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n var current = container.current,\n eventTime = requestEventTime(),\n lane = requestUpdateLane(current);\n a: if (parentComponent) {\n parentComponent = parentComponent._reactInternals;\n b: {\n if (\n getNearestMountedFiber(parentComponent) !== parentComponent ||\n 1 !== parentComponent.tag\n )\n throw Error(\n \"Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.\"\n );\n var JSCompiler_inline_result = parentComponent;\n do {\n switch (JSCompiler_inline_result.tag) {\n case 3:\n JSCompiler_inline_result =\n JSCompiler_inline_result.stateNode.context;\n break b;\n case 1:\n if (isContextProvider(JSCompiler_inline_result.type)) {\n JSCompiler_inline_result =\n JSCompiler_inline_result.stateNode\n .__reactInternalMemoizedMergedChildContext;\n break b;\n }\n }\n JSCompiler_inline_result = JSCompiler_inline_result.return;\n } while (null !== JSCompiler_inline_result);\n throw Error(\n \"Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (1 === parentComponent.tag) {\n var Component = parentComponent.type;\n if (isContextProvider(Component)) {\n parentComponent = processChildContext(\n parentComponent,\n Component,\n JSCompiler_inline_result\n );\n break a;\n }\n }\n parentComponent = JSCompiler_inline_result;\n } else parentComponent = emptyContextObject;\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n container = createUpdate(eventTime, lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback && (container.callback = callback);\n enqueueUpdate(current, container);\n element = scheduleUpdateOnFiber(current, lane, eventTime);\n null !== element && entangleTransitions(element, current, lane);\n return lane;\n}\nfunction emptyFindFiberByHostInstance() {\n return null;\n}\nfunction findNodeHandle(componentOrHandle) {\n if (null == componentOrHandle) return null;\n if (\"number\" === typeof componentOrHandle) return componentOrHandle;\n if (componentOrHandle._nativeTag) return componentOrHandle._nativeTag;\n if (componentOrHandle.canonical && componentOrHandle.canonical._nativeTag)\n return componentOrHandle.canonical._nativeTag;\n componentOrHandle = findHostInstance(componentOrHandle);\n return null == componentOrHandle\n ? componentOrHandle\n : componentOrHandle.canonical\n ? componentOrHandle.canonical._nativeTag\n : componentOrHandle._nativeTag;\n}\nbatchedUpdatesImpl = function(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext |= 1;\n try {\n return fn(a);\n } finally {\n (executionContext = prevExecutionContext),\n 0 === executionContext &&\n ((workInProgressRootRenderTargetTime = now() + 500),\n includesLegacySyncCallbacks && flushSyncCallbacks());\n }\n};\nvar roots = new Map(),\n devToolsConfig$jscomp$inline_939 = {\n findFiberByHostInstance: getInstanceFromInstance,\n bundleType: 0,\n version: \"18.0.0-experimental-568dc3532\",\n rendererPackageName: \"react-native-renderer\",\n rendererConfig: {\n getInspectorDataForViewTag: function() {\n throw Error(\n \"getInspectorDataForViewTag() is not available in production\"\n );\n },\n getInspectorDataForViewAtPoint: function() {\n throw Error(\n \"getInspectorDataForViewAtPoint() is not available in production.\"\n );\n }.bind(null, findNodeHandle)\n }\n };\nvar internals$jscomp$inline_1177 = {\n bundleType: devToolsConfig$jscomp$inline_939.bundleType,\n version: devToolsConfig$jscomp$inline_939.version,\n rendererPackageName: devToolsConfig$jscomp$inline_939.rendererPackageName,\n rendererConfig: devToolsConfig$jscomp$inline_939.rendererConfig,\n overrideHookState: null,\n overrideHookStateDeletePath: null,\n overrideHookStateRenamePath: null,\n overrideProps: null,\n overridePropsDeletePath: null,\n overridePropsRenamePath: null,\n setErrorHandler: null,\n setSuspenseHandler: null,\n scheduleUpdate: null,\n currentDispatcherRef: ReactSharedInternals.ReactCurrentDispatcher,\n findHostInstanceByFiber: function(fiber) {\n fiber = findCurrentHostFiber(fiber);\n return null === fiber ? null : fiber.stateNode;\n },\n findFiberByHostInstance:\n devToolsConfig$jscomp$inline_939.findFiberByHostInstance ||\n emptyFindFiberByHostInstance,\n findHostInstancesForRefresh: null,\n scheduleRefresh: null,\n scheduleRoot: null,\n setRefreshHandler: null,\n getCurrentFiber: null,\n reconcilerVersion: \"18.0.0-experimental-568dc3532\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n var hook$jscomp$inline_1178 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (\n !hook$jscomp$inline_1178.isDisabled &&\n hook$jscomp$inline_1178.supportsFiber\n )\n try {\n (rendererID = hook$jscomp$inline_1178.inject(\n internals$jscomp$inline_1177\n )),\n (injectedHook = hook$jscomp$inline_1178);\n } catch (err) {}\n}\nexports.createPortal = function(children, containerTag) {\n return createPortal(\n children,\n containerTag,\n null,\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null\n );\n};\nexports.dispatchCommand = function(handle, command, args) {\n null != handle._nativeTag &&\n (handle._internalInstanceHandle\n ? nativeFabricUIManager.dispatchCommand(\n handle._internalInstanceHandle.stateNode.node,\n command,\n args\n )\n : ReactNativePrivateInterface.UIManager.dispatchViewManagerCommand(\n handle._nativeTag,\n command,\n args\n ));\n};\nexports.findHostInstance_DEPRECATED = function(componentOrHandle) {\n if (null == componentOrHandle) return null;\n if (componentOrHandle._nativeTag) return componentOrHandle;\n if (componentOrHandle.canonical && componentOrHandle.canonical._nativeTag)\n return componentOrHandle.canonical;\n componentOrHandle = findHostInstance(componentOrHandle);\n return null == componentOrHandle\n ? componentOrHandle\n : componentOrHandle.canonical\n ? componentOrHandle.canonical\n : componentOrHandle;\n};\nexports.findNodeHandle = findNodeHandle;\nexports.render = function(element, containerTag, callback, concurrentRoot) {\n var root = roots.get(containerTag);\n root ||\n ((root = concurrentRoot ? 1 : 0),\n (concurrentRoot = new FiberRootNode(containerTag, root, !1)),\n (root = createFiber(3, null, null, 1 === root ? 1 : 0)),\n (concurrentRoot.current = root),\n (root.stateNode = concurrentRoot),\n (root.memoizedState = { element: null }),\n initializeUpdateQueue(root),\n (root = concurrentRoot),\n roots.set(containerTag, root));\n updateContainer(element, root, null, callback);\n a: if (((element = root.current), element.child))\n switch (element.child.tag) {\n case 5:\n element = element.child.stateNode.canonical;\n break a;\n default:\n element = element.child.stateNode;\n }\n else element = null;\n return element;\n};\nexports.sendAccessibilityEvent = function(handle, eventType) {\n null != handle._nativeTag &&\n (handle._internalInstanceHandle\n ? nativeFabricUIManager.sendAccessibilityEvent(\n handle._internalInstanceHandle.stateNode.node,\n eventType\n )\n : ReactNativePrivateInterface.legacySendAccessibilityEvent(\n handle._nativeTag,\n eventType\n ));\n};\nexports.stopSurface = function(containerTag) {\n var root = roots.get(containerTag);\n root &&\n updateContainer(null, root, null, function() {\n roots.delete(containerTag);\n });\n};\nexports.unmountComponentAtNode = function(containerTag) {\n this.stopSurface(containerTag);\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport {type EventSubscription} from '../vendor/emitter/EventEmitter';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport logError from '../Utilities/logError';\nimport NativeAppState from './NativeAppState';\nimport Platform from '../Utilities/Platform';\n\nexport type AppStateValues = 'inactive' | 'background' | 'active';\n\ntype AppStateEventDefinitions = {\n change: [AppStateValues],\n memoryWarning: [],\n blur: [],\n focus: [],\n};\n\ntype NativeAppStateEventDefinitions = {\n appStateDidChange: [{app_state: AppStateValues}],\n appStateFocusChange: [boolean],\n memoryWarning: [],\n};\n\n/**\n * `AppState` can tell you if the app is in the foreground or background,\n * and notify you when the state changes.\n *\n * See https://reactnative.dev/docs/appstate.html\n */\nclass AppState {\n currentState: ?string = null;\n isAvailable: boolean;\n\n _emitter: ?NativeEventEmitter;\n\n constructor() {\n if (NativeAppState == null) {\n this.isAvailable = false;\n } else {\n this.isAvailable = true;\n\n const emitter: NativeEventEmitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeAppState,\n );\n this._emitter = emitter;\n\n this.currentState = NativeAppState.getConstants().initialAppState;\n\n let eventUpdated = false;\n\n // TODO: this is a terrible solution - in order to ensure `currentState`\n // prop is up to date, we have to register an observer that updates it\n // whenever the state changes, even if nobody cares. We should just\n // deprecate the `currentState` property and get rid of this.\n emitter.addListener('appStateDidChange', appStateData => {\n eventUpdated = true;\n this.currentState = appStateData.app_state;\n });\n\n // TODO: see above - this request just populates the value of `currentState`\n // when the module is first initialized. Would be better to get rid of the\n // prop and expose `getCurrentAppState` method directly.\n // $FlowExpectedError[incompatible-call]\n NativeAppState.getCurrentAppState(appStateData => {\n // It's possible that the state will have changed here & listeners need to be notified\n if (!eventUpdated && this.currentState !== appStateData.app_state) {\n this.currentState = appStateData.app_state;\n emitter.emit('appStateDidChange', appStateData);\n }\n }, logError);\n }\n }\n\n // TODO: now that AppState is a subclass of NativeEventEmitter, we could\n // deprecate `addEventListener` and `removeEventListener` and just use\n // addListener` and `listener.remove()` directly. That will be a breaking\n // change though, as both the method and event names are different\n // (addListener events are currently required to be globally unique).\n /**\n * Add a handler to AppState changes by listening to the `change` event type\n * and providing the handler.\n *\n * See https://reactnative.dev/docs/appstate.html#addeventlistener\n */\n addEventListener>(\n type: K,\n handler: (...$ElementType) => void,\n ): EventSubscription {\n const emitter = this._emitter;\n if (emitter == null) {\n throw new Error('Cannot use AppState when `isAvailable` is false.');\n }\n switch (type) {\n case 'change':\n // $FlowIssue[invalid-tuple-arity] Flow cannot refine handler based on the event type\n const changeHandler: AppStateValues => void = handler;\n return emitter.addListener('appStateDidChange', appStateData => {\n changeHandler(appStateData.app_state);\n });\n case 'memoryWarning':\n // $FlowIssue[invalid-tuple-arity] Flow cannot refine handler based on the event type\n const memoryWarningHandler: () => void = handler;\n return emitter.addListener('memoryWarning', memoryWarningHandler);\n case 'blur':\n case 'focus':\n // $FlowIssue[invalid-tuple-arity] Flow cannot refine handler based on the event type\n const focusOrBlurHandler: () => void = handler;\n return emitter.addListener('appStateFocusChange', hasFocus => {\n if (type === 'blur' && !hasFocus) {\n focusOrBlurHandler();\n }\n if (type === 'focus' && hasFocus) {\n focusOrBlurHandler();\n }\n });\n }\n throw new Error('Trying to subscribe to unknown event: ' + type);\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addEventListener`.\n */\n removeEventListener>(\n type: K,\n listener: (...$ElementType) => mixed,\n ): void {\n const emitter = this._emitter;\n if (emitter == null) {\n throw new Error('Cannot use AppState when `isAvailable` is false.');\n }\n // NOTE: This will report a deprecation notice via `console.error`.\n switch (type) {\n case 'change':\n // $FlowIssue[invalid-tuple-arity] Flow cannot refine handler based on the event type\n // $FlowIssue[incompatible-call]\n emitter.removeListener('appStateDidChange', listener);\n return;\n case 'memoryWarning':\n // $FlowIssue[invalid-tuple-arity] Flow cannot refine handler based on the event type\n emitter.removeListener('memoryWarning', listener);\n return;\n case 'blur':\n case 'focus':\n // $FlowIssue[invalid-tuple-arity] Flow cannot refine handler based on the event type\n // $FlowIssue[incompatible-call]\n emitter.addListener('appStateFocusChange', listener);\n return;\n }\n throw new Error('Trying to unsubscribe from unknown event: ' + type);\n }\n}\n\nmodule.exports = (new AppState(): AppState);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\n/**\n * Small utility that can be used as an error handler. You cannot just pass\n * `console.error` as a failure callback - it's not properly bound. If passes an\n * `Error` object, it will print the message and stack.\n */\nconst logError = function(...args: $ReadOnlyArray) {\n if (args.length === 1 && args[0] instanceof Error) {\n const err = args[0];\n console.error('Error: \"' + err.message + '\". Stack:\\n' + err.stack);\n } else {\n console.error.apply(console, args);\n }\n};\n\nmodule.exports = logError;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n initialAppState: string,\n |};\n +getCurrentAppState: (\n success: (appState: {|app_state: string|}) => void,\n error: (error: Object) => void,\n ) => void;\n\n // Events\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing('AppState'): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n * @jsdoc\n */\n\nimport NativeAsyncLocalStorage from './NativeAsyncLocalStorage';\nimport NativeAsyncSQLiteDBStorage from './NativeAsyncSQLiteDBStorage';\nimport invariant from 'invariant';\n\n// Use SQLite if available, otherwise file storage.\nconst RCTAsyncStorage = NativeAsyncSQLiteDBStorage || NativeAsyncLocalStorage;\n\ntype GetRequest = {\n keys: Array,\n callback: ?(errors: ?Array, result: ?Array>) => void,\n keyIndex: number,\n resolve: (\n result?:\n | void\n | null\n | Promise>>\n | Array>,\n ) => void,\n reject: (error?: mixed) => void,\n};\n\n/**\n * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value\n * storage system that is global to the app. It should be used instead of\n * LocalStorage.\n *\n * See https://reactnative.dev/docs/asyncstorage.html\n */\nconst AsyncStorage = {\n _getRequests: ([]: Array),\n _getKeys: ([]: Array),\n _immediate: (null: ?number),\n\n /**\n * Fetches an item for a `key` and invokes a callback upon completion.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#getitem\n */\n getItem: function(\n key: string,\n callback?: ?(error: ?Error, result: ?string) => void,\n ): Promise {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiGet([key], function(errors, result) {\n // Unpack result to get value from [[key,value]]\n const value = result && result[0] && result[0][1] ? result[0][1] : null;\n const errs = convertErrors(errors);\n callback && callback(errs && errs[0], value);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve(value);\n }\n });\n });\n },\n\n /**\n * Sets the value for a `key` and invokes a callback upon completion.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#setitem\n */\n setItem: function(\n key: string,\n value: string,\n callback?: ?(error: ?Error) => void,\n ): Promise {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiSet([[key, value]], function(errors) {\n const errs = convertErrors(errors);\n callback && callback(errs && errs[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Removes an item for a `key` and invokes a callback upon completion.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#removeitem\n */\n removeItem: function(\n key: string,\n callback?: ?(error: ?Error) => void,\n ): Promise {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiRemove([key], function(errors) {\n const errs = convertErrors(errors);\n callback && callback(errs && errs[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Merges an existing `key` value with an input value, assuming both values\n * are stringified JSON.\n *\n * **NOTE:** This is not supported by all native implementations.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#mergeitem\n */\n mergeItem: function(\n key: string,\n value: string,\n callback?: ?(error: ?Error) => void,\n ): Promise {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiMerge([[key, value]], function(errors) {\n const errs = convertErrors(errors);\n callback && callback(errs && errs[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably\n * don't want to call this; use `removeItem` or `multiRemove` to clear only\n * your app's keys.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#clear\n */\n clear: function(callback?: ?(error: ?Error) => void): Promise {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.clear(function(error) {\n callback && callback(convertError(error));\n if (error && convertError(error)) {\n reject(convertError(error));\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Gets *all* keys known to your app; for all callers, libraries, etc.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#getallkeys\n */\n getAllKeys: function(\n callback?: ?(error: ?Error, keys: ?Array) => void,\n ): Promise> {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.getAllKeys(function(error, keys) {\n callback && callback(convertError(error), keys);\n if (error) {\n reject(convertError(error));\n } else {\n resolve(keys);\n }\n });\n });\n },\n\n /**\n * The following batched functions are useful for executing a lot of\n * operations at once, allowing for native optimizations and provide the\n * convenience of a single callback after all operations are complete.\n *\n * These functions return arrays of errors, potentially one for every key.\n * For key-specific errors, the Error object will have a key property to\n * indicate which key caused the error.\n */\n\n /**\n * Flushes any pending requests using a single batch call to get the data.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#flushgetrequests\n * */\n flushGetRequests: function(): void {\n const getRequests = this._getRequests;\n const getKeys = this._getKeys;\n\n this._getRequests = [];\n this._getKeys = [];\n\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n RCTAsyncStorage.multiGet(getKeys, function(errors, result) {\n // Even though the runtime complexity of this is theoretically worse vs if we used a map,\n // it's much, much faster in practice for the data sets we deal with (we avoid\n // allocating result pair arrays). This was heavily benchmarked.\n //\n // Is there a way to avoid using the map but fix the bug in this breaking test?\n // https://github.com/facebook/react-native/commit/8dd8ad76579d7feef34c014d387bf02065692264\n const map = {};\n result &&\n result.forEach(([key, value]) => {\n map[key] = value;\n return value;\n });\n const reqLength = getRequests.length;\n for (let i = 0; i < reqLength; i++) {\n const request = getRequests[i];\n const requestKeys = request.keys;\n const requestResult = requestKeys.map(key => [key, map[key]]);\n request.callback && request.callback(null, requestResult);\n request.resolve && request.resolve(requestResult);\n }\n });\n },\n\n /**\n * This allows you to batch the fetching of items given an array of `key`\n * inputs. Your callback will be invoked with an array of corresponding\n * key-value pairs found.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#multiget\n */\n // $FlowFixMe[signature-verification-failure]\n multiGet: function(\n keys: Array,\n callback?: ?(errors: ?Array, result: ?Array>) => void,\n ): Promise>> {\n if (!this._immediate) {\n this._immediate = setImmediate(() => {\n this._immediate = null;\n this.flushGetRequests();\n });\n }\n\n return new Promise>>((resolve, reject) => {\n this._getRequests.push({\n keys,\n callback,\n // do we need this?\n keyIndex: this._getKeys.length,\n resolve,\n reject,\n });\n // avoid fetching duplicates\n keys.forEach(key => {\n if (this._getKeys.indexOf(key) === -1) {\n this._getKeys.push(key);\n }\n });\n });\n },\n\n /**\n * Use this as a batch operation for storing multiple key-value pairs. When\n * the operation completes you'll get a single callback with any errors.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#multiset\n */\n multiSet: function(\n keyValuePairs: Array>,\n callback?: ?(errors: ?Array) => void,\n ): Promise {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiSet(keyValuePairs, function(errors) {\n const error = convertErrors(errors);\n callback && callback(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Call this to batch the deletion of all keys in the `keys` array.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#multiremove\n */\n multiRemove: function(\n keys: Array,\n callback?: ?(errors: ?Array) => void,\n ): Promise {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiRemove(keys, function(errors) {\n const error = convertErrors(errors);\n callback && callback(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Batch operation to merge in existing and new values for a given set of\n * keys. This assumes that the values are stringified JSON.\n *\n * **NOTE**: This is not supported by all native implementations.\n *\n * See https://reactnative.dev/docs/asyncstorage.html#multimerge\n */\n multiMerge: function(\n keyValuePairs: Array>,\n callback?: ?(errors: ?Array) => void,\n ): Promise {\n invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiMerge(keyValuePairs, function(errors) {\n const error = convertErrors(errors);\n callback && callback(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n};\n\n// Not all native implementations support merge.\n// TODO: Check whether above comment is correct. multiMerge is guaranteed to\n// exist in the module spec so we should be able to just remove this check.\nif (RCTAsyncStorage && !RCTAsyncStorage.multiMerge) {\n // $FlowFixMe[unclear-type]\n delete (AsyncStorage: any).mergeItem;\n // $FlowFixMe[unclear-type]\n delete (AsyncStorage: any).multiMerge;\n}\n\nfunction convertErrors(\n // NOTE: The native module spec only has the Array case, but the Android\n // implementation passes a single object.\n errs: ?(\n | {message: string, key?: string}\n | Array<{message: string, key?: string}>\n ),\n) {\n if (!errs) {\n return null;\n }\n return (Array.isArray(errs) ? errs : [errs]).map(e => convertError(e));\n}\n\ndeclare function convertError(void | null): null;\ndeclare function convertError({message: string, key?: string}): Error;\nfunction convertError(error) {\n if (!error) {\n return null;\n }\n const out = new Error(error.message);\n // $FlowFixMe[unclear-type]\n (out: any).key = error.key;\n return out;\n}\n\nmodule.exports = AsyncStorage;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {};\n +multiGet: (\n keys: Array,\n callback: (\n errors: ?Array<{message: string, key?: string}>,\n kvPairs: ?Array>,\n ) => void,\n ) => void;\n +multiSet: (\n kvPairs: Array>,\n callback: (errors: ?Array<{message: string, key?: string}>) => void,\n ) => void;\n +multiMerge: (\n kvPairs: Array>,\n callback: (errors: ?Array<{message: string, key?: string}>) => void,\n ) => void;\n +multiRemove: (\n keys: Array,\n callback: (errors: ?Array<{message: string, key?: string}>) => void,\n ) => void;\n +clear: (callback: (error: {message: string, key?: string}) => void) => void;\n +getAllKeys: (\n callback: (\n error: ?{message: string, key?: string},\n allKeys: ?Array,\n ) => void,\n ) => void;\n}\n\nexport default (TurboModuleRegistry.get('AsyncLocalStorage'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {};\n +multiGet: (\n keys: Array,\n callback: (\n errors: ?Array<{message: string, key?: string}>,\n kvPairs: ?Array>,\n ) => void,\n ) => void;\n +multiSet: (\n kvPairs: Array>,\n callback: (errors: ?Array<{message: string, key?: string}>) => void,\n ) => void;\n +multiMerge: (\n kvPairs: Array>,\n callback: (errors: ?Array<{message: string, key?: string}>) => void,\n ) => void;\n +multiRemove: (\n keys: Array,\n callback: (errors: ?Array<{message: string, key?: string}>) => void,\n ) => void;\n +clear: (callback: (error: {message: string, key?: string}) => void) => void;\n +getAllKeys: (\n callback: (\n error: ?{message: string, key?: string},\n allKeys: ?Array,\n ) => void,\n ) => void;\n}\n\nexport default (TurboModuleRegistry.get('AsyncSQLiteDBStorage'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nimport NativeClipboard from './NativeClipboard';\n\n/**\n * `Clipboard` gives you an interface for setting and getting content from Clipboard on both iOS and Android\n */\nmodule.exports = {\n /**\n * Get content of string type, this method returns a `Promise`, so you can use following code to get clipboard content\n * ```javascript\n * async _getContent() {\n * var content = await Clipboard.getString();\n * }\n * ```\n */\n getString(): Promise {\n return NativeClipboard.getString();\n },\n /**\n * Set content of string type. You can use following code to set clipboard content\n * ```javascript\n * _setContent() {\n * Clipboard.setString('hello world');\n * }\n * ```\n * @param the content to be stored in the clipboard.\n */\n setString(content: string) {\n NativeClipboard.setString(content);\n },\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {||};\n +getString: () => Promise;\n +setString: (content: string) => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing('Clipboard'): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\n'use strict';\n\nimport type {Options, DatePickerOpenAction} from './DatePickerAndroidTypes';\n\nclass DatePickerAndroid {\n static async open(options: ?Options): Promise {\n throw new Error('DatePickerAndroid is not supported on this platform.');\n }\n\n /**\n * A date has been selected.\n */\n static +dateSetAction: 'dateSetAction' = 'dateSetAction';\n /**\n * The dialog has been dismissed.\n */\n static +dismissedAction: 'dismissedAction' = 'dismissedAction';\n}\n\nmodule.exports = DatePickerAndroid;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport NativeDeviceInfo from './NativeDeviceInfo';\n\nmodule.exports = NativeDeviceInfo;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport NativeDevSettings from '../NativeModules/specs/NativeDevSettings';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport Platform from '../Utilities/Platform';\n\nlet DevSettings: {\n addMenuItem(title: string, handler: () => mixed): void,\n reload(reason?: string): void,\n onFastRefresh(): void,\n} = {\n addMenuItem(title: string, handler: () => mixed): void {},\n reload(reason?: string): void {},\n onFastRefresh(): void {},\n};\n\ntype DevSettingsEventDefinitions = {\n didPressMenuItem: [{title: string}],\n};\n\nif (__DEV__) {\n const emitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeDevSettings,\n );\n const subscriptions = new Map();\n\n DevSettings = {\n addMenuItem(title: string, handler: () => mixed): void {\n // Make sure items are not added multiple times. This can\n // happen when hot reloading the module that registers the\n // menu items. The title is used as the id which means we\n // don't support multiple items with the same name.\n let subscription = subscriptions.get(title);\n if (subscription != null) {\n subscription.remove();\n } else {\n NativeDevSettings.addMenuItem(title);\n }\n\n subscription = emitter.addListener('didPressMenuItem', event => {\n if (event.title === title) {\n handler();\n }\n });\n subscriptions.set(title, subscription);\n },\n reload(reason?: string): void {\n if (NativeDevSettings.reloadWithReason != null) {\n NativeDevSettings.reloadWithReason(reason ?? 'Uncategorized from JS');\n } else {\n NativeDevSettings.reload();\n }\n },\n onFastRefresh(): void {\n NativeDevSettings.onFastRefresh?.();\n },\n };\n}\n\nmodule.exports = DevSettings;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +reload: () => void;\n +reloadWithReason?: (reason: string) => void;\n +onFastRefresh?: () => void;\n +setHotLoadingEnabled: (isHotLoadingEnabled: boolean) => void;\n +setIsDebuggingRemotely: (isDebuggingRemotelyEnabled: boolean) => void;\n +setProfilingEnabled: (isProfilingEnabled: boolean) => void;\n +toggleElementInspector: () => void;\n +addMenuItem: (title: string) => void;\n\n // Events\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n\n // iOS only.\n +setIsShakeToShowDevMenuEnabled: (enabled: boolean) => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing('DevSettings'): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport NativeImagePickerIOS from './NativeImagePickerIOS';\nimport invariant from 'invariant';\n\nconst ImagePickerIOS = {\n canRecordVideos: function(callback: (result: boolean) => void): void {\n invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');\n return NativeImagePickerIOS.canRecordVideos(callback);\n },\n canUseCamera: function(callback: (result: boolean) => void): void {\n invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');\n return NativeImagePickerIOS.canUseCamera(callback);\n },\n openCameraDialog: function(\n config: $ReadOnly<{|\n unmirrorFrontFacingCamera?: boolean,\n videoMode?: boolean,\n |}>,\n successCallback: (imageURL: string, height: number, width: number) => void,\n cancelCallback: () => void,\n ): void {\n invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');\n\n var newConfig = {\n videoMode: true,\n unmirrorFrontFacingCamera: false,\n };\n\n if (config.videoMode != null) {\n newConfig.videoMode = config.videoMode;\n }\n\n if (config.unmirrorFrontFacingCamera != null) {\n newConfig.unmirrorFrontFacingCamera = config.unmirrorFrontFacingCamera;\n }\n\n return NativeImagePickerIOS.openCameraDialog(\n newConfig,\n successCallback,\n cancelCallback,\n );\n },\n openSelectDialog: function(\n config: $ReadOnly<{|\n showImages?: boolean,\n showVideos?: boolean,\n |}>,\n successCallback: (imageURL: string, height: number, width: number) => void,\n cancelCallback: () => void,\n ): void {\n invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');\n\n var newConfig = {\n showImages: true,\n showVideos: false,\n };\n\n if (config.showImages != null) {\n newConfig.showImages = config.showImages;\n }\n\n if (config.showVideos != null) {\n newConfig.showVideos = config.showVideos;\n }\n\n return NativeImagePickerIOS.openSelectDialog(\n newConfig,\n successCallback,\n cancelCallback,\n );\n },\n /**\n * In iOS 13, the video URLs returned by the Image Picker are invalidated when\n * the picker is dismissed, unless reference to it is held. This API allows\n * the application to signal when it's finished with the video so that the\n * reference can be cleaned up.\n * It is safe to call this method for urlsthat aren't video URLs;\n * it will be a no-op.\n */\n removePendingVideo: function(url: string): void {\n invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');\n NativeImagePickerIOS.removePendingVideo(url);\n },\n /**\n * WARNING: In most cases, removePendingVideo should be used instead because\n * clearAllPendingVideos could clear out pending videos made by other callers.\n */\n clearAllPendingVideos: function(): void {\n invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');\n NativeImagePickerIOS.clearAllPendingVideos();\n },\n};\n\nmodule.exports = ImagePickerIOS;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {||};\n +canRecordVideos: (callback: (result: boolean) => void) => void;\n +canUseCamera: (callback: (result: boolean) => void) => void;\n +openCameraDialog: (\n config: {|\n unmirrorFrontFacingCamera: boolean,\n videoMode: boolean,\n |},\n successCallback: (imageURL: string, height: number, width: number) => void,\n cancelCallback: () => void,\n ) => void;\n +openSelectDialog: (\n config: {|\n showImages: boolean,\n showVideos: boolean,\n |},\n successCallback: (imageURL: string, height: number, width: number) => void,\n cancelCallback: () => void,\n ) => void;\n +clearAllPendingVideos: () => void;\n +removePendingVideo: (url: string) => void;\n}\n\nexport default (TurboModuleRegistry.get('ImagePickerIOS'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport {type EventSubscription} from '../vendor/emitter/EventEmitter';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport InteractionManager from '../Interaction/InteractionManager';\nimport Platform from '../Utilities/Platform';\nimport NativeLinkingManager from './NativeLinkingManager';\nimport NativeIntentAndroid from './NativeIntentAndroid';\nimport invariant from 'invariant';\nimport nullthrows from 'nullthrows';\n\ntype LinkingEventDefinitions = {\n url: [{url: string}],\n};\n\n/**\n * `Linking` gives you a general interface to interact with both incoming\n * and outgoing app links.\n *\n * See https://reactnative.dev/docs/linking.html\n */\nclass Linking extends NativeEventEmitter {\n constructor() {\n super(Platform.OS === 'ios' ? nullthrows(NativeLinkingManager) : undefined);\n }\n\n /**\n * Add a handler to Linking changes by listening to the `url` event type\n * and providing the handler\n *\n * See https://reactnative.dev/docs/linking.html#addeventlistener\n */\n addEventListener>(\n eventType: K,\n listener: (...$ElementType) => mixed,\n context: $FlowFixMe,\n ): EventSubscription {\n return this.addListener(eventType, listener);\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addEventListener`.\n */\n removeEventListener>(\n eventType: K,\n listener: (...$ElementType) => mixed,\n ): void {\n // NOTE: This will report a deprecation notice via `console.error`.\n this.removeListener(eventType, listener);\n }\n\n /**\n * Try to open the given `url` with any of the installed apps.\n *\n * See https://reactnative.dev/docs/linking.html#openurl\n */\n openURL(url: string): Promise {\n this._validateURL(url);\n if (Platform.OS === 'android') {\n return nullthrows(NativeIntentAndroid).openURL(url);\n } else {\n return nullthrows(NativeLinkingManager).openURL(url);\n }\n }\n\n /**\n * Determine whether or not an installed app can handle a given URL.\n *\n * See https://reactnative.dev/docs/linking.html#canopenurl\n */\n canOpenURL(url: string): Promise {\n this._validateURL(url);\n if (Platform.OS === 'android') {\n return nullthrows(NativeIntentAndroid).canOpenURL(url);\n } else {\n return nullthrows(NativeLinkingManager).canOpenURL(url);\n }\n }\n\n /**\n * Open app settings.\n *\n * See https://reactnative.dev/docs/linking.html#opensettings\n */\n openSettings(): Promise {\n if (Platform.OS === 'android') {\n return nullthrows(NativeIntentAndroid).openSettings();\n } else {\n return nullthrows(NativeLinkingManager).openSettings();\n }\n }\n\n /**\n * If the app launch was triggered by an app link,\n * it will give the link url, otherwise it will give `null`\n *\n * See https://reactnative.dev/docs/linking.html#getinitialurl\n */\n getInitialURL(): Promise {\n return Platform.OS === 'android'\n ? InteractionManager.runAfterInteractions().then(() =>\n nullthrows(NativeIntentAndroid).getInitialURL(),\n )\n : nullthrows(NativeLinkingManager).getInitialURL();\n }\n\n /*\n * Launch an Android intent with extras (optional)\n *\n * @platform android\n *\n * See https://reactnative.dev/docs/linking.html#sendintent\n */\n sendIntent(\n action: string,\n extras?: Array<{\n key: string,\n value: string | number | boolean,\n ...\n }>,\n ): Promise {\n if (Platform.OS === 'android') {\n return nullthrows(NativeIntentAndroid).sendIntent(action, extras);\n } else {\n return new Promise((resolve, reject) => reject(new Error('Unsupported')));\n }\n }\n\n _validateURL(url: string) {\n invariant(\n typeof url === 'string',\n 'Invalid URL: should be a string. Was: ' + url,\n );\n invariant(url, 'Invalid URL: cannot be empty');\n }\n}\n\nmodule.exports = (new Linking(): Linking);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n // Common interface\n +getInitialURL: () => Promise;\n +canOpenURL: (url: string) => Promise;\n +openURL: (url: string) => Promise;\n +openSettings: () => Promise;\n\n // Events\n +addListener: (eventName: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.get('LinkingManager'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getInitialURL: () => Promise;\n +canOpenURL: (url: string) => Promise;\n +openURL: (url: string) => Promise;\n +openSettings: () => Promise;\n +sendIntent: (\n action: string,\n extras: ?Array<{\n key: string,\n value: string | number | boolean, // TODO(T67672788): Union types are not type safe\n ...\n }>,\n ) => Promise;\n}\n\nexport default (TurboModuleRegistry.get('IntentAndroid'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport Platform from '../Utilities/Platform';\nimport RCTLog from '../Utilities/RCTLog';\n\nimport type {IgnorePattern, LogData} from './Data/LogBoxData';\nimport type {ExtendedExceptionData} from './Data/parseLogBoxLog';\n\nexport type {LogData, ExtendedExceptionData, IgnorePattern};\n\nlet LogBox;\n\ninterface ILogBox {\n install(): void;\n uninstall(): void;\n isInstalled(): boolean;\n ignoreLogs($ReadOnlyArray): void;\n ignoreAllLogs(?boolean): void;\n clearAllLogs(): void;\n addLog(log: LogData): void;\n addException(error: ExtendedExceptionData): void;\n}\n\n/**\n * LogBox displays logs in the app.\n */\nif (__DEV__) {\n const LogBoxData = require('./Data/LogBoxData');\n const {parseLogBoxLog, parseInterpolation} = require('./Data/parseLogBoxLog');\n\n let originalConsoleError;\n let originalConsoleWarn;\n let consoleErrorImpl;\n let consoleWarnImpl;\n\n let isLogBoxInstalled: boolean = false;\n\n LogBox = {\n install(): void {\n if (isLogBoxInstalled) {\n return;\n }\n\n isLogBoxInstalled = true;\n\n // Trigger lazy initialization of module.\n require('../NativeModules/specs/NativeLogBox');\n\n // IMPORTANT: we only overwrite `console.error` and `console.warn` once.\n // When we uninstall we keep the same reference and only change its\n // internal implementation\n const isFirstInstall = originalConsoleError == null;\n if (isFirstInstall) {\n originalConsoleError = console.error.bind(console);\n originalConsoleWarn = console.warn.bind(console);\n\n // $FlowExpectedError[cannot-write]\n console.error = (...args) => {\n consoleErrorImpl(...args);\n };\n // $FlowExpectedError[cannot-write]\n console.warn = (...args) => {\n consoleWarnImpl(...args);\n };\n }\n\n consoleErrorImpl = registerError;\n consoleWarnImpl = registerWarning;\n\n if ((console: any).disableYellowBox === true) {\n LogBoxData.setDisabled(true);\n console.warn(\n 'console.disableYellowBox has been deprecated and will be removed in a future release. Please use LogBox.ignoreAllLogs(value) instead.',\n );\n }\n\n (Object.defineProperty: any)(console, 'disableYellowBox', {\n configurable: true,\n get: () => LogBoxData.isDisabled(),\n set: value => {\n LogBoxData.setDisabled(value);\n console.warn(\n 'console.disableYellowBox has been deprecated and will be removed in a future release. Please use LogBox.ignoreAllLogs(value) instead.',\n );\n },\n });\n\n if (Platform.isTesting) {\n LogBoxData.setDisabled(true);\n }\n\n RCTLog.setWarningHandler((...args) => {\n registerWarning(...args);\n });\n },\n\n uninstall(): void {\n if (!isLogBoxInstalled) {\n return;\n }\n\n isLogBoxInstalled = false;\n\n // IMPORTANT: we don't re-assign to `console` in case the method has been\n // decorated again after installing LogBox. E.g.:\n // Before uninstalling: original > LogBox > OtherErrorHandler\n // After uninstalling: original > LogBox (noop) > OtherErrorHandler\n consoleErrorImpl = originalConsoleError;\n consoleWarnImpl = originalConsoleWarn;\n delete (console: any).disableLogBox;\n },\n\n isInstalled(): boolean {\n return isLogBoxInstalled;\n },\n\n ignoreLogs(patterns: $ReadOnlyArray): void {\n LogBoxData.addIgnorePatterns(patterns);\n },\n\n ignoreAllLogs(value?: ?boolean): void {\n LogBoxData.setDisabled(value == null ? true : value);\n },\n\n clearAllLogs(): void {\n LogBoxData.clear();\n },\n\n addLog(log: LogData): void {\n if (isLogBoxInstalled) {\n LogBoxData.addLog(log);\n }\n },\n\n addException(error: ExtendedExceptionData): void {\n if (isLogBoxInstalled) {\n LogBoxData.addException(error);\n }\n },\n };\n\n const isRCTLogAdviceWarning = (...args) => {\n // RCTLogAdvice is a native logging function designed to show users\n // a message in the console, but not show it to them in Logbox.\n return typeof args[0] === 'string' && args[0].startsWith('(ADVICE)');\n };\n\n const isWarningModuleWarning = (...args) => {\n return typeof args[0] === 'string' && args[0].startsWith('Warning: ');\n };\n\n const registerWarning = (...args): void => {\n // Let warnings within LogBox itself fall through.\n if (LogBoxData.isLogBoxErrorMessage(String(args[0]))) {\n originalConsoleError(...args);\n return;\n }\n\n try {\n if (!isRCTLogAdviceWarning(...args)) {\n const {category, message, componentStack} = parseLogBoxLog(args);\n\n if (!LogBoxData.isMessageIgnored(message.content)) {\n // Be sure to pass LogBox warnings through.\n originalConsoleWarn(...args);\n\n LogBoxData.addLog({\n level: 'warn',\n category,\n message,\n componentStack,\n });\n }\n }\n } catch (err) {\n LogBoxData.reportLogBoxError(err);\n }\n };\n\n const registerError = (...args): void => {\n // Let errors within LogBox itself fall through.\n if (LogBoxData.isLogBoxErrorMessage(args[0])) {\n originalConsoleError(...args);\n return;\n }\n\n try {\n if (!isWarningModuleWarning(...args)) {\n // Only show LogBox for the 'warning' module, otherwise pass through.\n // By passing through, this will get picked up by the React console override,\n // potentially adding the component stack. React then passes it back to the\n // React Native ExceptionsManager, which reports it to LogBox as an error.\n //\n // The 'warning' module needs to be handled here because React internally calls\n // `console.error('Warning: ')` with the component stack already included.\n originalConsoleError(...args);\n return;\n }\n\n const format = args[0].replace('Warning: ', '');\n const filterResult = LogBoxData.checkWarningFilter(format);\n if (filterResult.suppressCompletely) {\n return;\n }\n\n let level = 'error';\n if (filterResult.suppressDialog_LEGACY === true) {\n level = 'warn';\n } else if (filterResult.forceDialogImmediately === true) {\n level = 'fatal'; // Do not downgrade. These are real bugs with same severity as throws.\n }\n\n // Unfortunately, we need to add the Warning: prefix back for downstream dependencies.\n args[0] = `Warning: ${filterResult.finalFormat}`;\n const {category, message, componentStack} = parseLogBoxLog(args);\n\n if (!LogBoxData.isMessageIgnored(message.content)) {\n // Interpolate the message so they are formatted for adb and other CLIs.\n // This is different than the message.content above because it includes component stacks.\n const interpolated = parseInterpolation(args);\n originalConsoleError(interpolated.message.content);\n\n LogBoxData.addLog({\n level,\n category,\n message,\n componentStack,\n });\n }\n } catch (err) {\n LogBoxData.reportLogBoxError(err);\n }\n };\n} else {\n LogBox = {\n install(): void {\n // Do nothing.\n },\n\n uninstall(): void {\n // Do nothing.\n },\n\n isInstalled(): boolean {\n return false;\n },\n\n ignoreLogs(patterns: $ReadOnlyArray): void {\n // Do nothing.\n },\n\n ignoreAllLogs(value?: ?boolean): void {\n // Do nothing.\n },\n\n clearAllLogs(): void {\n // Do nothing.\n },\n\n addLog(log: LogData): void {\n // Do nothing.\n },\n\n addException(error: ExtendedExceptionData): void {\n // Do nothing.\n },\n };\n}\n\nmodule.exports = (LogBox: ILogBox);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst InteractionManager = require('./InteractionManager');\nconst TouchHistoryMath = require('./TouchHistoryMath');\n\nimport type {PressEvent} from '../Types/CoreEventTypes';\n\nconst currentCentroidXOfTouchesChangedAfter =\n TouchHistoryMath.currentCentroidXOfTouchesChangedAfter;\nconst currentCentroidYOfTouchesChangedAfter =\n TouchHistoryMath.currentCentroidYOfTouchesChangedAfter;\nconst previousCentroidXOfTouchesChangedAfter =\n TouchHistoryMath.previousCentroidXOfTouchesChangedAfter;\nconst previousCentroidYOfTouchesChangedAfter =\n TouchHistoryMath.previousCentroidYOfTouchesChangedAfter;\nconst currentCentroidX = TouchHistoryMath.currentCentroidX;\nconst currentCentroidY = TouchHistoryMath.currentCentroidY;\n\n/**\n * `PanResponder` reconciles several touches into a single gesture. It makes\n * single-touch gestures resilient to extra touches, and can be used to\n * recognize simple multi-touch gestures.\n *\n * By default, `PanResponder` holds an `InteractionManager` handle to block\n * long-running JS events from interrupting active gestures.\n *\n * It provides a predictable wrapper of the responder handlers provided by the\n * [gesture responder system](docs/gesture-responder-system.html).\n * For each handler, it provides a new `gestureState` object alongside the\n * native event object:\n *\n * ```\n * onPanResponderMove: (event, gestureState) => {}\n * ```\n *\n * A native event is a synthetic touch event with the following form:\n *\n * - `nativeEvent`\n * + `changedTouches` - Array of all touch events that have changed since the last event\n * + `identifier` - The ID of the touch\n * + `locationX` - The X position of the touch, relative to the element\n * + `locationY` - The Y position of the touch, relative to the element\n * + `pageX` - The X position of the touch, relative to the root element\n * + `pageY` - The Y position of the touch, relative to the root element\n * + `target` - The node id of the element receiving the touch event\n * + `timestamp` - A time identifier for the touch, useful for velocity calculation\n * + `touches` - Array of all current touches on the screen\n *\n * A `gestureState` object has the following:\n *\n * - `stateID` - ID of the gestureState- persisted as long as there at least\n * one touch on screen\n * - `moveX` - the latest screen coordinates of the recently-moved touch\n * - `moveY` - the latest screen coordinates of the recently-moved touch\n * - `x0` - the screen coordinates of the responder grant\n * - `y0` - the screen coordinates of the responder grant\n * - `dx` - accumulated distance of the gesture since the touch started\n * - `dy` - accumulated distance of the gesture since the touch started\n * - `vx` - current velocity of the gesture\n * - `vy` - current velocity of the gesture\n * - `numberActiveTouches` - Number of touches currently on screen\n *\n * ### Basic Usage\n *\n * ```\n * componentWillMount: function() {\n * this._panResponder = PanResponder.create({\n * // Ask to be the responder:\n * onStartShouldSetPanResponder: (evt, gestureState) => true,\n * onStartShouldSetPanResponderCapture: (evt, gestureState) => true,\n * onMoveShouldSetPanResponder: (evt, gestureState) => true,\n * onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,\n *\n * onPanResponderGrant: (evt, gestureState) => {\n * // The gesture has started. Show visual feedback so the user knows\n * // what is happening!\n *\n * // gestureState.d{x,y} will be set to zero now\n * },\n * onPanResponderMove: (evt, gestureState) => {\n * // The most recent move distance is gestureState.move{X,Y}\n *\n * // The accumulated gesture distance since becoming responder is\n * // gestureState.d{x,y}\n * },\n * onPanResponderTerminationRequest: (evt, gestureState) => true,\n * onPanResponderRelease: (evt, gestureState) => {\n * // The user has released all touches while this view is the\n * // responder. This typically means a gesture has succeeded\n * },\n * onPanResponderTerminate: (evt, gestureState) => {\n * // Another component has become the responder, so this gesture\n * // should be cancelled\n * },\n * onShouldBlockNativeResponder: (evt, gestureState) => {\n * // Returns whether this component should block native components from becoming the JS\n * // responder. Returns true by default. Is currently only supported on android.\n * return true;\n * },\n * });\n * },\n *\n * render: function() {\n * return (\n * \n * );\n * },\n *\n * ```\n *\n * ### Working Example\n *\n * To see it in action, try the\n * [PanResponder example in RNTester](https://github.com/facebook/react-native/blob/HEAD/packages/rn-tester/js/examples/PanResponder/PanResponderExample.js)\n */\n\nexport type GestureState = {|\n /**\n * ID of the gestureState - persisted as long as there at least one touch on screen\n */\n stateID: number,\n\n /**\n * The latest screen coordinates of the recently-moved touch\n */\n moveX: number,\n\n /**\n * The latest screen coordinates of the recently-moved touch\n */\n moveY: number,\n\n /**\n * The screen coordinates of the responder grant\n */\n x0: number,\n\n /**\n * The screen coordinates of the responder grant\n */\n y0: number,\n\n /**\n * Accumulated distance of the gesture since the touch started\n */\n dx: number,\n\n /**\n * Accumulated distance of the gesture since the touch started\n */\n dy: number,\n\n /**\n * Current velocity of the gesture\n */\n vx: number,\n\n /**\n * Current velocity of the gesture\n */\n vy: number,\n\n /**\n * Number of touches currently on screen\n */\n numberActiveTouches: number,\n\n /**\n * All `gestureState` accounts for timeStamps up until this value\n *\n * @private\n */\n _accountsForMovesUpTo: number,\n|};\n\ntype ActiveCallback = (\n event: PressEvent,\n gestureState: GestureState,\n) => boolean;\n\ntype PassiveCallback = (event: PressEvent, gestureState: GestureState) => mixed;\n\ntype PanResponderConfig = $ReadOnly<{|\n onMoveShouldSetPanResponder?: ?ActiveCallback,\n onMoveShouldSetPanResponderCapture?: ?ActiveCallback,\n onStartShouldSetPanResponder?: ?ActiveCallback,\n onStartShouldSetPanResponderCapture?: ?ActiveCallback,\n /**\n * The body of `onResponderGrant` returns a bool, but the vast majority of\n * callsites return void and this TODO notice is found in it:\n * TODO: t7467124 investigate if this can be removed\n */\n onPanResponderGrant?: ?(PassiveCallback | ActiveCallback),\n onPanResponderReject?: ?PassiveCallback,\n onPanResponderStart?: ?PassiveCallback,\n onPanResponderEnd?: ?PassiveCallback,\n onPanResponderRelease?: ?PassiveCallback,\n onPanResponderMove?: ?PassiveCallback,\n onPanResponderTerminate?: ?PassiveCallback,\n onPanResponderTerminationRequest?: ?ActiveCallback,\n onShouldBlockNativeResponder?: ?ActiveCallback,\n|}>;\n\nconst PanResponder = {\n /**\n *\n * A graphical explanation of the touch data flow:\n *\n * +----------------------------+ +--------------------------------+\n * | ResponderTouchHistoryStore | |TouchHistoryMath |\n * +----------------------------+ +----------+---------------------+\n * |Global store of touchHistory| |Allocation-less math util |\n * |including activeness, start | |on touch history (centroids |\n * |position, prev/cur position.| |and multitouch movement etc) |\n * | | | |\n * +----^-----------------------+ +----^---------------------------+\n * | |\n * | (records relevant history |\n * | of touches relevant for |\n * | implementing higher level |\n * | gestures) |\n * | |\n * +----+-----------------------+ +----|---------------------------+\n * | ResponderEventPlugin | | | Your App/Component |\n * +----------------------------+ +----|---------------------------+\n * |Negotiates which view gets | Low level | | High level |\n * |onResponderMove events. | events w/ | +-+-------+ events w/ |\n * |Also records history into | touchHistory| | Pan | multitouch + |\n * |ResponderTouchHistoryStore. +---------------->Responder+-----> accumulative|\n * +----------------------------+ attached to | | | distance and |\n * each event | +---------+ velocity. |\n * | |\n * | |\n * +--------------------------------+\n *\n *\n *\n * Gesture that calculates cumulative movement over time in a way that just\n * \"does the right thing\" for multiple touches. The \"right thing\" is very\n * nuanced. When moving two touches in opposite directions, the cumulative\n * distance is zero in each dimension. When two touches move in parallel five\n * pixels in the same direction, the cumulative distance is five, not ten. If\n * two touches start, one moves five in a direction, then stops and the other\n * touch moves fives in the same direction, the cumulative distance is ten.\n *\n * This logic requires a kind of processing of time \"clusters\" of touch events\n * so that two touch moves that essentially occur in parallel but move every\n * other frame respectively, are considered part of the same movement.\n *\n * Explanation of some of the non-obvious fields:\n *\n * - moveX/moveY: If no move event has been observed, then `(moveX, moveY)` is\n * invalid. If a move event has been observed, `(moveX, moveY)` is the\n * centroid of the most recently moved \"cluster\" of active touches.\n * (Currently all move have the same timeStamp, but later we should add some\n * threshold for what is considered to be \"moving\"). If a palm is\n * accidentally counted as a touch, but a finger is moving greatly, the palm\n * will move slightly, but we only want to count the single moving touch.\n * - x0/y0: Centroid location (non-cumulative) at the time of becoming\n * responder.\n * - dx/dy: Cumulative touch distance - not the same thing as sum of each touch\n * distance. Accounts for touch moves that are clustered together in time,\n * moving the same direction. Only valid when currently responder (otherwise,\n * it only represents the drag distance below the threshold).\n * - vx/vy: Velocity.\n */\n\n _initializeGestureState(gestureState: GestureState) {\n gestureState.moveX = 0;\n gestureState.moveY = 0;\n gestureState.x0 = 0;\n gestureState.y0 = 0;\n gestureState.dx = 0;\n gestureState.dy = 0;\n gestureState.vx = 0;\n gestureState.vy = 0;\n gestureState.numberActiveTouches = 0;\n // All `gestureState` accounts for timeStamps up until:\n gestureState._accountsForMovesUpTo = 0;\n },\n\n /**\n * This is nuanced and is necessary. It is incorrect to continuously take all\n * active *and* recently moved touches, find the centroid, and track how that\n * result changes over time. Instead, we must take all recently moved\n * touches, and calculate how the centroid has changed just for those\n * recently moved touches, and append that change to an accumulator. This is\n * to (at least) handle the case where the user is moving three fingers, and\n * then one of the fingers stops but the other two continue.\n *\n * This is very different than taking all of the recently moved touches and\n * storing their centroid as `dx/dy`. For correctness, we must *accumulate\n * changes* in the centroid of recently moved touches.\n *\n * There is also some nuance with how we handle multiple moved touches in a\n * single event. With the way `ReactNativeEventEmitter` dispatches touches as\n * individual events, multiple touches generate two 'move' events, each of\n * them triggering `onResponderMove`. But with the way `PanResponder` works,\n * all of the gesture inference is performed on the first dispatch, since it\n * looks at all of the touches (even the ones for which there hasn't been a\n * native dispatch yet). Therefore, `PanResponder` does not call\n * `onResponderMove` passed the first dispatch. This diverges from the\n * typical responder callback pattern (without using `PanResponder`), but\n * avoids more dispatches than necessary.\n */\n _updateGestureStateOnMove(\n gestureState: GestureState,\n touchHistory: $PropertyType,\n ) {\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n gestureState.moveX = currentCentroidXOfTouchesChangedAfter(\n touchHistory,\n gestureState._accountsForMovesUpTo,\n );\n gestureState.moveY = currentCentroidYOfTouchesChangedAfter(\n touchHistory,\n gestureState._accountsForMovesUpTo,\n );\n const movedAfter = gestureState._accountsForMovesUpTo;\n const prevX = previousCentroidXOfTouchesChangedAfter(\n touchHistory,\n movedAfter,\n );\n const x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n const prevY = previousCentroidYOfTouchesChangedAfter(\n touchHistory,\n movedAfter,\n );\n const y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n const nextDX = gestureState.dx + (x - prevX);\n const nextDY = gestureState.dy + (y - prevY);\n\n // TODO: This must be filtered intelligently.\n const dt =\n touchHistory.mostRecentTimeStamp - gestureState._accountsForMovesUpTo;\n gestureState.vx = (nextDX - gestureState.dx) / dt;\n gestureState.vy = (nextDY - gestureState.dy) / dt;\n\n gestureState.dx = nextDX;\n gestureState.dy = nextDY;\n gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp;\n },\n\n /**\n * @param {object} config Enhanced versions of all of the responder callbacks\n * that provide not only the typical `ResponderSyntheticEvent`, but also the\n * `PanResponder` gesture state. Simply replace the word `Responder` with\n * `PanResponder` in each of the typical `onResponder*` callbacks. For\n * example, the `config` object would look like:\n *\n * - `onMoveShouldSetPanResponder: (e, gestureState) => {...}`\n * - `onMoveShouldSetPanResponderCapture: (e, gestureState) => {...}`\n * - `onStartShouldSetPanResponder: (e, gestureState) => {...}`\n * - `onStartShouldSetPanResponderCapture: (e, gestureState) => {...}`\n * - `onPanResponderReject: (e, gestureState) => {...}`\n * - `onPanResponderGrant: (e, gestureState) => {...}`\n * - `onPanResponderStart: (e, gestureState) => {...}`\n * - `onPanResponderEnd: (e, gestureState) => {...}`\n * - `onPanResponderRelease: (e, gestureState) => {...}`\n * - `onPanResponderMove: (e, gestureState) => {...}`\n * - `onPanResponderTerminate: (e, gestureState) => {...}`\n * - `onPanResponderTerminationRequest: (e, gestureState) => {...}`\n * - `onShouldBlockNativeResponder: (e, gestureState) => {...}`\n *\n * In general, for events that have capture equivalents, we update the\n * gestureState once in the capture phase and can use it in the bubble phase\n * as well.\n *\n * Be careful with onStartShould* callbacks. They only reflect updated\n * `gestureState` for start/end events that bubble/capture to the Node.\n * Once the node is the responder, you can rely on every start/end event\n * being processed by the gesture and `gestureState` being updated\n * accordingly. (numberActiveTouches) may not be totally accurate unless you\n * are the responder.\n */\n create(\n config: PanResponderConfig,\n ): $TEMPORARY$object<{|\n getInteractionHandle: () => ?number,\n panHandlers: $TEMPORARY$object<{|\n onMoveShouldSetResponder: (event: PressEvent) => boolean,\n onMoveShouldSetResponderCapture: (event: PressEvent) => boolean,\n onResponderEnd: (event: PressEvent) => void,\n onResponderGrant: (event: PressEvent) => boolean,\n onResponderMove: (event: PressEvent) => void,\n onResponderReject: (event: PressEvent) => void,\n onResponderRelease: (event: PressEvent) => void,\n onResponderStart: (event: PressEvent) => void,\n onResponderTerminate: (event: PressEvent) => void,\n onResponderTerminationRequest: (event: PressEvent) => boolean,\n onStartShouldSetResponder: (event: PressEvent) => boolean,\n onStartShouldSetResponderCapture: (event: PressEvent) => boolean,\n |}>,\n |}> {\n const interactionState = {\n handle: (null: ?number),\n };\n const gestureState: GestureState = {\n // Useful for debugging\n stateID: Math.random(),\n moveX: 0,\n moveY: 0,\n x0: 0,\n y0: 0,\n dx: 0,\n dy: 0,\n vx: 0,\n vy: 0,\n numberActiveTouches: 0,\n _accountsForMovesUpTo: 0,\n };\n const panHandlers = {\n onStartShouldSetResponder(event: PressEvent): boolean {\n return config.onStartShouldSetPanResponder == null\n ? false\n : config.onStartShouldSetPanResponder(event, gestureState);\n },\n onMoveShouldSetResponder(event: PressEvent): boolean {\n return config.onMoveShouldSetPanResponder == null\n ? false\n : config.onMoveShouldSetPanResponder(event, gestureState);\n },\n onStartShouldSetResponderCapture(event: PressEvent): boolean {\n // TODO: Actually, we should reinitialize the state any time\n // touches.length increases from 0 active to > 0 active.\n if (event.nativeEvent.touches.length === 1) {\n PanResponder._initializeGestureState(gestureState);\n }\n gestureState.numberActiveTouches =\n event.touchHistory.numberActiveTouches;\n return config.onStartShouldSetPanResponderCapture != null\n ? config.onStartShouldSetPanResponderCapture(event, gestureState)\n : false;\n },\n\n onMoveShouldSetResponderCapture(event: PressEvent): boolean {\n const touchHistory = event.touchHistory;\n // Responder system incorrectly dispatches should* to current responder\n // Filter out any touch moves past the first one - we would have\n // already processed multi-touch geometry during the first event.\n if (\n gestureState._accountsForMovesUpTo ===\n touchHistory.mostRecentTimeStamp\n ) {\n return false;\n }\n PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n return config.onMoveShouldSetPanResponderCapture\n ? config.onMoveShouldSetPanResponderCapture(event, gestureState)\n : false;\n },\n\n onResponderGrant(event: PressEvent): boolean {\n if (!interactionState.handle) {\n interactionState.handle = InteractionManager.createInteractionHandle();\n }\n gestureState.x0 = currentCentroidX(event.touchHistory);\n gestureState.y0 = currentCentroidY(event.touchHistory);\n gestureState.dx = 0;\n gestureState.dy = 0;\n if (config.onPanResponderGrant) {\n config.onPanResponderGrant(event, gestureState);\n }\n // TODO: t7467124 investigate if this can be removed\n return config.onShouldBlockNativeResponder == null\n ? true\n : config.onShouldBlockNativeResponder(event, gestureState);\n },\n\n onResponderReject(event: PressEvent): void {\n clearInteractionHandle(\n interactionState,\n config.onPanResponderReject,\n event,\n gestureState,\n );\n },\n\n onResponderRelease(event: PressEvent): void {\n clearInteractionHandle(\n interactionState,\n config.onPanResponderRelease,\n event,\n gestureState,\n );\n PanResponder._initializeGestureState(gestureState);\n },\n\n onResponderStart(event: PressEvent): void {\n const touchHistory = event.touchHistory;\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n if (config.onPanResponderStart) {\n config.onPanResponderStart(event, gestureState);\n }\n },\n\n onResponderMove(event: PressEvent): void {\n const touchHistory = event.touchHistory;\n // Guard against the dispatch of two touch moves when there are two\n // simultaneously changed touches.\n if (\n gestureState._accountsForMovesUpTo ===\n touchHistory.mostRecentTimeStamp\n ) {\n return;\n }\n // Filter out any touch moves past the first one - we would have\n // already processed multi-touch geometry during the first event.\n PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n if (config.onPanResponderMove) {\n config.onPanResponderMove(event, gestureState);\n }\n },\n\n onResponderEnd(event: PressEvent): void {\n const touchHistory = event.touchHistory;\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n clearInteractionHandle(\n interactionState,\n config.onPanResponderEnd,\n event,\n gestureState,\n );\n },\n\n onResponderTerminate(event: PressEvent): void {\n clearInteractionHandle(\n interactionState,\n config.onPanResponderTerminate,\n event,\n gestureState,\n );\n PanResponder._initializeGestureState(gestureState);\n },\n\n onResponderTerminationRequest(event: PressEvent): boolean {\n return config.onPanResponderTerminationRequest == null\n ? true\n : config.onPanResponderTerminationRequest(event, gestureState);\n },\n };\n return {\n panHandlers,\n getInteractionHandle(): ?number {\n return interactionState.handle;\n },\n };\n },\n};\n\nfunction clearInteractionHandle(\n interactionState: {handle: ?number, ...},\n callback: ?(ActiveCallback | PassiveCallback),\n event: PressEvent,\n gestureState: GestureState,\n) {\n if (interactionState.handle) {\n InteractionManager.clearInteractionHandle(interactionState.handle);\n interactionState.handle = null;\n }\n if (callback) {\n callback(event, gestureState);\n }\n}\n\nexport type PanResponderInstance = $Call<\n $PropertyType,\n PanResponderConfig,\n>;\n\nmodule.exports = PanResponder;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nconst TouchHistoryMath = {\n /**\n * This code is optimized and not intended to look beautiful. This allows\n * computing of touch centroids that have moved after `touchesChangedAfter`\n * timeStamp. You can compute the current centroid involving all touches\n * moves after `touchesChangedAfter`, or you can compute the previous\n * centroid of all touches that were moved after `touchesChangedAfter`.\n *\n * @param {TouchHistoryMath} touchHistory Standard Responder touch track\n * data.\n * @param {number} touchesChangedAfter timeStamp after which moved touches\n * are considered \"actively moving\" - not just \"active\".\n * @param {boolean} isXAxis Consider `x` dimension vs. `y` dimension.\n * @param {boolean} ofCurrent Compute current centroid for actively moving\n * touches vs. previous centroid of now actively moving touches.\n * @return {number} value of centroid in specified dimension.\n */\n centroidDimension: function(\n touchHistory,\n touchesChangedAfter,\n isXAxis,\n ofCurrent,\n ) {\n const touchBank = touchHistory.touchBank;\n let total = 0;\n let count = 0;\n\n const oneTouchData =\n touchHistory.numberActiveTouches === 1\n ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch]\n : null;\n\n if (oneTouchData !== null) {\n if (\n oneTouchData.touchActive &&\n oneTouchData.currentTimeStamp > touchesChangedAfter\n ) {\n total +=\n ofCurrent && isXAxis\n ? oneTouchData.currentPageX\n : ofCurrent && !isXAxis\n ? oneTouchData.currentPageY\n : !ofCurrent && isXAxis\n ? oneTouchData.previousPageX\n : oneTouchData.previousPageY;\n count = 1;\n }\n } else {\n for (let i = 0; i < touchBank.length; i++) {\n const touchTrack = touchBank[i];\n if (\n touchTrack !== null &&\n touchTrack !== undefined &&\n touchTrack.touchActive &&\n touchTrack.currentTimeStamp >= touchesChangedAfter\n ) {\n let toAdd; // Yuck, program temporarily in invalid state.\n if (ofCurrent && isXAxis) {\n toAdd = touchTrack.currentPageX;\n } else if (ofCurrent && !isXAxis) {\n toAdd = touchTrack.currentPageY;\n } else if (!ofCurrent && isXAxis) {\n toAdd = touchTrack.previousPageX;\n } else {\n toAdd = touchTrack.previousPageY;\n }\n total += toAdd;\n count++;\n }\n }\n }\n return count > 0 ? total / count : TouchHistoryMath.noCentroid;\n },\n\n currentCentroidXOfTouchesChangedAfter: function(\n touchHistory,\n touchesChangedAfter,\n ) {\n return TouchHistoryMath.centroidDimension(\n touchHistory,\n touchesChangedAfter,\n true, // isXAxis\n true, // ofCurrent\n );\n },\n\n currentCentroidYOfTouchesChangedAfter: function(\n touchHistory,\n touchesChangedAfter,\n ) {\n return TouchHistoryMath.centroidDimension(\n touchHistory,\n touchesChangedAfter,\n false, // isXAxis\n true, // ofCurrent\n );\n },\n\n previousCentroidXOfTouchesChangedAfter: function(\n touchHistory,\n touchesChangedAfter,\n ) {\n return TouchHistoryMath.centroidDimension(\n touchHistory,\n touchesChangedAfter,\n true, // isXAxis\n false, // ofCurrent\n );\n },\n\n previousCentroidYOfTouchesChangedAfter: function(\n touchHistory,\n touchesChangedAfter,\n ) {\n return TouchHistoryMath.centroidDimension(\n touchHistory,\n touchesChangedAfter,\n false, // isXAxis\n false, // ofCurrent\n );\n },\n\n currentCentroidX: function(touchHistory) {\n return TouchHistoryMath.centroidDimension(\n touchHistory,\n 0, // touchesChangedAfter\n true, // isXAxis\n true, // ofCurrent\n );\n },\n\n currentCentroidY: function(touchHistory) {\n return TouchHistoryMath.centroidDimension(\n touchHistory,\n 0, // touchesChangedAfter\n false, // isXAxis\n true, // ofCurrent\n );\n },\n\n noCentroid: -1,\n};\n\nmodule.exports = TouchHistoryMath;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nconst Platform = require('../Utilities/Platform');\n\nimport NativeDialogManagerAndroid from '../NativeModules/specs/NativeDialogManagerAndroid';\nimport NativePermissionsAndroid from './NativePermissionsAndroid';\nimport type {\n PermissionStatus,\n PermissionType,\n} from './NativePermissionsAndroid';\nimport invariant from 'invariant';\n\nexport type Rationale = {\n title: string,\n message: string,\n buttonPositive?: string,\n buttonNegative?: string,\n buttonNeutral?: string,\n ...\n};\n\nconst PERMISSION_REQUEST_RESULT = Object.freeze({\n GRANTED: 'granted',\n DENIED: 'denied',\n NEVER_ASK_AGAIN: 'never_ask_again',\n});\n\nconst PERMISSIONS = Object.freeze({\n READ_CALENDAR: 'android.permission.READ_CALENDAR',\n WRITE_CALENDAR: 'android.permission.WRITE_CALENDAR',\n CAMERA: 'android.permission.CAMERA',\n READ_CONTACTS: 'android.permission.READ_CONTACTS',\n WRITE_CONTACTS: 'android.permission.WRITE_CONTACTS',\n GET_ACCOUNTS: 'android.permission.GET_ACCOUNTS',\n ACCESS_FINE_LOCATION: 'android.permission.ACCESS_FINE_LOCATION',\n ACCESS_COARSE_LOCATION: 'android.permission.ACCESS_COARSE_LOCATION',\n ACCESS_BACKGROUND_LOCATION: 'android.permission.ACCESS_BACKGROUND_LOCATION',\n RECORD_AUDIO: 'android.permission.RECORD_AUDIO',\n READ_PHONE_STATE: 'android.permission.READ_PHONE_STATE',\n CALL_PHONE: 'android.permission.CALL_PHONE',\n READ_CALL_LOG: 'android.permission.READ_CALL_LOG',\n WRITE_CALL_LOG: 'android.permission.WRITE_CALL_LOG',\n ADD_VOICEMAIL: 'com.android.voicemail.permission.ADD_VOICEMAIL',\n USE_SIP: 'android.permission.USE_SIP',\n PROCESS_OUTGOING_CALLS: 'android.permission.PROCESS_OUTGOING_CALLS',\n BODY_SENSORS: 'android.permission.BODY_SENSORS',\n SEND_SMS: 'android.permission.SEND_SMS',\n RECEIVE_SMS: 'android.permission.RECEIVE_SMS',\n READ_SMS: 'android.permission.READ_SMS',\n RECEIVE_WAP_PUSH: 'android.permission.RECEIVE_WAP_PUSH',\n RECEIVE_MMS: 'android.permission.RECEIVE_MMS',\n READ_EXTERNAL_STORAGE: 'android.permission.READ_EXTERNAL_STORAGE',\n WRITE_EXTERNAL_STORAGE: 'android.permission.WRITE_EXTERNAL_STORAGE',\n BLUETOOTH_CONNECT: 'android.permission.BLUETOOTH_CONNECT',\n BLUETOOTH_SCAN: 'android.permission.BLUETOOTH_SCAN',\n BLUETOOTH_ADVERTISE: 'android.permission.BLUETOOTH_ADVERTISE',\n});\n\n/**\n * `PermissionsAndroid` provides access to Android M's new permissions model.\n *\n * See https://reactnative.dev/docs/permissionsandroid.html\n */\n\nclass PermissionsAndroid {\n PERMISSIONS: {|\n ACCESS_BACKGROUND_LOCATION: string,\n ACCESS_COARSE_LOCATION: string,\n ACCESS_FINE_LOCATION: string,\n ADD_VOICEMAIL: string,\n BLUETOOTH_ADVERTISE: string,\n BLUETOOTH_CONNECT: string,\n BLUETOOTH_SCAN: string,\n BODY_SENSORS: string,\n CALL_PHONE: string,\n CAMERA: string,\n GET_ACCOUNTS: string,\n PROCESS_OUTGOING_CALLS: string,\n READ_CALENDAR: string,\n READ_CALL_LOG: string,\n READ_CONTACTS: string,\n READ_EXTERNAL_STORAGE: string,\n READ_PHONE_STATE: string,\n READ_SMS: string,\n RECEIVE_MMS: string,\n RECEIVE_SMS: string,\n RECEIVE_WAP_PUSH: string,\n RECORD_AUDIO: string,\n SEND_SMS: string,\n USE_SIP: string,\n WRITE_CALENDAR: string,\n WRITE_CALL_LOG: string,\n WRITE_CONTACTS: string,\n WRITE_EXTERNAL_STORAGE: string,\n |} = PERMISSIONS;\n RESULTS: {|\n DENIED: $TEMPORARY$string<'denied'>,\n GRANTED: $TEMPORARY$string<'granted'>,\n NEVER_ASK_AGAIN: $TEMPORARY$string<'never_ask_again'>,\n |} = PERMISSION_REQUEST_RESULT;\n\n /**\n * DEPRECATED - use check\n *\n * Returns a promise resolving to a boolean value as to whether the specified\n * permissions has been granted\n *\n * @deprecated\n */\n checkPermission(permission: PermissionType): Promise {\n console.warn(\n '\"PermissionsAndroid.checkPermission\" is deprecated. Use \"PermissionsAndroid.check\" instead',\n );\n if (Platform.OS !== 'android') {\n console.warn(\n '\"PermissionsAndroid\" module works only for Android platform.',\n );\n return Promise.resolve(false);\n }\n\n invariant(\n NativePermissionsAndroid,\n 'PermissionsAndroid is not installed correctly.',\n );\n\n return NativePermissionsAndroid.checkPermission(permission);\n }\n\n /**\n * Returns a promise resolving to a boolean value as to whether the specified\n * permissions has been granted\n *\n * See https://reactnative.dev/docs/permissionsandroid.html#check\n */\n check(permission: PermissionType): Promise {\n if (Platform.OS !== 'android') {\n console.warn(\n '\"PermissionsAndroid\" module works only for Android platform.',\n );\n return Promise.resolve(false);\n }\n\n invariant(\n NativePermissionsAndroid,\n 'PermissionsAndroid is not installed correctly.',\n );\n\n return NativePermissionsAndroid.checkPermission(permission);\n }\n\n /**\n * DEPRECATED - use request\n *\n * Prompts the user to enable a permission and returns a promise resolving to a\n * boolean value indicating whether the user allowed or denied the request\n *\n * If the optional rationale argument is included (which is an object with a\n * `title` and `message`), this function checks with the OS whether it is\n * necessary to show a dialog explaining why the permission is needed\n * (https://developer.android.com/training/permissions/requesting.html#explain)\n * and then shows the system permission dialog\n *\n * @deprecated\n */\n async requestPermission(\n permission: PermissionType,\n rationale?: Rationale,\n ): Promise {\n console.warn(\n '\"PermissionsAndroid.requestPermission\" is deprecated. Use \"PermissionsAndroid.request\" instead',\n );\n if (Platform.OS !== 'android') {\n console.warn(\n '\"PermissionsAndroid\" module works only for Android platform.',\n );\n return Promise.resolve(false);\n }\n\n const response = await this.request(permission, rationale);\n return response === this.RESULTS.GRANTED;\n }\n\n /**\n * Prompts the user to enable a permission and returns a promise resolving to a\n * string value indicating whether the user allowed or denied the request\n *\n * See https://reactnative.dev/docs/permissionsandroid.html#request\n */\n async request(\n permission: PermissionType,\n rationale?: Rationale,\n ): Promise {\n if (Platform.OS !== 'android') {\n console.warn(\n '\"PermissionsAndroid\" module works only for Android platform.',\n );\n return Promise.resolve(this.RESULTS.DENIED);\n }\n\n invariant(\n NativePermissionsAndroid,\n 'PermissionsAndroid is not installed correctly.',\n );\n\n if (rationale) {\n const shouldShowRationale = await NativePermissionsAndroid.shouldShowRequestPermissionRationale(\n permission,\n );\n\n if (shouldShowRationale && !!NativeDialogManagerAndroid) {\n return new Promise((resolve, reject) => {\n const options = {\n ...rationale,\n };\n NativeDialogManagerAndroid.showAlert(\n /* $FlowFixMe[incompatible-exact] (>=0.111.0 site=react_native_fb)\n * This comment suppresses an error found when Flow v0.111 was\n * deployed. To see the error, delete this comment and run Flow.\n */\n options,\n () => reject(new Error('Error showing rationale')),\n () =>\n resolve(NativePermissionsAndroid.requestPermission(permission)),\n );\n });\n }\n }\n return NativePermissionsAndroid.requestPermission(permission);\n }\n\n /**\n * Prompts the user to enable multiple permissions in the same dialog and\n * returns an object with the permissions as keys and strings as values\n * indicating whether the user allowed or denied the request\n *\n * See https://reactnative.dev/docs/permissionsandroid.html#requestmultiple\n */\n requestMultiple(\n permissions: Array,\n ): Promise<{[permission: PermissionType]: PermissionStatus, ...}> {\n if (Platform.OS !== 'android') {\n console.warn(\n '\"PermissionsAndroid\" module works only for Android platform.',\n );\n return Promise.resolve({});\n }\n\n invariant(\n NativePermissionsAndroid,\n 'PermissionsAndroid is not installed correctly.',\n );\n\n return NativePermissionsAndroid.requestMultiplePermissions(permissions);\n }\n}\n\nconst PermissionsAndroidInstance: PermissionsAndroid = new PermissionsAndroid();\n\nmodule.exports = PermissionsAndroidInstance;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\n// TODO: Use proper enum types.\nexport type PermissionStatus = string;\nexport type PermissionType = string;\n/*\nexport type PermissionStatus = 'granted' | 'denied' | 'never_ask_again';\nexport type PermissionType =\n | 'android.permission.READ_CALENDAR'\n | 'android.permission.WRITE_CALENDAR'\n | 'android.permission.CAMERA'\n | 'android.permission.READ_CONTACTS'\n | 'android.permission.WRITE_CONTACTS'\n | 'android.permission.GET_ACCOUNTS'\n | 'android.permission.ACCESS_BACKGROUND_LOCATION'\n | 'android.permission.ACCESS_FINE_LOCATION'\n | 'android.permission.ACCESS_COARSE_LOCATION'\n | 'android.permission.RECORD_AUDIO'\n | 'android.permission.READ_PHONE_STATE'\n | 'android.permission.CALL_PHONE'\n | 'android.permission.READ_CALL_LOG'\n | 'android.permission.WRITE_CALL_LOG'\n | 'com.android.voicemail.permission.ADD_VOICEMAIL'\n | 'android.permission.USE_SIP'\n | 'android.permission.PROCESS_OUTGOING_CALLS'\n | 'android.permission.BODY_SENSORS'\n | 'android.permission.SEND_SMS'\n | 'android.permission.RECEIVE_SMS'\n | 'android.permission.READ_SMS'\n | 'android.permission.RECEIVE_WAP_PUSH'\n | 'android.permission.RECEIVE_MMS'\n | 'android.permission.READ_EXTERNAL_STORAGE'\n | 'android.permission.WRITE_EXTERNAL_STORAGE'\n | 'android.permission.BLUETOOTH_CONNECT'\n | 'android.permission.BLUETOOTH_SCAN'\n | 'android.permission.BLUETOOTH_ADVERTISE';\n*/\n\nexport interface Spec extends TurboModule {\n +checkPermission: (permission: PermissionType) => Promise;\n +requestPermission: (permission: PermissionType) => Promise;\n +shouldShowRequestPermissionRationale: (\n permission: string,\n ) => Promise;\n +requestMultiplePermissions: (\n permissions: Array,\n ) => Promise<{[permission: PermissionType]: PermissionStatus, ...}>;\n}\n\nexport default (TurboModuleRegistry.get('PermissionsAndroid'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport NativePushNotificationManagerIOS from './NativePushNotificationManagerIOS';\nimport invariant from 'invariant';\nimport Platform from '../Utilities/Platform';\n\ntype NativePushNotificationIOSEventDefinitions = {\n remoteNotificationReceived: [\n {\n notificationId: string,\n remote: boolean,\n ...\n },\n ],\n remoteNotificationsRegistered: [\n {\n deviceToken?: ?string,\n ...\n },\n ],\n remoteNotificationRegistrationError: [\n {\n message: string,\n code: number,\n details: {...},\n },\n ],\n localNotificationReceived: [{...}],\n};\n\nconst PushNotificationEmitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativePushNotificationManagerIOS,\n);\n\nconst _notifHandlers = new Map();\n\nconst DEVICE_NOTIF_EVENT = 'remoteNotificationReceived';\nconst NOTIF_REGISTER_EVENT = 'remoteNotificationsRegistered';\nconst NOTIF_REGISTRATION_ERROR_EVENT = 'remoteNotificationRegistrationError';\nconst DEVICE_LOCAL_NOTIF_EVENT = 'localNotificationReceived';\n\nexport type ContentAvailable = 1 | null | void;\n\nexport type FetchResult = {\n NewData: string,\n NoData: string,\n ResultFailed: string,\n ...\n};\n\n/**\n * An event emitted by PushNotificationIOS.\n */\nexport type PushNotificationEventName = $Keys<{\n /**\n * Fired when a remote notification is received. The handler will be invoked\n * with an instance of `PushNotificationIOS`.\n */\n notification: string,\n /**\n * Fired when a local notification is received. The handler will be invoked\n * with an instance of `PushNotificationIOS`.\n */\n localNotification: string,\n /**\n * Fired when the user registers for remote notifications. The handler will be\n * invoked with a hex string representing the deviceToken.\n */\n register: string,\n /**\n * Fired when the user fails to register for remote notifications. Typically\n * occurs when APNS is having issues, or the device is a simulator. The\n * handler will be invoked with {message: string, code: number, details: any}.\n */\n registrationError: string,\n ...\n}>;\n\n/**\n *\n * Handle push notifications for your app, including permission handling and\n * icon badge number.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html\n */\nclass PushNotificationIOS {\n _data: Object;\n _alert: string | Object;\n _sound: string;\n _category: string;\n _contentAvailable: ContentAvailable;\n _badgeCount: number;\n _notificationId: string;\n _isRemote: boolean;\n _remoteNotificationCompleteCallbackCalled: boolean;\n _threadID: string;\n\n static FetchResult: FetchResult = {\n NewData: 'UIBackgroundFetchResultNewData',\n NoData: 'UIBackgroundFetchResultNoData',\n ResultFailed: 'UIBackgroundFetchResultFailed',\n };\n\n /**\n * Schedules the localNotification for immediate presentation.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#presentlocalnotification\n */\n static presentLocalNotification(details: Object) {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.presentLocalNotification(details);\n }\n\n /**\n * Schedules the localNotification for future presentation.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#schedulelocalnotification\n */\n static scheduleLocalNotification(details: Object) {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.scheduleLocalNotification(details);\n }\n\n /**\n * Cancels all scheduled localNotifications.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#cancelalllocalnotifications\n */\n static cancelAllLocalNotifications() {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.cancelAllLocalNotifications();\n }\n\n /**\n * Remove all delivered notifications from Notification Center.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#removealldeliverednotifications\n */\n static removeAllDeliveredNotifications(): void {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.removeAllDeliveredNotifications();\n }\n\n /**\n * Provides you with a list of the app’s notifications that are still displayed in Notification Center.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getdeliverednotifications\n */\n static getDeliveredNotifications(\n callback: (notifications: Array) => void,\n ): void {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.getDeliveredNotifications(callback);\n }\n\n /**\n * Removes the specified notifications from Notification Center\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#removedeliverednotifications\n */\n static removeDeliveredNotifications(identifiers: Array): void {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.removeDeliveredNotifications(identifiers);\n }\n\n /**\n * Sets the badge number for the app icon on the home screen.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#setapplicationiconbadgenumber\n */\n static setApplicationIconBadgeNumber(number: number) {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.setApplicationIconBadgeNumber(number);\n }\n\n /**\n * Gets the current badge number for the app icon on the home screen.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getapplicationiconbadgenumber\n */\n static getApplicationIconBadgeNumber(callback: Function) {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.getApplicationIconBadgeNumber(callback);\n }\n\n /**\n * Cancel local notifications.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#cancellocalnotification\n */\n static cancelLocalNotifications(userInfo: Object) {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.cancelLocalNotifications(userInfo);\n }\n\n /**\n * Gets the local notifications that are currently scheduled.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getscheduledlocalnotifications\n */\n static getScheduledLocalNotifications(callback: Function) {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.getScheduledLocalNotifications(callback);\n }\n\n /**\n * Attaches a listener to remote or local notification events while the app\n * is running in the foreground or the background.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#addeventlistener\n */\n static addEventListener(type: PushNotificationEventName, handler: Function) {\n invariant(\n type === 'notification' ||\n type === 'register' ||\n type === 'registrationError' ||\n type === 'localNotification',\n 'PushNotificationIOS only supports `notification`, `register`, `registrationError`, and `localNotification` events',\n );\n let listener;\n if (type === 'notification') {\n listener = PushNotificationEmitter.addListener(\n DEVICE_NOTIF_EVENT,\n notifData => {\n handler(new PushNotificationIOS(notifData));\n },\n );\n } else if (type === 'localNotification') {\n listener = PushNotificationEmitter.addListener(\n DEVICE_LOCAL_NOTIF_EVENT,\n notifData => {\n handler(new PushNotificationIOS(notifData));\n },\n );\n } else if (type === 'register') {\n listener = PushNotificationEmitter.addListener(\n NOTIF_REGISTER_EVENT,\n registrationInfo => {\n handler(registrationInfo.deviceToken);\n },\n );\n } else if (type === 'registrationError') {\n listener = PushNotificationEmitter.addListener(\n NOTIF_REGISTRATION_ERROR_EVENT,\n errorInfo => {\n handler(errorInfo);\n },\n );\n }\n _notifHandlers.set(type, listener);\n }\n\n /**\n * Removes the event listener. Do this in `componentWillUnmount` to prevent\n * memory leaks.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#removeeventlistener\n */\n static removeEventListener(\n type: PushNotificationEventName,\n handler: Function,\n ) {\n invariant(\n type === 'notification' ||\n type === 'register' ||\n type === 'registrationError' ||\n type === 'localNotification',\n 'PushNotificationIOS only supports `notification`, `register`, `registrationError`, and `localNotification` events',\n );\n const listener = _notifHandlers.get(type);\n if (!listener) {\n return;\n }\n listener.remove();\n _notifHandlers.delete(type);\n }\n\n /**\n * Requests notification permissions from iOS, prompting the user's\n * dialog box. By default, it will request all notification permissions, but\n * a subset of these can be requested by passing a map of requested\n * permissions.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#requestpermissions\n */\n static requestPermissions(permissions?: {\n alert?: boolean,\n badge?: boolean,\n sound?: boolean,\n ...\n }): Promise<{\n alert: boolean,\n badge: boolean,\n sound: boolean,\n ...\n }> {\n let requestedPermissions = {\n alert: true,\n badge: true,\n sound: true,\n };\n if (permissions) {\n requestedPermissions = {\n alert: !!permissions.alert,\n badge: !!permissions.badge,\n sound: !!permissions.sound,\n };\n }\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n return NativePushNotificationManagerIOS.requestPermissions(\n requestedPermissions,\n );\n }\n\n /**\n * Unregister for all remote notifications received via Apple Push Notification service.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#abandonpermissions\n */\n static abandonPermissions() {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.abandonPermissions();\n }\n\n /**\n * See what push permissions are currently enabled. `callback` will be\n * invoked with a `permissions` object.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#checkpermissions\n */\n static checkPermissions(callback: Function) {\n invariant(typeof callback === 'function', 'Must provide a valid callback');\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.checkPermissions(callback);\n }\n\n /**\n * This method returns a promise that resolves to either the notification\n * object if the app was launched by a push notification, or `null` otherwise.\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getinitialnotification\n */\n static getInitialNotification(): Promise {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n return NativePushNotificationManagerIOS.getInitialNotification().then(\n notification => {\n return notification && new PushNotificationIOS(notification);\n },\n );\n }\n\n /**\n * This method returns a promise that resolves to notification authorization status.\n */\n static getAuthorizationStatus(\n callback: (authorizationStatus: number) => void,\n ): void {\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n\n NativePushNotificationManagerIOS.getAuthorizationStatus(callback);\n }\n\n /**\n * You will never need to instantiate `PushNotificationIOS` yourself.\n * Listening to the `notification` event and invoking\n * `getInitialNotification` is sufficient\n *\n */\n constructor(nativeNotif: Object) {\n this._data = {};\n this._remoteNotificationCompleteCallbackCalled = false;\n this._isRemote = nativeNotif.remote;\n if (this._isRemote) {\n this._notificationId = nativeNotif.notificationId;\n }\n\n if (nativeNotif.remote) {\n // Extract data from Apple's `aps` dict as defined:\n // https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html\n Object.keys(nativeNotif).forEach(notifKey => {\n const notifVal = nativeNotif[notifKey];\n if (notifKey === 'aps') {\n this._alert = notifVal.alert;\n this._sound = notifVal.sound;\n this._badgeCount = notifVal.badge;\n this._category = notifVal.category;\n this._contentAvailable = notifVal['content-available'];\n this._threadID = notifVal['thread-id'];\n } else {\n this._data[notifKey] = notifVal;\n }\n });\n } else {\n // Local notifications aren't being sent down with `aps` dict.\n this._badgeCount = nativeNotif.applicationIconBadgeNumber;\n this._sound = nativeNotif.soundName;\n this._alert = nativeNotif.alertBody;\n this._data = nativeNotif.userInfo;\n this._category = nativeNotif.category;\n }\n }\n\n /**\n * This method is available for remote notifications that have been received via:\n * `application:didReceiveRemoteNotification:fetchCompletionHandler:`\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#finish\n */\n finish(fetchResult: string) {\n if (\n !this._isRemote ||\n !this._notificationId ||\n this._remoteNotificationCompleteCallbackCalled\n ) {\n return;\n }\n this._remoteNotificationCompleteCallbackCalled = true;\n\n invariant(\n NativePushNotificationManagerIOS,\n 'PushNotificationManager is not available.',\n );\n NativePushNotificationManagerIOS.onFinishRemoteNotification(\n this._notificationId,\n fetchResult,\n );\n }\n\n /**\n * An alias for `getAlert` to get the notification's main message string\n */\n getMessage(): ?string | ?Object {\n // alias because \"alert\" is an ambiguous name\n return this._alert;\n }\n\n /**\n * Gets the sound string from the `aps` object\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getsound\n */\n getSound(): ?string {\n return this._sound;\n }\n\n /**\n * Gets the category string from the `aps` object\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getcategory\n */\n getCategory(): ?string {\n return this._category;\n }\n\n /**\n * Gets the notification's main message from the `aps` object\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getalert\n */\n getAlert(): ?string | ?Object {\n return this._alert;\n }\n\n /**\n * Gets the content-available number from the `aps` object\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getcontentavailable\n */\n getContentAvailable(): ContentAvailable {\n return this._contentAvailable;\n }\n\n /**\n * Gets the badge count number from the `aps` object\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getbadgecount\n */\n getBadgeCount(): ?number {\n return this._badgeCount;\n }\n\n /**\n * Gets the data object on the notif\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getdata\n */\n getData(): ?Object {\n return this._data;\n }\n\n /**\n * Gets the thread ID on the notif\n *\n * See https://reactnative.dev/docs/pushnotificationios.html#getthreadid\n */\n getThreadID(): ?string {\n return this._threadID;\n }\n}\n\nmodule.exports = PushNotificationIOS;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\ntype Permissions = {|\n alert: boolean,\n badge: boolean,\n sound: boolean,\n|};\n\ntype Notification = {|\n +alertTitle?: ?string,\n // Actual type: string | number\n +fireDate?: ?number,\n +alertBody?: ?string,\n +alertAction?: ?string,\n +userInfo?: ?Object,\n +category?: ?string,\n // Actual type: 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute'\n +repeatInterval?: ?string,\n +applicationIconBadgeNumber?: ?number,\n +isSilent?: ?boolean,\n|};\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {||};\n +onFinishRemoteNotification: (\n notificationId: string,\n /**\n * Type:\n * 'UIBackgroundFetchResultNewData' |\n * 'UIBackgroundFetchResultNoData' |\n * 'UIBackgroundFetchResultFailed'\n */\n fetchResult: string,\n ) => void;\n +setApplicationIconBadgeNumber: (num: number) => void;\n +getApplicationIconBadgeNumber: (callback: (num: number) => void) => void;\n +requestPermissions: (permission: {|\n +alert: boolean,\n +badge: boolean,\n +sound: boolean,\n |}) => Promise;\n +abandonPermissions: () => void;\n +checkPermissions: (callback: (permissions: Permissions) => void) => void;\n +presentLocalNotification: (notification: Notification) => void;\n +scheduleLocalNotification: (notification: Notification) => void;\n +cancelAllLocalNotifications: () => void;\n +cancelLocalNotifications: (userInfo: Object) => void;\n +getInitialNotification: () => Promise;\n +getScheduledLocalNotifications: (\n callback: (notification: Notification) => void,\n ) => void;\n +removeAllDeliveredNotifications: () => void;\n +removeDeliveredNotifications: (identifiers: Array) => void;\n +getDeliveredNotifications: (\n callback: (notification: Array) => void,\n ) => void;\n +getAuthorizationStatus: (\n callback: (authorizationStatus: number) => void,\n ) => void;\n +addListener: (eventType: string) => void;\n +removeListeners: (count: number) => void;\n}\n\nexport default (TurboModuleRegistry.get(\n 'PushNotificationManager',\n): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\nimport NativeSettingsManager from './NativeSettingsManager';\nimport invariant from 'invariant';\n\nconst subscriptions: Array<{\n keys: Array,\n callback: ?Function,\n ...\n}> = [];\n\nconst Settings = {\n _settings: (NativeSettingsManager &&\n NativeSettingsManager.getConstants().settings: any),\n\n get(key: string): mixed {\n // $FlowFixMe[object-this-reference]\n return this._settings[key];\n },\n\n set(settings: Object) {\n // $FlowFixMe[object-this-reference]\n this._settings = Object.assign(this._settings, settings);\n NativeSettingsManager.setValues(settings);\n },\n\n watchKeys(keys: string | Array, callback: Function): number {\n if (typeof keys === 'string') {\n keys = [keys];\n }\n\n invariant(\n Array.isArray(keys),\n 'keys should be a string or array of strings',\n );\n\n const sid = subscriptions.length;\n subscriptions.push({keys: keys, callback: callback});\n return sid;\n },\n\n clearWatch(watchId: number) {\n if (watchId < subscriptions.length) {\n subscriptions[watchId] = {keys: [], callback: null};\n }\n },\n\n _sendObservations(body: Object) {\n Object.keys(body).forEach(key => {\n const newValue = body[key];\n // $FlowFixMe[object-this-reference]\n const didChange = this._settings[key] !== newValue;\n // $FlowFixMe[object-this-reference]\n this._settings[key] = newValue;\n\n if (didChange) {\n subscriptions.forEach(sub => {\n if (sub.keys.indexOf(key) !== -1 && sub.callback) {\n sub.callback();\n }\n });\n }\n });\n },\n};\n\nRCTDeviceEventEmitter.addListener(\n 'settingsUpdated',\n Settings._sendObservations.bind(Settings),\n);\n\nmodule.exports = Settings;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {|\n settings: Object,\n |};\n +setValues: (values: Object) => void;\n +deleteValues: (values: Array) => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing(\n 'SettingsManager',\n): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nconst Platform = require('../Utilities/Platform');\n\nconst invariant = require('invariant');\nconst processColor = require('../StyleSheet/processColor');\n\nimport NativeActionSheetManager from '../ActionSheetIOS/NativeActionSheetManager';\nimport NativeShareModule from './NativeShareModule';\n\ntype Content =\n | {\n title?: string,\n message: string,\n ...\n }\n | {\n title?: string,\n url: string,\n ...\n };\ntype Options = {\n dialogTitle?: string,\n excludedActivityTypes?: Array,\n tintColor?: string,\n subject?: string,\n ...\n};\n\nclass Share {\n /**\n * Open a dialog to share text content.\n *\n * In iOS, Returns a Promise which will be invoked an object containing `action`, `activityType`.\n * If the user dismissed the dialog, the Promise will still be resolved with action being `Share.dismissedAction`\n * and all the other keys being undefined.\n *\n * In Android, Returns a Promise which always be resolved with action being `Share.sharedAction`.\n *\n * ### Content\n *\n * - `message` - a message to share\n *\n * #### iOS\n *\n * - `url` - an URL to share\n *\n * At least one of URL and message is required.\n *\n * #### Android\n *\n * - `title` - title of the message\n *\n * ### Options\n *\n * #### iOS\n *\n * - `subject` - a subject to share via email\n * - `excludedActivityTypes`\n * - `tintColor`\n *\n * #### Android\n *\n * - `dialogTitle`\n *\n */\n static share(\n content: Content,\n options: Options = {},\n ): Promise<{action: string, activityType: ?string}> {\n invariant(\n typeof content === 'object' && content !== null,\n 'Content to share must be a valid object',\n );\n invariant(\n typeof content.url === 'string' || typeof content.message === 'string',\n 'At least one of URL and message is required',\n );\n invariant(\n typeof options === 'object' && options !== null,\n 'Options must be a valid object',\n );\n\n if (Platform.OS === 'android') {\n invariant(\n NativeShareModule,\n 'ShareModule should be registered on Android.',\n );\n invariant(\n content.title == null || typeof content.title === 'string',\n 'Invalid title: title should be a string.',\n );\n\n const newContent = {\n title: content.title,\n message:\n typeof content.message === 'string' ? content.message : undefined,\n };\n\n return NativeShareModule.share(newContent, options.dialogTitle).then(\n result => ({\n activityType: null,\n ...result,\n }),\n );\n } else if (Platform.OS === 'ios') {\n return new Promise((resolve, reject) => {\n const tintColor = processColor(options.tintColor);\n\n invariant(\n tintColor == null || typeof tintColor === 'number',\n 'Unexpected color given for options.tintColor',\n );\n\n invariant(\n NativeActionSheetManager,\n 'NativeActionSheetManager is not registered on iOS, but it should be.',\n );\n\n NativeActionSheetManager.showShareActionSheetWithOptions(\n {\n message:\n typeof content.message === 'string' ? content.message : undefined,\n url: typeof content.url === 'string' ? content.url : undefined,\n subject: options.subject,\n tintColor: typeof tintColor === 'number' ? tintColor : undefined,\n excludedActivityTypes: options.excludedActivityTypes,\n },\n error => reject(error),\n (success, activityType) => {\n if (success) {\n resolve({\n action: 'sharedAction',\n activityType: activityType,\n });\n } else {\n resolve({\n action: 'dismissedAction',\n activityType: null,\n });\n }\n },\n );\n });\n } else {\n return Promise.reject(new Error('Unsupported platform'));\n }\n }\n\n /**\n * The content was successfully shared.\n */\n static sharedAction: 'sharedAction' = 'sharedAction';\n\n /**\n * The dialog has been dismissed.\n * @platform ios\n */\n static dismissedAction: 'dismissedAction' = 'dismissedAction';\n}\n\nmodule.exports = Share;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {||};\n +share: (\n content: {|title?: string, message?: string|},\n dialogTitle?: string,\n ) => Promise<{|action: string|}>;\n}\n\nexport default (TurboModuleRegistry.get('ShareModule'): ?Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @noflow\n */\n\n'use strict';\n\nconst ToastAndroid = {\n show: function(message: string, duration: number): void {\n console.warn('ToastAndroid is not supported on this platform.');\n },\n\n showWithGravity: function(\n message: string,\n duration: number,\n gravity: number,\n ): void {\n console.warn('ToastAndroid is not supported on this platform.');\n },\n\n showWithGravityAndOffset: function(\n message: string,\n duration: number,\n gravity: number,\n xOffset: number,\n yOffset: number,\n ): void {\n console.warn('ToastAndroid is not supported on this platform.');\n },\n};\n\nmodule.exports = ToastAndroid;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport {useMemo} from 'react';\nimport {useSubscription} from 'use-subscription';\nimport Appearance from './Appearance';\nimport type {ColorSchemeName} from './NativeAppearance';\n\nexport default function useColorScheme(): ?ColorSchemeName {\n const subscription = useMemo(\n () => ({\n getCurrentValue: () => Appearance.getColorScheme(),\n subscribe: callback => {\n const appearanceSubscription = Appearance.addChangeListener(callback);\n return () => {\n appearanceSubscription.remove();\n };\n },\n }),\n [],\n );\n\n return useSubscription(subscription);\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/use-subscription.production.min.js');\n} else {\n module.exports = require('./cjs/use-subscription.development.js');\n}\n","/** @license React v1.5.0\n * use-subscription.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"object-assign\"),g=require(\"react\");\nexports.useSubscription=function(a){var c=a.getCurrentValue,d=a.subscribe,b=g.useState(function(){return{getCurrentValue:c,subscribe:d,value:c()}});a=b[0];var f=b[1];b=a.value;if(a.getCurrentValue!==c||a.subscribe!==d)b=c(),f({getCurrentValue:c,subscribe:d,value:b});g.useDebugValue(b);g.useEffect(function(){function b(){if(!a){var b=c();f(function(a){return a.getCurrentValue!==c||a.subscribe!==d||a.value===b?a:e({},a,{value:b})})}}var a=!1,h=d(b);b();return function(){a=!0;h()}},[c,d]);return b};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport Dimensions from './Dimensions';\nimport {\n type DisplayMetrics,\n type DisplayMetricsAndroid,\n} from './NativeDeviceInfo';\nimport {useEffect, useState} from 'react';\n\nexport default function useWindowDimensions():\n | DisplayMetrics\n | DisplayMetricsAndroid {\n const [dimensions, setDimensions] = useState(() => Dimensions.get('window'));\n useEffect(() => {\n function handleChange({window}) {\n if (\n dimensions.width !== window.width ||\n dimensions.height !== window.height ||\n dimensions.scale !== window.scale ||\n dimensions.fontScale !== window.fontScale\n ) {\n setDimensions(window);\n }\n }\n const subscription = Dimensions.addEventListener('change', handleChange);\n // We might have missed an update between calling `get` in render and\n // `addEventListener` in this handler, so we set it here. If there was\n // no change, React will filter out this update as a no-op.\n handleChange({window: Dimensions.get('window')});\n return () => {\n subscription.remove();\n };\n }, [dimensions]);\n return dimensions;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nconst deepFreezeAndThrowOnMutationInDev = require('./Utilities/deepFreezeAndThrowOnMutationInDev');\n\n/**\n * A collection of Unicode sequences for various characters and emoji.\n *\n * - More explicit than using the sequences directly in code.\n * - Source code should be limited to ASCII.\n * - Less chance of typos.\n */\nconst UTFSequence: {|\n BOM: string,\n BULLET: string,\n BULLET_SP: string,\n MDASH: string,\n MDASH_SP: string,\n MIDDOT: string,\n MIDDOT_KATAKANA: string,\n MIDDOT_SP: string,\n NBSP: string,\n NDASH: string,\n NDASH_SP: string,\n PIZZA: string,\n TRIANGLE_LEFT: string,\n TRIANGLE_RIGHT: string,\n|} = deepFreezeAndThrowOnMutationInDev({\n BOM: '\\ufeff', // byte order mark\n BULLET: '\\u2022', // bullet: •\n BULLET_SP: '\\u00A0\\u2022\\u00A0', //  • \n MIDDOT: '\\u00B7', // normal middle dot: ·\n MIDDOT_SP: '\\u00A0\\u00B7\\u00A0', //  · \n MIDDOT_KATAKANA: '\\u30FB', // katakana middle dot\n MDASH: '\\u2014', // em dash: —\n MDASH_SP: '\\u00A0\\u2014\\u00A0', //  — \n NDASH: '\\u2013', // en dash: –\n NDASH_SP: '\\u00A0\\u2013\\u00A0', //  – \n NBSP: '\\u00A0', // non-breaking space:  \n PIZZA: '\\uD83C\\uDF55',\n TRIANGLE_LEFT: '\\u25c0', // black left-pointing triangle\n TRIANGLE_RIGHT: '\\u25b6', // black right-pointing triangle\n});\n\nmodule.exports = UTFSequence;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n * @jsdoc\n */\n\nimport NativeVibration from './NativeVibration';\nconst Platform = require('../Utilities/Platform');\n\n/**\n * Vibration API\n *\n * See https://reactnative.dev/docs/vibration.html\n */\n\nlet _vibrating: boolean = false;\nlet _id: number = 0; // _id is necessary to prevent race condition.\nconst _default_vibration_length = 400;\n\nfunction vibrateByPattern(pattern: Array, repeat: boolean = false) {\n if (_vibrating) {\n return;\n }\n _vibrating = true;\n if (pattern[0] === 0) {\n NativeVibration.vibrate(_default_vibration_length);\n // $FlowFixMe[reassign-const]\n pattern = pattern.slice(1);\n }\n if (pattern.length === 0) {\n _vibrating = false;\n return;\n }\n setTimeout(() => vibrateScheduler(++_id, pattern, repeat, 1), pattern[0]);\n}\n\nfunction vibrateScheduler(\n id,\n pattern: Array,\n repeat: boolean,\n nextIndex: number,\n) {\n if (!_vibrating || id !== _id) {\n return;\n }\n NativeVibration.vibrate(_default_vibration_length);\n if (nextIndex >= pattern.length) {\n if (repeat) {\n // $FlowFixMe[reassign-const]\n nextIndex = 0;\n } else {\n _vibrating = false;\n return;\n }\n }\n setTimeout(\n () => vibrateScheduler(id, pattern, repeat, nextIndex + 1),\n pattern[nextIndex],\n );\n}\n\nconst Vibration = {\n /**\n * Trigger a vibration with specified `pattern`.\n *\n * See https://reactnative.dev/docs/vibration.html#vibrate\n */\n vibrate: function(\n pattern: number | Array = _default_vibration_length,\n repeat: boolean = false,\n ) {\n if (Platform.OS === 'android') {\n if (typeof pattern === 'number') {\n NativeVibration.vibrate(pattern);\n } else if (Array.isArray(pattern)) {\n NativeVibration.vibrateByPattern(pattern, repeat ? 0 : -1);\n } else {\n throw new Error('Vibration pattern should be a number or array');\n }\n } else {\n if (_vibrating) {\n return;\n }\n if (typeof pattern === 'number') {\n NativeVibration.vibrate(pattern);\n } else if (Array.isArray(pattern)) {\n vibrateByPattern(pattern, repeat);\n } else {\n throw new Error('Vibration pattern should be a number or array');\n }\n }\n },\n /**\n * Stop vibration\n *\n * See https://reactnative.dev/docs/vibration.html#cancel\n */\n cancel: function() {\n if (Platform.OS === 'ios') {\n _vibrating = false;\n } else {\n NativeVibration.cancel();\n }\n },\n};\n\nmodule.exports = Vibration;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\nimport type {TurboModule} from '../TurboModule/RCTExport';\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\n\nexport interface Spec extends TurboModule {\n +getConstants: () => {||};\n +vibrate: (pattern: number) => void;\n\n // Android only\n +vibrateByPattern: (pattern: Array, repeat: number) => void;\n +cancel: () => void;\n}\n\nexport default (TurboModuleRegistry.getEnforcing('Vibration'): Spec);\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n * @format\n */\n\n'use strict';\n\nconst React = require('react');\n\nconst LogBox = require('../LogBox/LogBox');\n\nimport type {IgnorePattern} from '../LogBox/Data/LogBoxData';\n\ntype Props = $ReadOnly<{||}>;\n\nlet YellowBox;\nif (__DEV__) {\n YellowBox = class extends React.Component {\n static ignoreWarnings(patterns: $ReadOnlyArray): void {\n console.warn(\n 'YellowBox has been replaced with LogBox. Please call LogBox.ignoreLogs() instead.',\n );\n\n LogBox.ignoreLogs(patterns);\n }\n\n static install(): void {\n console.warn(\n 'YellowBox has been replaced with LogBox. Please call LogBox.install() instead.',\n );\n LogBox.install();\n }\n\n static uninstall(): void {\n console.warn(\n 'YellowBox has been replaced with LogBox. Please call LogBox.uninstall() instead.',\n );\n LogBox.uninstall();\n }\n\n render(): React.Node {\n return null;\n }\n };\n} else {\n YellowBox = class extends React.Component {\n static ignoreWarnings(patterns: $ReadOnlyArray): void {\n // Do nothing.\n }\n\n static install(): void {\n // Do nothing.\n }\n\n static uninstall(): void {\n // Do nothing.\n }\n\n render(): React.Node {\n return null;\n }\n };\n}\n\n// $FlowFixMe[method-unbinding]\nmodule.exports = (YellowBox: Class> & {\n ignoreWarnings($ReadOnlyArray): void,\n install(): void,\n uninstall(): void,\n ...\n});\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict-local\n */\n\nimport type {ColorValue} from './StyleSheet';\nimport {DynamicColorIOSPrivate} from './PlatformColorValueTypes';\n\nexport type DynamicColorIOSTuple = {\n light: ColorValue,\n dark: ColorValue,\n highContrastLight?: ColorValue,\n highContrastDark?: ColorValue,\n};\n\nexport const DynamicColorIOS = (tuple: DynamicColorIOSTuple): ColorValue => {\n return DynamicColorIOSPrivate({\n light: tuple.light,\n dark: tuple.dark,\n highContrastLight: tuple.highContrastLight,\n highContrastDark: tuple.highContrastDark,\n });\n};\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow strict\n */\n\n'use strict';\n\nconst PropTypes = require('prop-types');\n\nconst PointPropType: React$PropType$Primitive<{\n x?: number,\n y?: number,\n ...\n}> = PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n});\n\nmodule.exports = PointPropType;\n","// TODO use State from RNModule\n\nexport const State = {\n UNDETERMINED: 0,\n FAILED: 1,\n BEGAN: 2,\n CANCELLED: 3,\n ACTIVE: 4,\n END: 5,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type State = typeof State[keyof typeof State];\n","export const EventType = {\n UNDETERMINED: 0,\n TOUCHES_DOWN: 1,\n TOUCHES_MOVE: 2,\n TOUCHES_UP: 3,\n TOUCHES_CANCELLED: 4,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type EventType = typeof EventType[keyof typeof EventType];\n","import { isJestEnv } from '../utils';\nimport { GestureType } from './gestures/gesture';\nimport { GestureEvent, HandlerStateChangeEvent } from './gestureHandlerCommon';\n\nexport const handlerIDToTag: Record = {};\nconst gestures = new Map();\nconst oldHandlers = new Map();\nconst testIDs = new Map();\n\nlet handlerTag = 1;\n\nexport function getNextHandlerTag(): number {\n return handlerTag++;\n}\n\nexport function registerHandler(\n handlerTag: number,\n handler: GestureType,\n testID?: string\n) {\n gestures.set(handlerTag, handler);\n if (isJestEnv() && testID) {\n testIDs.set(testID, handlerTag);\n }\n}\n\nexport function registerOldGestureHandler(\n handlerTag: number,\n handler: GestureHandlerCallbacks\n) {\n oldHandlers.set(handlerTag, handler);\n}\n\nexport function unregisterHandler(handlerTag: number, testID?: string) {\n gestures.delete(handlerTag);\n if (isJestEnv() && testID) {\n testIDs.delete(testID);\n }\n}\n\nexport function findHandler(handlerTag: number) {\n return gestures.get(handlerTag);\n}\n\nexport function findOldGestureHandler(handlerTag: number) {\n return oldHandlers.get(handlerTag);\n}\n\nexport function findHandlerByTestID(testID: string) {\n const handlerTag = testIDs.get(testID);\n if (handlerTag !== undefined) {\n return findHandler(handlerTag) ?? null;\n }\n return null;\n}\n\nexport interface GestureHandlerCallbacks {\n onGestureEvent: (event: GestureEvent) => void;\n onGestureStateChange: (event: HandlerStateChangeEvent) => void;\n}\n","export function toArray(object: T | T[]): T[] {\n if (!Array.isArray(object)) {\n return [object];\n }\n\n return object;\n}\n\nexport type withPrevAndCurrentMapFn = (\n previous: Transformed | null,\n current: T\n) => Transformed;\nexport function withPrevAndCurrent(\n array: T[],\n mapFn: withPrevAndCurrentMapFn\n): Transformed[] {\n const previousArr: (null | Transformed)[] = [null];\n const currentArr = [...array];\n const transformedArr: Transformed[] = [];\n currentArr.forEach((current, i) => {\n const previous = previousArr[i];\n const transformed = mapFn(previous, current);\n previousArr.push(transformed);\n transformedArr.push(transformed);\n });\n return transformedArr;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasProperty(object: object, key: string) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nexport function isJestEnv(): boolean {\n return hasProperty(global, 'process') && !!process.env.JEST_WORKER_ID;\n}\n\nexport function tagMessage(msg: string) {\n return `[react-native-gesture-handler] ${msg}`;\n}\n\nexport function isFabric(): boolean {\n // @ts-expect-error nativeFabricUIManager is not yet included in the RN types\n return !!global?.nativeFabricUIManager;\n}\n","import { NativeModules } from 'react-native';\nimport { ActionType } from './ActionType';\nimport { tagMessage } from './utils';\nconst { RNGestureHandlerModule } = NativeModules;\n\nif (RNGestureHandlerModule == null) {\n console.error(\n tagMessage(\n `react-native-gesture-handler module was not found. Make sure you're running your app on the native platform and your code is linked properly (cd ios && pod install && cd ..).\n\n For installation instructions, please refer to https://docs.swmansion.com/react-native-gesture-handler/docs/#installation`\n .split('\\n')\n .map((line) => line.trim())\n .join('\\n')\n )\n );\n}\n\nexport type RNGestureHandlerModuleProps = {\n handleSetJSResponder: (tag: number, blockNativeResponder: boolean) => void;\n handleClearJSResponder: () => void;\n createGestureHandler: (\n handlerName: string,\n handlerTag: number,\n config: Readonly>\n ) => void;\n attachGestureHandler: (\n handlerTag: number,\n newView: number,\n actionType: ActionType\n ) => void;\n updateGestureHandler: (\n handlerTag: number,\n newConfig: Readonly>\n ) => void;\n dropGestureHandler: (handlerTag: number) => void;\n install: () => void;\n};\n\nexport default RNGestureHandlerModule as RNGestureHandlerModuleProps;\n","export const Directions = {\n RIGHT: 1,\n LEFT: 2,\n UP: 4,\n DOWN: 8,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type Directions = typeof Directions[keyof typeof Directions];\n","import * as React from 'react';\nimport { StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport GestureHandlerRootView from './GestureHandlerRootView';\n\nexport default function gestureHandlerRootHOC

(\n Component: React.ComponentType

,\n containerStyles?: StyleProp\n): React.ComponentType

{\n function Wrapper(props: P) {\n return (\n \n \n \n );\n }\n\n Wrapper.displayName = `gestureHandlerRootHOC(${\n Component.displayName || Component.name\n })`;\n\n hoistNonReactStatics(Wrapper, Component);\n\n return Wrapper;\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.8.4\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});\nvar b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?Symbol.for(\"react.memo\"):\n60115,r=b?Symbol.for(\"react.lazy\"):60116;function t(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case h:return a;default:return u}}case r:case q:case d:return u}}}function v(a){return t(a)===m}exports.typeOf=t;exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;\nexports.Fragment=e;exports.Lazy=r;exports.Memo=q;exports.Portal=d;exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||\"object\"===typeof a&&null!==a&&(a.$$typeof===r||a.$$typeof===q||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n)};exports.isAsyncMode=function(a){return v(a)||t(a)===l};exports.isConcurrentMode=v;exports.isContextConsumer=function(a){return t(a)===k};\nexports.isContextProvider=function(a){return t(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return t(a)===n};exports.isFragment=function(a){return t(a)===e};exports.isLazy=function(a){return t(a)===r};exports.isMemo=function(a){return t(a)===q};exports.isPortal=function(a){return t(a)===d};exports.isProfiler=function(a){return t(a)===g};exports.isStrictMode=function(a){return t(a)===f};\nexports.isSuspense=function(a){return t(a)===p};\n","import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport { View, ViewProps } from 'react-native';\n\nexport interface GestureHandlerRootViewProps\n extends PropsWithChildren {}\n\nexport default function GestureHandlerRootView(\n props: GestureHandlerRootViewProps\n) {\n return ;\n}\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const tapGestureHandlerProps = [\n 'maxDurationMs',\n 'maxDelayMs',\n 'numberOfTaps',\n 'maxDeltaX',\n 'maxDeltaY',\n 'maxDist',\n 'minPointers',\n] as const;\n\nexport type TapGestureHandlerEventPayload = {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n};\nexport interface TapGestureConfig {\n /**\n * Minimum number of pointers (fingers) required to be placed before the\n * handler activates. Should be a positive integer.\n * The default value is 1.\n */\n minPointers?: number;\n\n /**\n * Maximum time, expressed in milliseconds, that defines how fast a finger\n * must be released after a touch. The default value is 500.\n */\n maxDurationMs?: number;\n\n /**\n * Maximum time, expressed in milliseconds, that can pass before the next tap\n * if many taps are required. The default value is 500.\n */\n maxDelayMs?: number;\n\n /**\n * Number of tap gestures required to activate the handler. The default value\n * is 1.\n */\n numberOfTaps?: number;\n\n /**\n * Maximum distance, expressed in points, that defines how far the finger is\n * allowed to travel along the X axis during a tap gesture. If the finger\n * travels further than the defined distance along the X axis and the handler\n * hasn't yet activated, it will fail to recognize the gesture.\n */\n maxDeltaX?: number;\n\n /**\n * Maximum distance, expressed in points, that defines how far the finger is\n * allowed to travel along the Y axis during a tap gesture. If the finger\n * travels further than the defined distance along the Y axis and the handler\n * hasn't yet activated, it will fail to recognize the gesture.\n */\n maxDeltaY?: number;\n\n /**\n * Maximum distance, expressed in points, that defines how far the finger is\n * allowed to travel during a tap gesture. If the finger travels further than\n * the defined distance and the handler hasn't yet\n * activated, it will fail to recognize the gesture.\n */\n maxDist?: number;\n}\n\nexport interface TapGestureHandlerProps\n extends BaseGestureHandlerProps,\n TapGestureConfig {}\n\nexport const tapHandlerName = 'TapGestureHandler';\n\nexport type TapGestureHandler = typeof TapGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const TapGestureHandler = createHandler<\n TapGestureHandlerProps,\n TapGestureHandlerEventPayload\n>({\n name: tapHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...tapGestureHandlerProps,\n ] as const,\n config: {},\n});\n","import * as React from 'react';\nimport {\n Platform,\n Touchable,\n UIManager,\n DeviceEventEmitter,\n EmitterSubscription,\n} from 'react-native';\n// @ts-ignore - it isn't typed by TS & don't have definitelyTyped types\nimport deepEqual from 'lodash/isEqual';\nimport RNGestureHandlerModule from '../RNGestureHandlerModule';\nimport type RNGestureHandlerModuleWeb from '../RNGestureHandlerModule.web';\nimport { State } from '../State';\nimport {\n handlerIDToTag,\n getNextHandlerTag,\n registerOldGestureHandler,\n} from './handlersRegistry';\n\nimport {\n BaseGestureHandlerProps,\n filterConfig,\n GestureEvent,\n HandlerStateChangeEvent,\n findNodeHandle,\n} from './gestureHandlerCommon';\nimport { ValueOf } from '../typeUtils';\nimport { isFabric, isJestEnv, tagMessage } from '../utils';\nimport { ActionType } from '../ActionType';\n\nconst UIManagerAny = UIManager as any;\n\nconst customGHEventsConfigFabricAndroid = {\n topOnGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },\n topOnGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n};\n\nconst customGHEventsConfig = {\n onGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },\n onGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n\n // When using React Native Gesture Handler for Animated.event with useNativeDriver: true\n // on Android with Fabric enabled, the native part still sends the native events to JS\n // but prefixed with \"top\". We cannot simply rename the events above so they are prefixed\n // with \"top\" instead of \"on\" because in such case Animated.events would not be registered.\n // That's why we need to register another pair of event names.\n // The incoming events will be queued but never handled.\n // Without this piece of code below, you'll get the following JS error:\n // Unsupported top level event type \"topOnGestureHandlerEvent\" dispatched\n ...(isFabric() &&\n Platform.OS === 'android' &&\n customGHEventsConfigFabricAndroid),\n};\n\n// Add gesture specific events to genericDirectEventTypes object exported from UIManager\n// native module.\n// Once new event types are registered with react it is possible to dispatch these\n// events to all kind of native views.\nUIManagerAny.genericDirectEventTypes = {\n ...UIManagerAny.genericDirectEventTypes,\n ...customGHEventsConfig,\n};\n// In newer versions of RN the `genericDirectEventTypes` is located in the object\n// returned by UIManager.getViewManagerConfig('getConstants') or in older RN UIManager.getConstants(), we need to add it there as well to make\n// it compatible with RN 61+\nconst UIManagerConstants =\n UIManagerAny.getViewManagerConfig?.('getConstants') ??\n UIManagerAny.getConstants?.();\n\nif (UIManagerConstants) {\n UIManagerConstants.genericDirectEventTypes = {\n ...UIManagerConstants.genericDirectEventTypes,\n ...customGHEventsConfig,\n };\n}\n\n// Wrap JS responder calls and notify gesture handler manager\nconst {\n setJSResponder: oldSetJSResponder = () => {\n //no operation\n },\n clearJSResponder: oldClearJSResponder = () => {\n //no operation\n },\n} = UIManagerAny;\nUIManagerAny.setJSResponder = (tag: number, blockNativeResponder: boolean) => {\n RNGestureHandlerModule.handleSetJSResponder(tag, blockNativeResponder);\n oldSetJSResponder(tag, blockNativeResponder);\n};\nUIManagerAny.clearJSResponder = () => {\n RNGestureHandlerModule.handleClearJSResponder();\n oldClearJSResponder();\n};\n\nlet allowTouches = true;\nconst DEV_ON_ANDROID = __DEV__ && Platform.OS === 'android';\n// Toggled inspector blocks touch events in order to allow inspecting on Android\n// This needs to be a global variable in order to set initial state for `allowTouches` property in Handler component\nif (DEV_ON_ANDROID) {\n DeviceEventEmitter.addListener('toggleElementInspector', () => {\n allowTouches = !allowTouches;\n });\n}\n\ntype HandlerProps> = Readonly<\n React.PropsWithChildren>\n>;\nfunction hasUnresolvedRefs>(\n props: HandlerProps\n) {\n // TODO(TS) - add type for extract arg\n const extract = (refs: any | any[]) => {\n if (!Array.isArray(refs)) {\n return refs && refs.current === null;\n }\n return refs.some((r) => r && r.current === null);\n };\n return extract(props['simultaneousHandlers']) || extract(props['waitFor']);\n}\n\nconst stateToPropMappings = {\n [State.UNDETERMINED]: undefined,\n [State.BEGAN]: 'onBegan',\n [State.FAILED]: 'onFailed',\n [State.CANCELLED]: 'onCancelled',\n [State.ACTIVE]: 'onActivated',\n [State.END]: 'onEnded',\n} as const;\n\ntype CreateHandlerArgs<\n HandlerPropsT extends Record\n> = Readonly<{\n name: string;\n allowedProps: Readonly[]>;\n config: Readonly>;\n transformProps?: (props: HandlerPropsT) => HandlerPropsT;\n customNativeProps?: Readonly;\n}>;\n\n// TODO(TS) fix event types\ntype InternalEventHandlers = {\n onGestureHandlerEvent?: (event: any) => void;\n onGestureHandlerStateChange?: (event: any) => void;\n};\n\nlet showedRngh2Notice = false;\nfunction showRngh2NoticeIfNeeded() {\n if (!showedRngh2Notice) {\n console.warn(\n tagMessage(\n \"Seems like you're using an old API with gesture components, check out new Gestures system!\"\n )\n );\n showedRngh2Notice = true;\n }\n}\n\n// TODO(TS) - make sure that BaseGestureHandlerProps doesn't need other generic parameter to work with custom properties.\nexport default function createHandler<\n T extends BaseGestureHandlerProps,\n U extends Record\n>({\n name,\n allowedProps = [],\n config = {},\n transformProps,\n customNativeProps = [],\n}: CreateHandlerArgs): React.ComponentType> {\n interface HandlerState {\n allowTouches: boolean;\n }\n class Handler extends React.Component<\n T & InternalEventHandlers,\n HandlerState\n > {\n static displayName = name;\n\n private handlerTag: number;\n private config: Record;\n private propsRef: React.MutableRefObject;\n private viewNode: any;\n private viewTag?: number;\n private updateEnqueued: ReturnType | null = null;\n private inspectorToggleListener?: EmitterSubscription;\n\n constructor(props: T & InternalEventHandlers) {\n super(props);\n this.handlerTag = getNextHandlerTag();\n this.config = {};\n this.propsRef = React.createRef();\n this.state = { allowTouches };\n if (props.id) {\n if (handlerIDToTag[props.id] !== undefined) {\n throw new Error(`Handler with ID \"${props.id}\" already registered`);\n }\n handlerIDToTag[props.id] = this.handlerTag;\n }\n if (__DEV__ && !isJestEnv()) {\n showRngh2NoticeIfNeeded();\n }\n }\n\n componentDidMount() {\n const props: HandlerProps = this.props;\n\n if (DEV_ON_ANDROID) {\n this.inspectorToggleListener = DeviceEventEmitter.addListener(\n 'toggleElementInspector',\n () => {\n this.setState((_) => ({ allowTouches }));\n this.update();\n }\n );\n }\n if (hasUnresolvedRefs(props)) {\n // If there are unresolved refs (e.g. \".current\" has not yet been set)\n // passed as `simultaneousHandlers` or `waitFor`, we enqueue a call to\n // _update method that will try to update native handler props using\n // setImmediate. This makes it so update() function gets called after all\n // react components are mounted and we expect the missing ref object to\n // be resolved by then.\n this.updateEnqueued = setImmediate(() => {\n this.updateEnqueued = null;\n this.update();\n });\n }\n\n this.createGestureHandler(\n filterConfig(\n transformProps ? transformProps(this.props) : this.props,\n [...allowedProps, ...customNativeProps],\n config\n )\n );\n\n this.attachGestureHandler(findNodeHandle(this.viewNode) as number); // TODO(TS) - check if this can be null\n }\n\n componentDidUpdate() {\n const viewTag = findNodeHandle(this.viewNode);\n if (this.viewTag !== viewTag) {\n this.attachGestureHandler(viewTag as number); // TODO(TS) - check interaction between _viewTag & findNodeHandle\n }\n this.update();\n }\n\n componentWillUnmount() {\n this.inspectorToggleListener?.remove();\n RNGestureHandlerModule.dropGestureHandler(this.handlerTag);\n if (this.updateEnqueued) {\n clearImmediate(this.updateEnqueued);\n }\n // We can't use this.props.id directly due to TS generic type narrowing bug, see https://github.com/microsoft/TypeScript/issues/13995 for more context\n const handlerID: string | undefined = this.props.id;\n if (handlerID) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete handlerIDToTag[handlerID];\n }\n }\n\n private onGestureHandlerEvent = (event: GestureEvent) => {\n if (event.nativeEvent.handlerTag === this.handlerTag) {\n if (typeof this.props.onGestureEvent === 'function') {\n this.props.onGestureEvent?.(event);\n }\n } else {\n this.props.onGestureHandlerEvent?.(event);\n }\n };\n\n // TODO(TS) - make sure this is right type for event\n private onGestureHandlerStateChange = (\n event: HandlerStateChangeEvent\n ) => {\n if (event.nativeEvent.handlerTag === this.handlerTag) {\n if (typeof this.props.onHandlerStateChange === 'function') {\n this.props.onHandlerStateChange?.(event);\n }\n\n const state: ValueOf = event.nativeEvent.state;\n const stateEventName = stateToPropMappings[state];\n const eventHandler = stateEventName && this.props[stateEventName];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler(event);\n }\n } else {\n this.props.onGestureHandlerStateChange?.(event);\n }\n };\n\n private refHandler = (node: any) => {\n this.viewNode = node;\n\n const child = React.Children.only(this.props.children);\n // TODO(TS) fix ref type\n const { ref }: any = child;\n if (ref !== null) {\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n }\n };\n\n private createGestureHandler = (\n newConfig: Readonly>\n ) => {\n this.config = newConfig;\n\n RNGestureHandlerModule.createGestureHandler(\n name,\n this.handlerTag,\n newConfig\n );\n };\n\n private attachGestureHandler = (newViewTag: number) => {\n this.viewTag = newViewTag;\n\n if (Platform.OS === 'web') {\n // typecast due to dynamic resolution, attachGestureHandler should have web version signature in this branch\n (RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler)(\n this.handlerTag,\n newViewTag,\n ActionType.JS_FUNCTION_OLD_API, // ignored on web\n this.propsRef\n );\n } else {\n registerOldGestureHandler(this.handlerTag, {\n onGestureEvent: this.onGestureHandlerEvent,\n onGestureStateChange: this.onGestureHandlerStateChange,\n });\n\n const actionType = (() => {\n if (\n this.props?.onGestureEvent &&\n 'current' in this.props.onGestureEvent\n ) {\n // Reanimated worklet\n return ActionType.REANIMATED_WORKLET;\n } else if (\n this.props?.onGestureEvent &&\n '__isNative' in this.props.onGestureEvent\n ) {\n // Animated.event with useNativeDriver: true\n return ActionType.NATIVE_ANIMATED_EVENT;\n } else {\n // JS callback or Animated.event with useNativeDriver: false\n return ActionType.JS_FUNCTION_OLD_API;\n }\n })();\n\n RNGestureHandlerModule.attachGestureHandler(\n this.handlerTag,\n newViewTag,\n actionType\n );\n }\n };\n\n private updateGestureHandler = (\n newConfig: Readonly>\n ) => {\n this.config = newConfig;\n\n RNGestureHandlerModule.updateGestureHandler(this.handlerTag, newConfig);\n };\n\n private update() {\n const newConfig = filterConfig(\n transformProps ? transformProps(this.props) : this.props,\n [...allowedProps, ...customNativeProps],\n config\n );\n if (!deepEqual(this.config, newConfig)) {\n this.updateGestureHandler(newConfig);\n }\n }\n\n setNativeProps(updates: any) {\n const mergedProps = { ...this.props, ...updates };\n const newConfig = filterConfig(\n transformProps ? transformProps(mergedProps) : mergedProps,\n [...allowedProps, ...customNativeProps],\n config\n );\n this.updateGestureHandler(newConfig);\n }\n\n render() {\n let gestureEventHandler = this.onGestureHandlerEvent;\n // Another instance of https://github.com/microsoft/TypeScript/issues/13995\n type OnGestureEventHandlers = {\n onGestureEvent?: BaseGestureHandlerProps['onGestureEvent'];\n onGestureHandlerEvent?: InternalEventHandlers['onGestureHandlerEvent'];\n };\n const {\n onGestureEvent,\n onGestureHandlerEvent,\n }: OnGestureEventHandlers = this.props;\n if (onGestureEvent && typeof onGestureEvent !== 'function') {\n // If it's not a method it should be an native Animated.event\n // object. We set it directly as the handler for the view\n // In this case nested handlers are not going to be supported\n if (onGestureHandlerEvent) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n gestureEventHandler = onGestureEvent;\n } else {\n if (\n onGestureHandlerEvent &&\n typeof onGestureHandlerEvent !== 'function'\n ) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n }\n\n let gestureStateEventHandler = this.onGestureHandlerStateChange;\n // Another instance of https://github.com/microsoft/TypeScript/issues/13995\n type OnGestureStateChangeHandlers = {\n onHandlerStateChange?: BaseGestureHandlerProps['onHandlerStateChange'];\n onGestureHandlerStateChange?: InternalEventHandlers['onGestureHandlerStateChange'];\n };\n const {\n onHandlerStateChange,\n onGestureHandlerStateChange,\n }: OnGestureStateChangeHandlers = this.props;\n if (onHandlerStateChange && typeof onHandlerStateChange !== 'function') {\n // If it's not a method it should be an native Animated.event\n // object. We set it directly as the handler for the view\n // In this case nested handlers are not going to be supported\n if (onGestureHandlerStateChange) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n gestureStateEventHandler = onHandlerStateChange;\n } else {\n if (\n onGestureHandlerStateChange &&\n typeof onGestureHandlerStateChange !== 'function'\n ) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n }\n const events = {\n onGestureHandlerEvent: this.state.allowTouches\n ? gestureEventHandler\n : undefined,\n onGestureHandlerStateChange: this.state.allowTouches\n ? gestureStateEventHandler\n : undefined,\n };\n\n this.propsRef.current = events;\n\n const child: any = React.Children.only(this.props.children);\n let grandChildren = child.props.children;\n if (\n Touchable.TOUCH_TARGET_DEBUG &&\n child.type &&\n (child.type === 'RNGestureHandlerButton' ||\n child.type.name === 'View' ||\n child.type.displayName === 'View')\n ) {\n grandChildren = React.Children.toArray(grandChildren);\n grandChildren.push(\n Touchable.renderDebugView({\n color: 'mediumspringgreen',\n hitSlop: child.props.hitSlop,\n })\n );\n }\n\n return React.cloneElement(\n child,\n {\n ref: this.refHandler,\n collapsable: false,\n ...(isJestEnv()\n ? {\n handlerType: name,\n handlerTag: this.handlerTag,\n }\n : {}),\n testID: this.props.testID ?? child.props.testID,\n ...events,\n },\n grandChildren\n );\n }\n }\n return Handler;\n}\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","// Previous types exported gesture handlers as classes which creates an interface and variable, both named the same as class.\n// Without those types, we'd introduce breaking change, forcing users to prefix every handler type specification with typeof\n// e.g. React.createRef -> React.createRef.\n// See https://www.typescriptlang.org/docs/handbook/classes.html#constructor-functions for reference.\nimport * as React from 'react';\nimport { Platform, findNodeHandle as findNodeHandleRN } from 'react-native';\n\nimport { State } from '../State';\nimport { EventType } from '../EventType';\nimport { ValueOf } from '../typeUtils';\nimport { handlerIDToTag } from './handlersRegistry';\nimport { toArray } from '../utils';\n\nconst commonProps = [\n 'id',\n 'enabled',\n 'shouldCancelWhenOutside',\n 'hitSlop',\n] as const;\n\nconst componentInteractionProps = ['waitFor', 'simultaneousHandlers'] as const;\n\nexport const baseGestureHandlerProps = [\n ...commonProps,\n ...componentInteractionProps,\n 'onBegan',\n 'onFailed',\n 'onCancelled',\n 'onActivated',\n 'onEnded',\n 'onGestureEvent',\n 'onHandlerStateChange',\n] as const;\n\nexport const baseGestureHandlerWithMonitorProps = [\n ...commonProps,\n 'needsPointerData',\n 'manualActivation',\n];\n\nexport interface GestureEventPayload {\n handlerTag: number;\n numberOfPointers: number;\n state: ValueOf;\n}\nexport interface HandlerStateChangeEventPayload extends GestureEventPayload {\n oldState: ValueOf;\n}\n\nexport type HitSlop =\n | number\n | Partial<\n Record<\n 'left' | 'right' | 'top' | 'bottom' | 'vertical' | 'horizontal',\n number\n >\n >\n | Record<'width' | 'left', number>\n | Record<'width' | 'right', number>\n | Record<'height' | 'top', number>\n | Record<'height' | 'bottom', number>;\n\n//TODO(TS) events in handlers\n\nexport interface GestureEvent> {\n nativeEvent: Readonly;\n}\nexport interface HandlerStateChangeEvent<\n ExtraEventPayloadT = Record\n> {\n nativeEvent: Readonly;\n}\n\nexport type TouchData = {\n id: number;\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n};\n\nexport type GestureTouchEvent = {\n handlerTag: number;\n numberOfTouches: number;\n state: ValueOf;\n eventType: EventType;\n allTouches: TouchData[];\n changedTouches: TouchData[];\n};\n\nexport type GestureUpdateEvent<\n GestureEventPayloadT = Record\n> = GestureEventPayload & GestureEventPayloadT;\n\nexport type GestureStateChangeEvent<\n GestureStateChangeEventPayloadT = Record\n> = HandlerStateChangeEventPayload & GestureStateChangeEventPayloadT;\n\nexport type CommonGestureConfig = {\n enabled?: boolean;\n shouldCancelWhenOutside?: boolean;\n hitSlop?: HitSlop;\n};\n\n// Events payloads are types instead of interfaces due to TS limitation.\n// See https://github.com/microsoft/TypeScript/issues/15300 for more info.\nexport type BaseGestureHandlerProps<\n ExtraEventPayloadT extends Record = Record\n> = CommonGestureConfig & {\n id?: string;\n waitFor?: React.Ref | React.Ref[];\n simultaneousHandlers?: React.Ref | React.Ref[];\n testID?: string;\n // TODO(TS) - fix event types\n onBegan?: (event: HandlerStateChangeEvent) => void;\n onFailed?: (event: HandlerStateChangeEvent) => void;\n onCancelled?: (event: HandlerStateChangeEvent) => void;\n onActivated?: (event: HandlerStateChangeEvent) => void;\n onEnded?: (event: HandlerStateChangeEvent) => void;\n\n //TODO(TS) consider using NativeSyntheticEvent\n onGestureEvent?: (event: GestureEvent) => void;\n onHandlerStateChange?: (\n event: HandlerStateChangeEvent\n ) => void;\n};\n\nfunction isConfigParam(param: unknown, name: string) {\n // param !== Object(param) returns false if `param` is a function\n // or an object and returns true if `param` is null\n return (\n param !== undefined &&\n (param !== Object(param) ||\n !('__isNative' in (param as Record))) &&\n name !== 'onHandlerStateChange' &&\n name !== 'onGestureEvent'\n );\n}\n\nexport function filterConfig(\n props: Record,\n validProps: string[],\n defaults: Record = {}\n) {\n const filteredConfig = { ...defaults };\n for (const key of validProps) {\n let value = props[key];\n if (isConfigParam(value, key)) {\n if (key === 'simultaneousHandlers' || key === 'waitFor') {\n value = transformIntoHandlerTags(props[key]);\n } else if (key === 'hitSlop' && typeof value !== 'object') {\n value = { top: value, left: value, bottom: value, right: value };\n }\n filteredConfig[key] = value;\n }\n }\n return filteredConfig;\n}\n\nfunction transformIntoHandlerTags(handlerIDs: any) {\n handlerIDs = toArray(handlerIDs);\n\n if (Platform.OS === 'web') {\n return handlerIDs\n .map(({ current }: { current: any }) => current)\n .filter((handle: any) => handle);\n }\n // converts handler string IDs into their numeric tags\n return handlerIDs\n .map(\n (handlerID: any) =>\n handlerIDToTag[handlerID] || handlerID.current?.handlerTag || -1\n )\n .filter((handlerTag: number) => handlerTag > 0);\n}\n\nexport function findNodeHandle(\n node: null | number | React.Component | React.ComponentClass\n): null | number | React.Component | React.ComponentClass {\n if (Platform.OS === 'web') return node;\n return findNodeHandleRN(node);\n}\n","export const ActionType = {\n REANIMATED_WORKLET: 1,\n NATIVE_ANIMATED_EVENT: 2,\n JS_FUNCTION_OLD_API: 3,\n JS_FUNCTION_NEW_API: 4,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type ActionType = typeof ActionType[keyof typeof ActionType];\n","import React from 'react';\nimport { tagMessage } from '../utils';\nimport PlatformConstants from '../PlatformConstants';\nimport createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const forceTouchGestureHandlerProps = [\n 'minForce',\n 'maxForce',\n 'feedbackOnActivation',\n] as const;\n\nclass ForceTouchFallback extends React.Component {\n static forceTouchAvailable = false;\n componentDidMount() {\n console.warn(\n tagMessage(\n 'ForceTouchGestureHandler is not available on this platform. Please use ForceTouchGestureHandler.forceTouchAvailable to conditionally render other components that would provide a fallback behavior specific to your usecase'\n )\n );\n }\n render() {\n return this.props.children;\n }\n}\n\nexport type ForceTouchGestureHandlerEventPayload = {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n\n /**\n * The pressure of a touch.\n */\n force: number;\n};\n\nexport interface ForceTouchGestureConfig {\n /**\n *\n * A minimal pressure that is required before handler can activate. Should be a\n * value from range `[0.0, 1.0]`. Default is `0.2`.\n */\n minForce?: number;\n\n /**\n * A maximal pressure that could be applied for handler. If the pressure is\n * greater, handler fails. Should be a value from range `[0.0, 1.0]`.\n */\n maxForce?: number;\n\n /**\n * Boolean value defining if haptic feedback has to be performed on\n * activation.\n */\n feedbackOnActivation?: boolean;\n}\n\nexport interface ForceTouchGestureHandlerProps\n extends BaseGestureHandlerProps,\n ForceTouchGestureConfig {}\n\nexport type ForceTouchGestureHandler = typeof ForceTouchGestureHandler & {\n forceTouchAvailable: boolean;\n};\n\nexport const forceTouchHandlerName = 'ForceTouchGestureHandler';\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const ForceTouchGestureHandler = PlatformConstants?.forceTouchAvailable\n ? createHandler<\n ForceTouchGestureHandlerProps,\n ForceTouchGestureHandlerEventPayload\n >({\n name: forceTouchHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ] as const,\n config: {},\n })\n : ForceTouchFallback;\n\n(ForceTouchGestureHandler as ForceTouchGestureHandler).forceTouchAvailable =\n PlatformConstants?.forceTouchAvailable || false;\n","import { NativeModules, Platform } from 'react-native';\n\ntype PlatformConstants = {\n forceTouchAvailable: boolean;\n};\n\nexport default (NativeModules?.PlatformConstants ??\n Platform.constants) as PlatformConstants;\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const longPressGestureHandlerProps = [\n 'minDurationMs',\n 'maxDist',\n] as const;\n\nexport type LongPressGestureHandlerEventPayload = {\n /**\n * X coordinate, expressed in points, of the current position of the pointer\n * (finger or a leading pointer when there are multiple fingers placed)\n * relative to the view attached to the handler.\n */\n x: number;\n\n /**\n * Y coordinate, expressed in points, of the current position of the pointer\n * (finger or a leading pointer when there are multiple fingers placed)\n * relative to the view attached to the handler.\n */\n y: number;\n\n /**\n * X coordinate, expressed in points, of the current position of the pointer\n * (finger or a leading pointer when there are multiple fingers placed)\n * relative to the window. It is recommended to use `absoluteX` instead of\n * `x` in cases when the view attached to the handler can be transformed as an\n * effect of the gesture.\n */\n absoluteX: number;\n\n /**\n * Y coordinate, expressed in points, of the current position of the pointer\n * (finger or a leading pointer when there are multiple fingers placed)\n * relative to the window. It is recommended to use `absoluteY` instead of\n * `y` in cases when the view attached to the handler can be transformed as an\n * effect of the gesture.\n */\n absoluteY: number;\n\n /**\n * Duration of the long press (time since the start of the event), expressed\n * in milliseconds.\n */\n duration: number;\n};\n\nexport interface LongPressGestureConfig {\n /**\n * Minimum time, expressed in milliseconds, that a finger must remain pressed on\n * the corresponding view. The default value is 500.\n */\n minDurationMs?: number;\n\n /**\n * Maximum distance, expressed in points, that defines how far the finger is\n * allowed to travel during a long press gesture. If the finger travels\n * further than the defined distance and the handler hasn't yet activated, it\n * will fail to recognize the gesture. The default value is 10.\n */\n maxDist?: number;\n}\n\nexport interface LongPressGestureHandlerProps\n extends BaseGestureHandlerProps,\n LongPressGestureConfig {}\n\nexport const longPressHandlerName = 'LongPressGestureHandler';\n\nexport type LongPressGestureHandler = typeof LongPressGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const LongPressGestureHandler = createHandler<\n LongPressGestureHandlerProps,\n LongPressGestureHandlerEventPayload\n>({\n name: longPressHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...longPressGestureHandlerProps,\n ] as const,\n config: {},\n});\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const panGestureHandlerProps = [\n 'activeOffsetY',\n 'activeOffsetX',\n 'failOffsetY',\n 'failOffsetX',\n 'minDist',\n 'minVelocity',\n 'minVelocityX',\n 'minVelocityY',\n 'minPointers',\n 'maxPointers',\n 'avgTouches',\n 'enableTrackpadTwoFingerGesture',\n] as const;\n\nexport const panGestureHandlerCustomNativeProps = [\n 'activeOffsetYStart',\n 'activeOffsetYEnd',\n 'activeOffsetXStart',\n 'activeOffsetXEnd',\n 'failOffsetYStart',\n 'failOffsetYEnd',\n 'failOffsetXStart',\n 'failOffsetXEnd',\n] as const;\n\nexport type PanGestureHandlerEventPayload = {\n /**\n * X coordinate of the current position of the pointer (finger or a leading\n * pointer when there are multiple fingers placed) relative to the view\n * attached to the handler. Expressed in point units.\n */\n x: number;\n\n /**\n * Y coordinate of the current position of the pointer (finger or a leading\n * pointer when there are multiple fingers placed) relative to the view\n * attached to the handler. Expressed in point units.\n */\n y: number;\n\n /**\n * X coordinate of the current position of the pointer (finger or a leading\n * pointer when there are multiple fingers placed) relative to the window.\n * The value is expressed in point units. It is recommended to use it instead\n * of `x` in cases when the original view can be transformed as an effect of\n * the gesture.\n */\n absoluteX: number;\n\n /**\n * Y coordinate of the current position of the pointer (finger or a leading\n * pointer when there are multiple fingers placed) relative to the window.\n * The value is expressed in point units. It is recommended to use it instead\n * of `y` in cases when the original view can be transformed as an\n * effect of the gesture.\n */\n absoluteY: number;\n\n /**\n * Translation of the pan gesture along X axis accumulated over the time of\n * the gesture. The value is expressed in the point units.\n */\n translationX: number;\n\n /**\n * Translation of the pan gesture along Y axis accumulated over the time of\n * the gesture. The value is expressed in the point units.\n */\n translationY: number;\n\n /**\n * Velocity of the pan gesture along the X axis in the current moment. The\n * value is expressed in point units per second.\n */\n velocityX: number;\n\n /**\n * Velocity of the pan gesture along the Y axis in the current moment. The\n * value is expressed in point units per second.\n */\n velocityY: number;\n};\n\ninterface CommonPanProperties {\n /**\n * Minimum distance the finger (or multiple finger) need to travel before the\n * handler activates. Expressed in points.\n */\n minDist?: number;\n\n /**\n * Android only.\n */\n avgTouches?: boolean;\n\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * enableTrackpadTwoFingerGesture swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n /**\n * A number of fingers that is required to be placed before handler can\n * activate. Should be a higher or equal to 0 integer.\n */\n minPointers?: number;\n\n /**\n * When the given number of fingers is placed on the screen and handler hasn't\n * yet activated it will fail recognizing the gesture. Should be a higher or\n * equal to 0 integer.\n */\n maxPointers?: number;\n\n minVelocity?: number;\n minVelocityX?: number;\n minVelocityY?: number;\n}\n\nexport interface PanGestureConfig extends CommonPanProperties {\n activeOffsetYStart?: number;\n activeOffsetYEnd?: number;\n activeOffsetXStart?: number;\n activeOffsetXEnd?: number;\n failOffsetYStart?: number;\n failOffsetYEnd?: number;\n failOffsetXStart?: number;\n failOffsetXEnd?: number;\n}\n\nexport interface PanGestureHandlerProps\n extends BaseGestureHandlerProps,\n CommonPanProperties {\n /**\n * Range along X axis (in points) where fingers travels without activation of\n * handler. Moving outside of this range implies activation of handler. Range\n * can be given as an array or a single number. If range is set as an array,\n * first value must be lower or equal to 0, a the second one higher or equal\n * to 0. If only one number `p` is given a range of `(-inf, p)` will be used\n * if `p` is higher or equal to 0 and `(-p, inf)` otherwise.\n */\n activeOffsetY?: number | number[];\n\n /**\n * Range along X axis (in points) where fingers travels without activation of\n * handler. Moving outside of this range implies activation of handler. Range\n * can be given as an array or a single number. If range is set as an array,\n * first value must be lower or equal to 0, a the second one higher or equal\n * to 0. If only one number `p` is given a range of `(-inf, p)` will be used\n * if `p` is higher or equal to 0 and `(-p, inf)` otherwise.\n */\n activeOffsetX?: number | number[];\n\n /**\n * When the finger moves outside this range (in points) along Y axis and\n * handler hasn't yet activated it will fail recognizing the gesture. Range\n * can be given as an array or a single number. If range is set as an array,\n * first value must be lower or equal to 0, a the second one higher or equal\n * to 0. If only one number `p` is given a range of `(-inf, p)` will be used\n * if `p` is higher or equal to 0 and `(-p, inf)` otherwise.\n */\n failOffsetY?: number | number[];\n\n /**\n * When the finger moves outside this range (in points) along X axis and\n * handler hasn't yet activated it will fail recognizing the gesture. Range\n * can be given as an array or a single number. If range is set as an array,\n * first value must be lower or equal to 0, a the second one higher or equal\n * to 0. If only one number `p` is given a range of `(-inf, p)` will be used\n * if `p` is higher or equal to 0 and `(-p, inf)` otherwise.\n */\n failOffsetX?: number | number[];\n}\n\nexport const panHandlerName = 'PanGestureHandler';\n\nexport type PanGestureHandler = typeof PanGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const PanGestureHandler = createHandler<\n PanGestureHandlerProps,\n PanGestureHandlerEventPayload\n>({\n name: panHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...panGestureHandlerProps,\n ] as const,\n config: {},\n transformProps: managePanProps,\n customNativeProps: panGestureHandlerCustomNativeProps,\n});\n\nfunction validatePanGestureHandlerProps(props: PanGestureHandlerProps) {\n if (\n Array.isArray(props.activeOffsetX) &&\n (props.activeOffsetX[0] > 0 || props.activeOffsetX[1] < 0)\n ) {\n throw new Error(\n `First element of activeOffsetX should be negative, a the second one should be positive`\n );\n }\n\n if (\n Array.isArray(props.activeOffsetY) &&\n (props.activeOffsetY[0] > 0 || props.activeOffsetY[1] < 0)\n ) {\n throw new Error(\n `First element of activeOffsetY should be negative, a the second one should be positive`\n );\n }\n\n if (\n Array.isArray(props.failOffsetX) &&\n (props.failOffsetX[0] > 0 || props.failOffsetX[1] < 0)\n ) {\n throw new Error(\n `First element of failOffsetX should be negative, a the second one should be positive`\n );\n }\n\n if (\n Array.isArray(props.failOffsetY) &&\n (props.failOffsetY[0] > 0 || props.failOffsetY[1] < 0)\n ) {\n throw new Error(\n `First element of failOffsetY should be negative, a the second one should be positive`\n );\n }\n\n if (props.minDist && (props.failOffsetX || props.failOffsetY)) {\n throw new Error(\n `It is not supported to use minDist with failOffsetX or failOffsetY, use activeOffsetX and activeOffsetY instead`\n );\n }\n\n if (props.minDist && (props.activeOffsetX || props.activeOffsetY)) {\n throw new Error(\n `It is not supported to use minDist with activeOffsetX or activeOffsetY`\n );\n }\n}\n\nfunction transformPanGestureHandlerProps(props: PanGestureHandlerProps) {\n type InternalPanGHKeys =\n | 'activeOffsetXStart'\n | 'activeOffsetXEnd'\n | 'failOffsetXStart'\n | 'failOffsetXEnd'\n | 'activeOffsetYStart'\n | 'activeOffsetYEnd'\n | 'failOffsetYStart'\n | 'failOffsetYEnd';\n type PanGestureHandlerInternalProps = PanGestureHandlerProps &\n Partial>;\n\n const res: PanGestureHandlerInternalProps = { ...props };\n\n if (props.activeOffsetX !== undefined) {\n delete res.activeOffsetX;\n if (Array.isArray(props.activeOffsetX)) {\n res.activeOffsetXStart = props.activeOffsetX[0];\n res.activeOffsetXEnd = props.activeOffsetX[1];\n } else if (props.activeOffsetX < 0) {\n res.activeOffsetXStart = props.activeOffsetX;\n } else {\n res.activeOffsetXEnd = props.activeOffsetX;\n }\n }\n\n if (props.activeOffsetY !== undefined) {\n delete res.activeOffsetY;\n if (Array.isArray(props.activeOffsetY)) {\n res.activeOffsetYStart = props.activeOffsetY[0];\n res.activeOffsetYEnd = props.activeOffsetY[1];\n } else if (props.activeOffsetY < 0) {\n res.activeOffsetYStart = props.activeOffsetY;\n } else {\n res.activeOffsetYEnd = props.activeOffsetY;\n }\n }\n\n if (props.failOffsetX !== undefined) {\n delete res.failOffsetX;\n if (Array.isArray(props.failOffsetX)) {\n res.failOffsetXStart = props.failOffsetX[0];\n res.failOffsetXEnd = props.failOffsetX[1];\n } else if (props.failOffsetX < 0) {\n res.failOffsetXStart = props.failOffsetX;\n } else {\n res.failOffsetXEnd = props.failOffsetX;\n }\n }\n\n if (props.failOffsetY !== undefined) {\n delete res.failOffsetY;\n if (Array.isArray(props.failOffsetY)) {\n res.failOffsetYStart = props.failOffsetY[0];\n res.failOffsetYEnd = props.failOffsetY[1];\n } else if (props.failOffsetY < 0) {\n res.failOffsetYStart = props.failOffsetY;\n } else {\n res.failOffsetYEnd = props.failOffsetY;\n }\n }\n\n return res;\n}\n\nexport function managePanProps(props: PanGestureHandlerProps) {\n if (__DEV__) {\n validatePanGestureHandlerProps(props);\n }\n return transformPanGestureHandlerProps(props);\n}\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport type PinchGestureHandlerEventPayload = {\n /**\n * The scale factor relative to the points of the two touches in screen\n * coordinates.\n */\n scale: number;\n\n /**\n * Position expressed in points along X axis of center anchor point of\n * gesture.\n */\n focalX: number;\n\n /**\n * Position expressed in points along Y axis of center anchor point of\n * gesture.\n */\n focalY: number;\n\n /**\n *\n * Velocity of the pan gesture the current moment. The value is expressed in\n * point units per second.\n */\n velocity: number;\n};\n\nexport interface PinchGestureHandlerProps\n extends BaseGestureHandlerProps {}\n\nexport const pinchHandlerName = 'PinchGestureHandler';\n\nexport type PinchGestureHandler = typeof PinchGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const PinchGestureHandler = createHandler<\n PinchGestureHandlerProps,\n PinchGestureHandlerEventPayload\n>({\n name: pinchHandlerName,\n allowedProps: baseGestureHandlerProps,\n config: {},\n});\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport type RotationGestureHandlerEventPayload = {\n /**\n * Amount rotated, expressed in radians, from the gesture's focal point\n * (anchor).\n */\n rotation: number;\n\n /**\n * X coordinate, expressed in points, of the gesture's central focal point\n * (anchor).\n */\n anchorX: number;\n\n /**\n * Y coordinate, expressed in points, of the gesture's central focal point\n * (anchor).\n */\n anchorY: number;\n\n /**\n *\n * Instantaneous velocity, expressed in point units per second, of the\n * gesture.\n */\n velocity: number;\n};\n\nexport interface RotationGestureHandlerProps\n extends BaseGestureHandlerProps {}\n\nexport const rotationHandlerName = 'RotationGestureHandler';\n\nexport type RotationGestureHandler = typeof RotationGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const RotationGestureHandler = createHandler<\n RotationGestureHandlerProps,\n RotationGestureHandlerEventPayload\n>({\n name: rotationHandlerName,\n allowedProps: baseGestureHandlerProps,\n config: {},\n});\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const flingGestureHandlerProps = [\n 'numberOfPointers',\n 'direction',\n] as const;\n\nexport type FlingGestureHandlerEventPayload = {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n};\nexport interface FlingGestureConfig {\n /**\n * Expressed allowed direction of movement. It's possible to pass one or many\n * directions in one parameter:\n *\n * ```js\n * direction={Directions.RIGHT | Directions.LEFT}\n * ```\n *\n * or\n *\n * ```js\n * direction={Directions.DOWN}\n * ```\n */\n direction?: number;\n\n /**\n * Determine exact number of points required to handle the fling gesture.\n */\n numberOfPointers?: number;\n}\n\nexport interface FlingGestureHandlerProps\n extends BaseGestureHandlerProps,\n FlingGestureConfig {}\n\nexport const flingHandlerName = 'FlingGestureHandler';\n\nexport type FlingGestureHandler = typeof FlingGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const FlingGestureHandler = createHandler<\n FlingGestureHandlerProps,\n FlingGestureHandlerEventPayload\n>({\n name: flingHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...flingGestureHandlerProps,\n ] as const,\n config: {},\n});\n","import * as React from 'react';\nimport { useImperativeHandle, useRef } from 'react';\n\nimport {\n NativeViewGestureHandler,\n NativeViewGestureHandlerProps,\n nativeViewProps,\n} from './NativeViewGestureHandler';\n\n/*\n * This array should consist of:\n * - All keys in propTypes from NativeGestureHandler\n * (and all keys in GestureHandlerPropTypes)\n * - 'onGestureHandlerEvent'\n * - 'onGestureHandlerStateChange'\n */\nconst NATIVE_WRAPPER_PROPS_FILTER = [\n ...nativeViewProps,\n 'onGestureHandlerEvent',\n 'onGestureHandlerStateChange',\n] as const;\n\nexport default function createNativeWrapper

(\n Component: React.ComponentType

,\n config: Readonly = {}\n) {\n const ComponentWrapper = React.forwardRef<\n React.ComponentType,\n P & NativeViewGestureHandlerProps\n >((props, ref) => {\n // filter out props that should be passed to gesture handler wrapper\n const gestureHandlerProps = Object.keys(props).reduce(\n (res, key) => {\n // TS being overly protective with it's types, see https://github.com/microsoft/TypeScript/issues/26255#issuecomment-458013731 for more info\n const allowedKeys: readonly string[] = NATIVE_WRAPPER_PROPS_FILTER;\n if (allowedKeys.includes(key)) {\n // @ts-ignore FIXME(TS)\n res[key] = props[key];\n }\n return res;\n },\n { ...config } // watch out not to modify config\n );\n const _ref = useRef>();\n const _gestureHandlerRef = useRef>();\n useImperativeHandle(\n ref,\n // @ts-ignore TODO(TS) decide how nulls work in this context\n () => {\n const node = _gestureHandlerRef.current;\n // add handlerTag for relations config\n if (_ref.current && node) {\n // @ts-ignore FIXME(TS) think about createHandler return type\n _ref.current.handlerTag = node.handlerTag;\n return _ref.current;\n }\n return null;\n },\n [_ref, _gestureHandlerRef]\n );\n return (\n \n \n \n );\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n ComponentWrapper.displayName =\n Component?.displayName ||\n // @ts-ignore if render doesn't exist it will return undefined and go further\n Component?.render?.name ||\n (typeof Component === 'string' && Component) ||\n 'ComponentWrapper';\n\n return ComponentWrapper;\n}\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const nativeViewGestureHandlerProps = [\n 'shouldActivateOnStart',\n 'disallowInterruption',\n] as const;\n\nexport interface NativeViewGestureConfig {\n /**\n * Android only.\n *\n * Determines whether the handler should check for an existing touch event on\n * instantiation.\n */\n shouldActivateOnStart?: boolean;\n\n /**\n * When `true`, cancels all other gesture handlers when this\n * `NativeViewGestureHandler` receives an `ACTIVE` state event.\n */\n disallowInterruption?: boolean;\n}\n\nexport interface NativeViewGestureHandlerProps\n extends BaseGestureHandlerProps,\n NativeViewGestureConfig {}\n\nexport type NativeViewGestureHandlerPayload = {\n /**\n * True if gesture was performed inside of containing view, false otherwise.\n */\n pointerInside: boolean;\n};\n\nexport const nativeViewProps = [\n ...baseGestureHandlerProps,\n ...nativeViewGestureHandlerProps,\n] as const;\n\nexport const nativeViewHandlerName = 'NativeViewGestureHandler';\n\nexport type NativeViewGestureHandler = typeof NativeViewGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const NativeViewGestureHandler = createHandler<\n NativeViewGestureHandlerProps,\n NativeViewGestureHandlerPayload\n>({\n name: nativeViewHandlerName,\n allowedProps: nativeViewProps,\n config: {},\n});\n","import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\nimport { ActionType } from '../../ActionType';\nimport { isFabric, tagMessage } from '../../utils';\nimport { getShadowNodeFromRef } from '../../getShadowNodeFromRef';\n\ndeclare global {\n function isFormsStackingContext(node: unknown): boolean | null; // JSI function\n}\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks>[] | null\n > | null;\n firstExecution: boolean;\n useReanimatedHook: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag, handler.config.testId);\n }\n}\n\nfunction checkGestureCallbacksForWorklets(gesture: GestureType) {\n // if a gesture is explicitly marked to run on the JS thread there is no need to check\n // if callbacks are worklets as the user is aware they will be ran on the JS thread\n if (gesture.config.runOnJS) {\n return;\n }\n\n const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);\n const areSomeWorklets = gesture.handlers.isWorklet.includes(true);\n\n // if some of the callbacks are worklets and some are not, and the gesture is not\n // explicitly marked with `.runOnJS(true)` show an error\n if (areSomeNotWorklets && areSomeWorklets) {\n console.error(\n tagMessage(\n `Some of the callbacks in the gesture are worklets and some are not. Either make sure that all calbacks are marked as 'worklet' if you wish to run them on the UI thread or use '.runOnJS(true)' modifier on the gesture explicitly to run all callbacks on the JS thread.`\n )\n );\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n checkGestureCallbacksForWorklets(handler);\n\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n const actionType = gesture.shouldUseReanimated\n ? ActionType.REANIMATED_WORKLET\n : ActionType.JS_FUNCTION_NEW_API;\n\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n actionType\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n const isAnimatedGesture = (g: GestureType) => g.shouldUseReanimated;\n\n preparedGesture.animatedHandlers.value = (gesture\n .filter(isAnimatedGesture)\n .map((g) => g.handlers) as unknown) as HandlerCallbacks<\n Record\n >[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n checkGestureCallbacksForWorklets(handler);\n\n // only update handlerTag when it's actually different, it may be the same\n // if gesture config object is wrapped with useMemo\n if (gesture[i].handlerTag !== handler.handlerTag) {\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config\n .filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI\n .map((g) => g.handlers) as unknown) as HandlerCallbacks<\n Record\n >[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (\n gesture[i].handlerName !== preparedGesture.config[i].handlerName ||\n gesture[i].shouldUseReanimated !==\n preparedGesture.config[i].shouldUseReanimated\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(\n preparedGesture: GestureConfigReference,\n needsRebuild: boolean\n) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.CHANGE:\n return gesture.onChange;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.FINALIZE:\n return gesture.onFinalize;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn(tagMessage('Animated gesture callback must be a worklet'));\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks>[] | null\n >(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const lastUpdateEvent = Reanimated.useSharedValue<\n (GestureUpdateEvent | undefined)[]\n >([]);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n lastUpdateEvent.value[gesture.handlerTag] = undefined;\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n\n if (gesture.onChange && gesture.changeEventCalculator) {\n runWorklet(\n CALLBACK_TYPE.CHANGE,\n gesture,\n gesture.changeEventCalculator?.(\n event,\n lastUpdateEvent.value[gesture.handlerTag]\n )\n );\n\n lastUpdateEvent.value[gesture.handlerTag] = event;\n }\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n needsRebuild\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useReanimatedHook: useReanimatedHook,\n }).current;\n\n if (useReanimatedHook !== preparedGesture.useReanimatedHook) {\n throw new Error(\n tagMessage(\n 'You cannot change the thread the callbacks are ran on while the app is running'\n )\n );\n }\n\n // Reanimated event should be rebuilt only when gestures are reattached, otherwise\n // config update will be enough as all necessary items are stored in shared values anyway\n const needsToRebuildReanimatedEvent =\n preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useReanimatedHook) {\n // Whether animatedGesture or gesture is used shouldn't change while the app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture, needsToRebuildReanimatedEvent);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n const refFunction = (ref: unknown) => {\n if (ref !== null) {\n //@ts-ignore Just setting the ref\n viewRef.current = ref;\n\n if (isFabric()) {\n const node = getShadowNodeFromRef(ref);\n if (global.isFormsStackingContext(node) === false) {\n setImmediate(() => {\n // For some weird reason, console.error on iOS delays\n // the execution of RNGestureHandlerModule.attachGestureHandler,\n // so that's why we use setImmediate here.\n console.error(\n tagMessage(\n 'GestureDetector has received a child that may get view-flattened. ' +\n '\\nTo prevent it from misbehaving you need to wrap the child with a ``.'\n )\n );\n });\n }\n }\n }\n };\n\n if (useReanimatedHook) {\n return (\n \n {props.children}\n \n );\n } else {\n return {props.children};\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n","import { FlingGestureHandlerEventPayload } from '../FlingGestureHandler';\nimport { ForceTouchGestureHandlerEventPayload } from '../ForceTouchGestureHandler';\nimport {\n HitSlop,\n CommonGestureConfig,\n GestureTouchEvent,\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../gestureHandlerCommon';\nimport { getNextHandlerTag } from '../handlersRegistry';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { LongPressGestureHandlerEventPayload } from '../LongPressGestureHandler';\nimport { PanGestureHandlerEventPayload } from '../PanGestureHandler';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { TapGestureHandlerEventPayload } from '../TapGestureHandler';\nimport { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';\n\nexport type GestureType =\n | BaseGesture>\n | BaseGesture>\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture;\n\nexport type GestureRef =\n | number\n | GestureType\n | React.RefObject\n | React.RefObject; // allow adding a ref to a gesture handler\nexport interface BaseGestureConfig\n extends CommonGestureConfig,\n Record {\n ref?: React.MutableRefObject;\n requireToFail?: GestureRef[];\n simultaneousWith?: GestureRef[];\n needsPointerData?: boolean;\n manualActivation?: boolean;\n runOnJS?: boolean;\n testId?: string;\n}\n\ntype TouchEventHandlerType = (\n event: GestureTouchEvent,\n stateManager: GestureStateManagerType\n) => void;\n\nexport type HandlerCallbacks> = {\n handlerTag: number;\n onBegin?: (event: GestureStateChangeEvent) => void;\n onStart?: (event: GestureStateChangeEvent) => void;\n onEnd?: (\n event: GestureStateChangeEvent,\n success: boolean\n ) => void;\n onFinalize?: (\n event: GestureStateChangeEvent,\n success: boolean\n ) => void;\n onUpdate?: (event: GestureUpdateEvent) => void;\n onChange?: (event: any) => void;\n onTouchesDown?: TouchEventHandlerType;\n onTouchesMove?: TouchEventHandlerType;\n onTouchesUp?: TouchEventHandlerType;\n onTouchesCancelled?: TouchEventHandlerType;\n changeEventCalculator?: (\n current: GestureUpdateEvent>,\n previous?: GestureUpdateEvent>\n ) => GestureUpdateEvent>;\n isWorklet: boolean[];\n};\n\nexport const CALLBACK_TYPE = {\n UNDEFINED: 0,\n BEGAN: 1,\n START: 2,\n UPDATE: 3,\n CHANGE: 4,\n END: 5,\n FINALIZE: 6,\n TOUCHES_DOWN: 7,\n TOUCHES_MOVE: 8,\n TOUCHES_UP: 9,\n TOUCHES_CANCELLED: 10,\n} as const;\n\n// Allow using CALLBACK_TYPE as object and type\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];\n\nexport abstract class Gesture {\n /**\n * Return array of gestures, providing the same interface for creating and updating\n * handlers, no matter which object was used to create gesture instance.\n */\n abstract toGestureArray(): GestureType[];\n\n /**\n * Assign handlerTag to the gesture instance and set ref.current (if a ref is set)\n */\n abstract initialize(): void;\n\n /**\n * Make sure that values of properties defining relations are arrays. Do any necessary\n * preprocessing required to configure relations between handlers. Called just before\n * updating the handler on the native side.\n */\n abstract prepare(): void;\n}\n\nexport abstract class BaseGesture<\n EventPayloadT extends Record\n> extends Gesture {\n public handlerTag = -1;\n public handlerName = '';\n public config: BaseGestureConfig = {};\n public handlers: HandlerCallbacks = {\n handlerTag: -1,\n isWorklet: [],\n };\n\n private addDependency(\n key: 'simultaneousWith' | 'requireToFail',\n gesture: Exclude\n ) {\n const value = this.config[key];\n this.config[key] = value\n ? Array().concat(value, gesture)\n : [gesture];\n }\n\n withRef(ref: React.MutableRefObject) {\n this.config.ref = ref;\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n protected isWorklet(callback: Function) {\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n return callback.__workletHash !== undefined;\n }\n\n onBegin(callback: (event: GestureStateChangeEvent) => void) {\n this.handlers.onBegin = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);\n return this;\n }\n\n onStart(callback: (event: GestureStateChangeEvent) => void) {\n this.handlers.onStart = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);\n return this;\n }\n\n onEnd(\n callback: (\n event: GestureStateChangeEvent,\n success: boolean\n ) => void\n ) {\n this.handlers.onEnd = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.END] = this.isWorklet(callback);\n return this;\n }\n\n onFinalize(\n callback: (\n event: GestureStateChangeEvent,\n success: boolean\n ) => void\n ) {\n this.handlers.onFinalize = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);\n return this;\n }\n\n onTouchesDown(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesDown = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesMove(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesMove = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesUp(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesUp = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesCancelled(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesCancelled = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n enabled(enabled: boolean) {\n this.config.enabled = enabled;\n return this;\n }\n\n shouldCancelWhenOutside(value: boolean) {\n this.config.shouldCancelWhenOutside = value;\n return this;\n }\n\n hitSlop(hitSlop: HitSlop) {\n this.config.hitSlop = hitSlop;\n return this;\n }\n\n runOnJS(runOnJS: boolean) {\n this.config.runOnJS = runOnJS;\n return this;\n }\n\n simultaneousWithExternalGesture(...gestures: Exclude[]) {\n for (const gesture of gestures) {\n this.addDependency('simultaneousWith', gesture);\n }\n return this;\n }\n\n requireExternalGestureToFail(...gestures: Exclude[]) {\n for (const gesture of gestures) {\n this.addDependency('requireToFail', gesture);\n }\n return this;\n }\n\n withTestId(id: string) {\n this.config.testId = id;\n return this;\n }\n\n initialize() {\n this.handlerTag = getNextHandlerTag();\n\n this.handlers = { ...this.handlers, handlerTag: this.handlerTag };\n\n if (this.config.ref) {\n this.config.ref.current = this as GestureType;\n }\n }\n\n toGestureArray(): GestureType[] {\n return [this as GestureType];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n prepare() {}\n\n get shouldUseReanimated(): boolean {\n // use Reanimated when runOnJS isn't set explicitly and all defined callbacks are worklets\n return (\n this.config.runOnJS !== true && !this.handlers.isWorklet.includes(false)\n );\n }\n}\n\nexport abstract class ContinousBaseGesture<\n EventPayloadT extends Record,\n EventChangePayloadT extends Record\n> extends BaseGesture {\n onUpdate(callback: (event: GestureUpdateEvent) => void) {\n this.handlers.onUpdate = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent\n ) => void\n ) {\n this.handlers.onChange = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.CHANGE] = this.isWorklet(callback);\n return this;\n }\n\n manualActivation(manualActivation: boolean) {\n this.config.manualActivation = manualActivation;\n return this;\n }\n}\n","import { ComponentClass } from 'react';\nimport {\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { tagMessage } from '../../utils';\n\nexport interface SharedValue {\n value: T;\n}\n\nlet Reanimated: {\n default: {\n // Slightly modified definition copied from 'react-native-reanimated'\n // eslint-disable-next-line @typescript-eslint/ban-types\n createAnimatedComponent

(\n component: ComponentClass

,\n options?: unknown\n ): ComponentClass

;\n };\n useEvent: (\n callback: (event: GestureUpdateEvent | GestureStateChangeEvent) => void,\n events: string[],\n rebuild: boolean\n ) => unknown;\n useSharedValue: (value: T) => SharedValue;\n setGestureState: (handlerTag: number, newState: number) => void;\n};\n\ntry {\n Reanimated = require('react-native-reanimated');\n\n if (!Reanimated.setGestureState) {\n Reanimated.setGestureState = () => {\n 'worklet';\n console.warn(\n tagMessage(\n 'Please use newer version of react-native-reanimated in order to control state of the gestures.'\n )\n );\n };\n }\n // When 'react-native-reanimated' is not available we want to\n // quietly continue\n // eslint-disable-next-line no-empty\n} catch (e) {}\n\nexport { Reanimated };\n","import { LogBox } from 'react-native';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport {\n addWhitelistedNativeProps,\n addWhitelistedUIProps,\n} from './ConfigHelper';\nimport * as reanimated1 from './reanimated1';\nimport ReanimatedComponents from './reanimated2/component';\n\nconst Animated = {\n // components\n ...ReanimatedComponents,\n createAnimatedComponent,\n // configuration\n addWhitelistedNativeProps,\n addWhitelistedUIProps,\n // reanimated 1\n ...reanimated1,\n};\n\nexport * from './reanimated2';\nexport * from './reanimated1';\nexport default Animated;\n\n// I think we can ignore this message as long as Gesture Handler doesn't\n// try to load the Reanimated module. I figured it should be here instead of\n// RNGH because this prevents the message from being displayed for all\n// versions of RNGH.\nLogBox.ignoreLogs([\n 'RCTBridge required dispatch_sync to load RNGestureHandlerModule. This may lead to deadlocks',\n]);\n","import React, { Component, ComponentType, MutableRefObject, Ref } from 'react';\nimport { findNodeHandle, Platform, StyleSheet } from 'react-native';\nimport ReanimatedEventEmitter from './ReanimatedEventEmitter';\n\n// @ts-ignore JS file\nimport AnimatedEvent from './reanimated1/core/AnimatedEvent';\n// @ts-ignore JS file\nimport AnimatedNode from './reanimated1/core/AnimatedNode';\n// @ts-ignore JS file\nimport AnimatedValue from './reanimated1/core/AnimatedValue';\n// @ts-ignore JS file\nimport { createOrReusePropsNode } from './reanimated1/core/AnimatedProps';\nimport WorkletEventHandler from './reanimated2/WorkletEventHandler';\nimport setAndForwardRef from './setAndForwardRef';\nimport './reanimated2/layoutReanimation/LayoutAnimationRepository';\n\nimport invariant from 'invariant';\nimport { adaptViewConfig } from './ConfigHelper';\nimport { RNRenderer } from './reanimated2/platform-specific/RNRenderer';\nimport {\n makeMutable,\n runOnUI,\n enableLayoutAnimations,\n} from './reanimated2/core';\nimport {\n DefaultEntering,\n DefaultExiting,\n DefaultLayout,\n} from './reanimated2/layoutReanimation/defaultAnimations/Default';\nimport {\n isJest,\n isChromeDebugger,\n shouldBeUseWeb,\n} from './reanimated2/PlatformChecker';\nimport { initialUpdaterRun } from './reanimated2/animation';\nimport {\n BaseAnimationBuilder,\n EntryExitAnimationFunction,\n ILayoutAnimationBuilder,\n} from './reanimated2/layoutReanimation';\nimport { SharedValue, StyleProps } from './reanimated2/commonTypes';\nimport {\n ViewDescriptorsSet,\n ViewRefSet,\n} from './reanimated2/ViewDescriptorsSet';\n\nconst NODE_MAPPING = new Map();\n\ninterface ListenerData {\n viewTag: number;\n props: StyleProps;\n}\n\nfunction listener(data: ListenerData) {\n const component = NODE_MAPPING.get(data.viewTag);\n component && component._updateFromNative(data.props);\n}\n\nfunction dummyListener() {\n // empty listener we use to assign to listener properties for which animated\n // event is used.\n}\n\nfunction hasAnimatedNodes(value: unknown): boolean {\n if (value instanceof AnimatedNode) {\n return true;\n }\n if (Array.isArray(value)) {\n return value.some((item) => hasAnimatedNodes(item));\n }\n if (value && typeof value === 'object') {\n return Object.keys(value).some((key) =>\n hasAnimatedNodes((value as Record)[key])\n );\n }\n return false;\n}\n\ntype NestedArray = T | NestedArray[];\nfunction flattenArray(array: NestedArray): T[] {\n if (!Array.isArray(array)) {\n return [array];\n }\n const resultArr: T[] = [];\n\n const _flattenArray = (arr: NestedArray[]): void => {\n arr.forEach((item) => {\n if (Array.isArray(item)) {\n _flattenArray(item);\n } else {\n resultArr.push(item);\n }\n });\n };\n _flattenArray(array);\n return resultArr;\n}\n\nfunction onlyAnimatedStyles(styles: StyleProps[]) {\n return styles.filter((style) => style?.viewDescriptors);\n}\n\nfunction isSameAnimatedStyle(\n style1?: StyleProps,\n style2?: StyleProps\n): boolean {\n // We cannot use equality check to compare useAnimatedStyle outputs directly.\n // Instead, we can compare its viewsRefs.\n return style1?.viewsRef === style2?.viewsRef;\n}\n\nconst isSameAnimatedProps = isSameAnimatedStyle;\n\nconst has = (\n key: K,\n x: unknown\n): x is { [key in K]: unknown } => {\n if (typeof x === 'function' || typeof x === 'object') {\n if (x === null || x === undefined) {\n return false;\n } else {\n return key in x;\n }\n }\n return false;\n};\n\ninterface AnimatedProps extends Record {\n viewDescriptors?: ViewDescriptorsSet;\n viewsRef?: ViewRefSet;\n initial?: SharedValue;\n}\n\nexport type AnimatedComponentProps

> = P & {\n forwardedRef?: Ref;\n style?: NestedArray;\n animatedProps?: Partial>;\n animatedStyle?: StyleProps;\n layout?:\n | BaseAnimationBuilder\n | ILayoutAnimationBuilder\n | typeof BaseAnimationBuilder;\n entering?:\n | BaseAnimationBuilder\n | typeof BaseAnimationBuilder\n | EntryExitAnimationFunction\n | Keyframe;\n exiting?:\n | BaseAnimationBuilder\n | typeof BaseAnimationBuilder\n | EntryExitAnimationFunction\n | Keyframe;\n};\n\ntype Options

= {\n setNativeProps: (ref: ComponentRef, props: P) => void;\n};\n\ninterface ComponentRef extends Component {\n setNativeProps?: (props: Record) => void;\n getScrollableNode?: () => ComponentRef;\n}\n\ninterface InitialComponentProps extends Record {\n ref?: Ref;\n collapsable?: boolean;\n}\n\ninterface PropsAnimated {\n __onEvaluate: () => StyleProps;\n __detach: () => void;\n __getValue: () => StyleProps;\n update: () => void;\n setNativeView: (view: Component) => void;\n}\n\nexport default function createAnimatedComponent(\n Component: ComponentType,\n options?: Options\n): ComponentType> {\n invariant(\n typeof Component !== 'function' ||\n (Component.prototype && Component.prototype.isReactComponent),\n '`createAnimatedComponent` does not support stateless functional components; ' +\n 'use a class component instead.'\n );\n\n class AnimatedComponent extends React.Component<\n AnimatedComponentProps\n > {\n _invokeAnimatedPropsCallbackOnMount = false;\n _styles: StyleProps[] | null = null;\n _animatedProps?: Partial>;\n _viewTag = -1;\n _isFirstRender = true;\n animatedStyle: { value: StyleProps } = { value: {} };\n sv: SharedValue> | null;\n _propsAnimated?: PropsAnimated;\n _component: ComponentRef | null = null;\n static displayName: string;\n\n constructor(props: AnimatedComponentProps) {\n super(props);\n this._attachProps(this.props);\n if (isJest()) {\n this.animatedStyle = { value: {} };\n }\n this.sv = makeMutable({});\n }\n\n componentWillUnmount() {\n this._detachPropUpdater();\n this._propsAnimated && this._propsAnimated.__detach();\n this._detachNativeEvents();\n this._detachStyles();\n this.sv = null;\n }\n\n componentDidMount() {\n if (this._invokeAnimatedPropsCallbackOnMount) {\n this._invokeAnimatedPropsCallbackOnMount = false;\n this._animatedPropsCallback();\n }\n\n this._propsAnimated &&\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._propsAnimated.setNativeView(this._component!);\n this._attachNativeEvents();\n this._attachPropUpdater();\n this._attachAnimatedStyles();\n }\n\n _getEventViewRef() {\n // Make sure to get the scrollable node for components that implement\n // `ScrollResponder.Mixin`.\n return this._component?.getScrollableNode\n ? this._component.getScrollableNode()\n : this._component;\n }\n\n _attachNativeEvents() {\n const node = this._getEventViewRef();\n const viewTag = findNodeHandle(options?.setNativeProps ? this : node);\n for (const key in this.props) {\n const prop = this.props[key];\n if (prop instanceof AnimatedEvent) {\n (prop as AnimatedEvent).attachEvent(node, key);\n } else if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n prop.current.registerForEvents(viewTag as number, key);\n }\n }\n }\n\n _detachNativeEvents() {\n const node = this._getEventViewRef();\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (prop instanceof AnimatedEvent) {\n (prop as AnimatedEvent).detachEvent(node, key);\n } else if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n prop.current.unregisterFromEvents();\n }\n }\n }\n\n _detachStyles() {\n if (Platform.OS === 'web' && this._styles !== null) {\n for (const style of this._styles) {\n if (style?.viewsRef) {\n style.viewsRef.remove(this);\n }\n }\n } else if (this._viewTag !== -1 && this._styles !== null) {\n for (const style of this._styles) {\n style.viewDescriptors.remove(this._viewTag);\n }\n if (this.props.animatedProps?.viewDescriptors) {\n this.props.animatedProps.viewDescriptors.remove(this._viewTag);\n }\n }\n }\n\n _reattachNativeEvents(\n prevProps: AnimatedComponentProps\n ) {\n const node = this._getEventViewRef();\n const attached = new Set();\n const nextEvts = new Set();\n let viewTag: number | undefined;\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (prop instanceof AnimatedEvent) {\n nextEvts.add((prop as AnimatedEvent).__nodeID);\n } else if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n if (viewTag === undefined) {\n viewTag = prop.current.viewTag;\n }\n }\n }\n for (const key in prevProps) {\n const prop = this.props[key];\n if (prop instanceof AnimatedEvent) {\n if (!nextEvts.has((prop as AnimatedEvent).__nodeID)) {\n // event was in prev props but not in current props, we detach\n (prop as AnimatedEvent).detachEvent(node, key);\n } else {\n // event was in prev and is still in current props\n attached.add((prop as AnimatedEvent).__nodeID);\n }\n } else if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler &&\n prop.current.reattachNeeded\n ) {\n prop.current.unregisterFromEvents();\n }\n }\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n prop instanceof AnimatedEvent &&\n !attached.has((prop as AnimatedEvent).__nodeID)\n ) {\n // not yet attached\n (prop as AnimatedEvent).attachEvent(node, key);\n } else if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler &&\n prop.current.reattachNeeded\n ) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n prop.current.registerForEvents(viewTag!, key);\n prop.current.reattachNeeded = false;\n }\n }\n }\n\n // The system is best designed when setNativeProps is implemented. It is\n // able to avoid re-rendering and directly set the attributes that changed.\n // However, setNativeProps can only be implemented on native components\n // If you want to animate a composite component, you need to re-render it.\n // In this case, we have a fallback that uses forceUpdate.\n _animatedPropsCallback = () => {\n if (this._component == null) {\n // AnimatedProps is created in will-mount because it's used in render.\n // But this callback may be invoked before mount in async mode,\n // In which case we should defer the setNativeProps() call.\n // React may throw away uncommitted work in async mode,\n // So a deferred call won't always be invoked.\n this._invokeAnimatedPropsCallbackOnMount = true;\n } else if (typeof this._component.setNativeProps !== 'function') {\n this.forceUpdate();\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._component.setNativeProps(this._propsAnimated!.__getValue());\n }\n };\n\n _attachProps(nextProps: StyleProps) {\n const oldPropsAnimated = this._propsAnimated;\n\n this._propsAnimated = createOrReusePropsNode(\n nextProps,\n this._animatedPropsCallback,\n oldPropsAnimated\n );\n // If prop node has been reused we don't need to call into \"__detach\"\n if (oldPropsAnimated !== this._propsAnimated) {\n // When you call detach, it removes the element from the parent list\n // of children. If it goes to 0, then the parent also detaches itself\n // and so on.\n // An optimization is to attach the new elements and THEN detach the old\n // ones instead of detaching and THEN attaching.\n // This way the intermediate state isn't to go to 0 and trigger\n // this expensive recursive detaching to then re-attach everything on\n // the very next operation.\n oldPropsAnimated && oldPropsAnimated.__detach();\n }\n }\n\n _updateFromNative(props: StyleProps) {\n if (options?.setNativeProps) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n options.setNativeProps(this._component!, props);\n } else {\n // eslint-disable-next-line no-unused-expressions\n this._component?.setNativeProps?.(props);\n }\n }\n\n _attachPropUpdater() {\n const viewTag = findNodeHandle(this);\n NODE_MAPPING.set(viewTag, this);\n if (NODE_MAPPING.size === 1) {\n ReanimatedEventEmitter.addListener('onReanimatedPropsChange', listener);\n }\n }\n\n _attachAnimatedStyles() {\n const styles = this.props.style\n ? onlyAnimatedStyles(flattenArray(this.props.style))\n : [];\n const prevStyles = this._styles;\n this._styles = styles;\n\n const prevAnimatedProps = this._animatedProps;\n this._animatedProps = this.props.animatedProps;\n\n let viewTag: number | null;\n let viewName: string | null;\n if (Platform.OS === 'web') {\n viewTag = findNodeHandle(this);\n viewName = null;\n } else {\n // hostInstance can be null for a component that doesn't render anything (render function returns null). Example: svg Stop: https://github.com/react-native-svg/react-native-svg/blob/develop/src/elements/Stop.tsx\n const hostInstance = RNRenderer.findHostInstance_DEPRECATED(this);\n if (!hostInstance) {\n throw new Error(\n 'Cannot find host instance for this component. Maybe it renders nothing?'\n );\n }\n // we can access view tag in the same way it's accessed here https://github.com/facebook/react/blob/e3f4eb7272d4ca0ee49f27577156b57eeb07cf73/packages/react-native-renderer/src/ReactFabric.js#L146\n viewTag = hostInstance?._nativeTag;\n /**\n * RN uses viewConfig for components for storing different properties of the component(example: https://github.com/facebook/react-native/blob/master/Libraries/Components/ScrollView/ScrollViewViewConfig.js#L16).\n * The name we're looking for is in the field named uiViewClassName.\n */\n viewName = hostInstance?.viewConfig?.uiViewClassName;\n // update UI props whitelist for this view\n const hasReanimated2Props =\n this.props.animatedProps?.viewDescriptors || styles.length;\n if (hasReanimated2Props && hostInstance?.viewConfig) {\n adaptViewConfig(hostInstance.viewConfig);\n }\n }\n this._viewTag = viewTag as number;\n\n // remove old styles\n if (prevStyles) {\n // in most of the cases, views have only a single animated style and it remains unchanged\n const hasOneSameStyle =\n styles.length === 1 &&\n prevStyles.length === 1 &&\n isSameAnimatedStyle(styles[0], prevStyles[0]);\n\n if (!hasOneSameStyle) {\n // otherwise, remove each style that is not present in new styles\n for (const prevStyle of prevStyles) {\n const isPresent = styles.some((style) =>\n isSameAnimatedStyle(style, prevStyle)\n );\n if (!isPresent) {\n prevStyle.viewDescriptors.remove(viewTag);\n }\n }\n }\n }\n\n styles.forEach((style) => {\n style.viewDescriptors.add({ tag: viewTag, name: viewName });\n if (isJest()) {\n /**\n * We need to connect Jest's TestObject instance whose contains just props object\n * with the updateProps() function where we update the properties of the component.\n * We can't update props object directly because TestObject contains a copy of props - look at render function:\n * const props = this._filterNonAnimatedProps(this.props);\n */\n this.animatedStyle.value = {\n ...this.animatedStyle.value,\n ...style.initial.value,\n };\n style.animatedStyle.current = this.animatedStyle;\n }\n });\n\n // detach old animatedProps\n if (\n prevAnimatedProps &&\n !isSameAnimatedProps(prevAnimatedProps, this.props.animatedProps)\n ) {\n prevAnimatedProps.viewDescriptors!.remove(viewTag as number);\n }\n\n // attach animatedProps property\n if (this.props.animatedProps?.viewDescriptors) {\n this.props.animatedProps.viewDescriptors.add({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tag: viewTag!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n name: viewName!,\n });\n }\n }\n\n _detachPropUpdater() {\n const viewTag = findNodeHandle(this);\n NODE_MAPPING.delete(viewTag);\n if (NODE_MAPPING.size === 0) {\n ReanimatedEventEmitter.removeAllListeners('onReanimatedPropsChange');\n }\n }\n\n componentDidUpdate(\n prevProps: AnimatedComponentProps\n ) {\n this._attachProps(this.props);\n this._reattachNativeEvents(prevProps);\n\n this._propsAnimated &&\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._propsAnimated.setNativeView(this._component!);\n this._attachAnimatedStyles();\n }\n\n _setComponentRef = setAndForwardRef({\n getForwardedRef: () =>\n this.props.forwardedRef as MutableRefObject<\n Component, Record, unknown>\n >,\n setLocalRef: (ref) => {\n // TODO update config\n const tag = findNodeHandle(ref);\n if (\n (this.props.layout || this.props.entering || this.props.exiting) &&\n tag != null\n ) {\n if (!shouldBeUseWeb()) {\n enableLayoutAnimations(true, false);\n }\n let layout = this.props.layout ? this.props.layout : DefaultLayout;\n let entering = this.props.entering\n ? this.props.entering\n : DefaultEntering;\n let exiting = this.props.exiting\n ? this.props.exiting\n : DefaultExiting;\n\n if (has('build', layout)) {\n layout = layout.build();\n }\n\n if (has('build', entering)) {\n entering = entering.build() as EntryExitAnimationFunction;\n }\n\n if (has('build', exiting)) {\n exiting = exiting.build() as EntryExitAnimationFunction;\n }\n\n const config = {\n layout,\n entering,\n exiting,\n sv: this.sv,\n };\n runOnUI(() => {\n 'worklet';\n global.LayoutAnimationRepository.registerConfig(tag, config);\n })();\n }\n\n if (ref !== this._component) {\n this._component = ref;\n }\n },\n });\n\n _filterNonAnimatedStyle(inputStyle: StyleProps) {\n const style: StyleProps = {};\n for (const key in inputStyle) {\n const value = inputStyle[key];\n if (!hasAnimatedNodes(value)) {\n style[key] = value;\n } else if (value instanceof AnimatedValue) {\n // if any style in animated component is set directly to the `Value` we set those styles to the first value of `Value` node in order\n // to avoid flash of default styles when `Value` is being asynchrounously sent via bridge and initialized in the native side.\n style[key] = value._startingValue;\n }\n }\n return style;\n }\n\n _filterNonAnimatedProps(\n inputProps: AnimatedComponentProps\n ): Record {\n const props: Record = {};\n for (const key in inputProps) {\n const value = inputProps[key];\n if (key === 'style') {\n const styleProp = inputProps.style;\n const styles = flattenArray(styleProp ?? []);\n const processedStyle: StyleProps = styles.map((style) => {\n if (style && style.viewDescriptors) {\n // this is how we recognize styles returned by useAnimatedStyle\n style.viewsRef.add(this);\n if (this._isFirstRender) {\n return {\n ...style.initial.value,\n ...initialUpdaterRun(style.initial.updater),\n };\n } else {\n return style.initial.value;\n }\n } else {\n return style;\n }\n });\n props[key] = this._filterNonAnimatedStyle(\n StyleSheet.flatten(processedStyle)\n );\n } else if (key === 'animatedProps') {\n const animatedProp = inputProps.animatedProps as Partial<\n AnimatedComponentProps\n >;\n if (animatedProp.initial !== undefined) {\n Object.keys(animatedProp.initial.value).forEach((key) => {\n props[key] = animatedProp.initial?.value[key];\n animatedProp.viewsRef?.add(this);\n });\n }\n } else if (value instanceof AnimatedEvent) {\n // we cannot filter out event listeners completely as some components\n // rely on having a callback registered in order to generate events\n // alltogether. Therefore we provide a dummy callback here to allow\n // native event dispatcher to hijack events.\n props[key] = dummyListener;\n } else if (\n has('current', value) &&\n value.current instanceof WorkletEventHandler\n ) {\n if (value.current.eventNames.length > 0) {\n value.current.eventNames.forEach((eventName) => {\n props[eventName] = has('listeners', value.current)\n ? (value.current.listeners as Record)[\n eventName\n ]\n : dummyListener;\n });\n } else {\n props[key] = dummyListener;\n }\n } else if (!(value instanceof AnimatedNode)) {\n if (key !== 'onGestureHandlerStateChange' || !isChromeDebugger()) {\n props[key] = value;\n }\n } else if (value instanceof AnimatedValue) {\n // if any prop in animated component is set directly to the `Value` we set those props to the first value of `Value` node in order\n // to avoid default values for a short moment when `Value` is being asynchrounously sent via bridge and initialized in the native side.\n props[key] = (value as AnimatedValue)._startingValue;\n }\n }\n return props;\n }\n\n render() {\n const props = this._filterNonAnimatedProps(this.props);\n if (isJest()) {\n props.animatedStyle = this.animatedStyle;\n }\n\n if (this._isFirstRender) {\n this._isFirstRender = false;\n }\n\n const platformProps = Platform.select({\n web: {},\n default: { collapsable: false },\n });\n return (\n \n );\n }\n }\n\n AnimatedComponent.displayName = `AnimatedComponent(${\n Component.displayName || Component.name || 'Component'\n })`;\n\n return React.forwardRef((props, ref) => {\n return (\n \n );\n });\n}\n","import ReanimatedModule from './ReanimatedModule';\nimport { NativeEventEmitter } from 'react-native';\n\nexport default new NativeEventEmitter(ReanimatedModule);\n","import { NativeModules } from 'react-native';\nimport ReanimatedModuleCompat from './ReanimatedModuleCompat';\nimport { nativeShouldBeMock } from './reanimated2/PlatformChecker';\n\nlet exportedModule;\nif (nativeShouldBeMock()) {\n exportedModule = ReanimatedModuleCompat;\n} else {\n const { ReanimatedModule } = NativeModules;\n exportedModule = ReanimatedModule;\n}\n\nexport default exportedModule;\n","export default {\n async disconnectNodeFromView(): Promise {\n // noop\n },\n async attachEvent(\n _viewTag: number,\n _eventName: string,\n _nodeID: number\n ): Promise {\n // noop\n },\n async detachEvent(\n _viewTag: number,\n _eventName: string,\n _nodeID: number\n ): Promise {\n // noop\n },\n async createNode(\n _nodeID: number,\n _config: Record\n ): Promise {\n // noop\n },\n async dropNode(_nodeID: number): Promise {\n // noop\n },\n async configureProps(\n _nativeProps: string[],\n _uiProps: string[]\n ): Promise {\n // noop\n },\n async disconnectNodes(): Promise {\n // noop\n },\n async addListener(): Promise {\n // noop\n },\n async removeListeners(): Promise {\n // noop\n },\n async removeAllListeners(): Promise {\n // noop\n },\n async animateNextTransition(): Promise {\n console.warn(\n 'Reanimated: animateNextTransition is unimplemented on current platform'\n );\n },\n};\n","import { Platform } from 'react-native';\n\nexport function isJest(): boolean {\n return !!process.env.JEST_WORKER_ID;\n}\n\nexport function isChromeDebugger(): boolean {\n return !(global as any).nativeCallSyncHook || (global as any).__REMOTEDEV__;\n}\n\nexport function isWeb(): boolean {\n return Platform.OS === 'web';\n}\n\nexport function shouldBeUseWeb() {\n return isJest() || isChromeDebugger() || isWeb();\n}\n\nexport function nativeShouldBeMock() {\n return isJest() || isChromeDebugger();\n}\n","import { Platform, findNodeHandle } from 'react-native';\nimport ReanimatedModule from '../../ReanimatedModule';\n\nimport AnimatedNode from './AnimatedNode';\nimport InternalAnimatedValue from './AnimatedValue';\nimport { createAnimatedAlways } from './AnimatedAlways';\n\nimport invariant from 'invariant';\nimport createEventObjectProxyPolyfill from './createEventObjectProxyPolyfill';\n\nfunction sanitizeArgMapping(argMapping) {\n // Find animated values in `argMapping` and create an array representing their\n // key path inside the `nativeEvent` object. Ex.: ['contentOffset', 'x'].\n const eventMappings = [];\n const alwaysNodes = [];\n\n const getNode = (node) => {\n if (\n Platform.OS === 'web' ||\n Platform.OS === 'windows' ||\n Platform.OS === 'macos'\n ) {\n return node;\n }\n return node.__nodeID;\n };\n\n const traverse = (value, path) => {\n if (value instanceof InternalAnimatedValue) {\n eventMappings.push(path.concat(getNode(value)));\n } else if (typeof value === 'object' && value.__val) {\n eventMappings.push(path.concat(getNode(value.__val)));\n } else if (typeof value === 'function') {\n const node = new InternalAnimatedValue(0);\n alwaysNodes.push(createAnimatedAlways(value(node)));\n eventMappings.push(path.concat(getNode(node)));\n } else if (typeof value === 'object') {\n for (const key in value) {\n traverse(value[key], path.concat(key));\n }\n }\n };\n\n invariant(\n argMapping[0] && argMapping[0].nativeEvent,\n 'Native driven events only support animated values contained inside `nativeEvent`.'\n );\n\n // Assume that the event containing `nativeEvent` is always the first argument.\n const ev = argMapping[0].nativeEvent;\n if (typeof ev === 'object') {\n traverse(ev, []);\n } else if (typeof ev === 'function') {\n const proxyHandler = {\n get: function (target, name) {\n if (name === '__isProxy') {\n return true;\n }\n if (!target[name] && name !== '__val') {\n target[name] = new Proxy({}, proxyHandler);\n }\n return target[name];\n },\n set: function (target, prop, value) {\n if (prop === '__val') {\n target[prop] = value;\n return true;\n }\n return false;\n },\n };\n\n const proxy =\n typeof Proxy === 'function'\n ? new Proxy({}, proxyHandler)\n : createEventObjectProxyPolyfill();\n alwaysNodes.push(createAnimatedAlways(ev(proxy)));\n traverse(proxy, []);\n }\n\n return { eventMappings, alwaysNodes };\n}\n\nexport default class AnimatedEvent extends AnimatedNode {\n constructor(argMapping, _config = {}) {\n const { eventMappings, alwaysNodes } = sanitizeArgMapping(argMapping);\n super({ type: 'event', argMapping: eventMappings });\n this._alwaysNodes = alwaysNodes;\n }\n\n toString() {\n return `AnimatedEvent, id: ${this.__nodeID}`;\n }\n\n // The below field is a temporary workaround to make AnimatedEvent object be recognized\n // as Animated.event event callback and therefore filtered out from being send over the\n // bridge which was causing the object to be frozen in JS.\n __isNative = true;\n\n attachEvent(viewRef, eventName) {\n for (let i = 0; i < this._alwaysNodes.length; i++) {\n this._alwaysNodes[i].__attach();\n }\n this.__attach();\n const viewTag = findNodeHandle(viewRef);\n ReanimatedModule.attachEvent(viewTag, eventName, this.__nodeID);\n }\n\n __onEvaluate() {\n return 0;\n }\n\n detachEvent(viewRef, eventName) {\n for (let i = 0; i < this._alwaysNodes.length; i++) {\n this._alwaysNodes[i].isNativelyInitialized() &&\n this._alwaysNodes[i].__detach();\n }\n const viewTag = findNodeHandle(viewRef);\n ReanimatedModule.detachEvent(viewTag, eventName, this.__nodeID);\n this.__detach();\n }\n}\n\nexport function createAnimatedEvent(argMapping, config) {\n return new AnimatedEvent(argMapping, config);\n}\n","import ReanimatedModule from '../../ReanimatedModule';\nimport { Platform } from 'react-native';\n\nconst UPDATED_NODES = [];\n\nlet loopID = 1;\nlet propUpdatesEnqueued = null;\nlet nodeCount = 0;\nlet callID = '';\n\nexport function getCallID() {\n return callID;\n}\n\nexport function setCallID(nextCallID) {\n callID = nextCallID;\n}\n\nfunction sanitizeConfig(config) {\n if (\n Platform.OS === 'web' ||\n Platform.OS === 'windows' ||\n Platform.OS === 'macos' ||\n ['undefined', 'string', 'function', 'boolean', 'number'].includes(\n typeof config\n )\n ) {\n return config;\n } else if (Array.isArray(config)) {\n return config.map(sanitizeConfig);\n } else if (config instanceof AnimatedNode) {\n return config.__nodeID;\n } else if (typeof config === 'object') {\n const output = {};\n for (const property in config) {\n if (property in config) {\n output[property] = sanitizeConfig(config[property]);\n }\n }\n return output;\n }\n // unhandled\n return config;\n}\n\nfunction runPropUpdates() {\n const visitedNodes = new Set();\n const findAndUpdateNodes = (node) => {\n if (!node) {\n console.warn('findAndUpdateNodes was passed a nullish node');\n return;\n }\n\n if (visitedNodes.has(node)) {\n return;\n } else {\n visitedNodes.add(node);\n }\n if (typeof node.update === 'function') {\n node.update();\n } else {\n const nodes = node.__getChildren();\n if (nodes) {\n for (let i = 0, l = nodes.length; i < l; i++) {\n findAndUpdateNodes(nodes[i]);\n }\n }\n }\n };\n for (let i = 0; i < UPDATED_NODES.length; i++) {\n const node = UPDATED_NODES[i];\n findAndUpdateNodes(node);\n }\n UPDATED_NODES.length = 0; // clear array\n propUpdatesEnqueued = null;\n loopID += 1;\n}\n\nconst scheduleUpdates =\n Platform.OS === 'web' ? requestAnimationFrame : setImmediate;\n\nexport default class AnimatedNode {\n __nodeID;\n __lastLoopID = { '': -1 };\n __memoizedValue = { '': null };\n __children = [];\n\n constructor(nodeConfig, inputNodes) {\n this.__nodeID = ++nodeCount;\n this.__nodeConfig = sanitizeConfig(nodeConfig);\n this.__initialized = false;\n this.__inputNodes =\n inputNodes && inputNodes.filter((node) => node instanceof AnimatedNode);\n }\n\n toString() {\n return `AnimatedNode, id: ${this.__nodeID}`;\n }\n\n __attach() {\n this.__nativeInitialize();\n\n const nodes = this.__inputNodes;\n\n if (nodes) {\n for (let i = 0, l = nodes.length; i < l; i++) {\n nodes[i].__addChild(this);\n }\n }\n }\n\n __detach() {\n const nodes = this.__inputNodes;\n\n if (nodes) {\n for (let i = 0, l = nodes.length; i < l; i++) {\n nodes[i].__removeChild(this);\n }\n }\n\n this.__nativeTearDown();\n }\n\n __getValue() {\n if (!(callID in this.__lastLoopID) || this.__lastLoopID[callID] < loopID) {\n this.__lastLoopID[callID] = loopID;\n const result = this.__onEvaluate();\n this.__memoizedValue[callID] = result;\n return result;\n }\n return this.__memoizedValue[callID];\n }\n\n __forceUpdateCache(newValue) {\n this.__memoizedValue[callID] = newValue;\n this.__markUpdated();\n }\n\n __dangerouslyRescheduleEvaluate() {\n this.__lastLoopID[callID] = -1;\n this.__markUpdated();\n }\n\n __markUpdated() {\n UPDATED_NODES.push(this);\n if (!propUpdatesEnqueued) {\n propUpdatesEnqueued = scheduleUpdates(runPropUpdates);\n }\n }\n\n __nativeInitialize() {\n if (!this.__initialized) {\n ReanimatedModule.createNode(this.__nodeID, { ...this.__nodeConfig });\n this.__initialized = true;\n }\n }\n\n __nativeTearDown() {\n if (this.__initialized) {\n ReanimatedModule.dropNode(this.__nodeID);\n this.__initialized = false;\n }\n }\n\n isNativelyInitialized() {\n return this.__initialized;\n }\n\n __onEvaluate() {\n throw new Error('Missing implementation of onEvaluate');\n }\n\n __getProps() {\n return this.__getValue();\n }\n\n __getChildren() {\n return this.__children;\n }\n\n __addChild(child) {\n if (this.__children.length === 0) {\n this.__attach();\n }\n this.__children.push(child);\n child.__nativeInitialize();\n\n if (ReanimatedModule.connectNodes) {\n ReanimatedModule.connectNodes(this.__nodeID, child.__nodeID);\n } else {\n child.__dangerouslyRescheduleEvaluate();\n }\n }\n\n __removeChild(child) {\n const index = this.__children.indexOf(child);\n if (index === -1) {\n console.warn(\"Trying to remove a child that doesn't exist\");\n return;\n }\n\n if (ReanimatedModule.disconnectNodes) {\n ReanimatedModule.disconnectNodes(this.__nodeID, child.__nodeID);\n }\n\n this.__children.splice(index, 1);\n if (this.__children.length === 0) {\n this.__detach();\n }\n }\n\n _connectAnimatedView(nativeViewTag) {\n if (ReanimatedModule.connectNodeToView) {\n ReanimatedModule.connectNodeToView(this.__nodeID, nativeViewTag);\n } else {\n this.__dangerouslyRescheduleEvaluate();\n }\n }\n\n _disconnectAnimatedView(nativeViewTag) {\n ReanimatedModule.disconnectNodeFromView(this.__nodeID, nativeViewTag);\n }\n}\n","import { createAnimatedSet as set } from '../core/AnimatedSet';\nimport interpolate from '../derived/interpolate';\nimport InternalAnimatedValue from './InternalAnimatedValue';\nimport { Platform } from 'react-native';\nimport { evaluateOnce } from '../derived/evaluateOnce';\nimport ReanimatedModule from '../../ReanimatedModule';\nimport { val } from '../val';\n\n// Animated value wrapped with extra methods for omit cycle of dependencies\nexport default class AnimatedValue extends InternalAnimatedValue {\n setValue(value) {\n this.__detachAnimation(this._animation);\n if (\n Platform.OS === 'web' ||\n Platform.OS === 'windows' ||\n Platform.OS === 'macos'\n ) {\n this._updateValue(val(value));\n } else {\n if (ReanimatedModule.setValue && typeof value === 'number') {\n // FIXME Remove it after some time\n // For OTA-safety\n // FIXME handle setting value with a node\n ReanimatedModule.setValue(this.__nodeID, value);\n } else {\n evaluateOnce(set(this, value), this);\n }\n }\n }\n\n toString() {\n return `AnimatedValue, id: ${this.__nodeID}`;\n }\n\n interpolate(config) {\n return interpolate(this, config);\n }\n}\n","import AnimatedNode from './AnimatedNode';\nimport invariant from 'invariant';\nimport { val } from '../val';\nimport { adapt } from '../core/AnimatedBlock';\n\nclass AnimatedSet extends AnimatedNode {\n _what;\n _value;\n\n constructor(what, value) {\n invariant(\n what instanceof AnimatedNode,\n `Reanimated: Animated.set first argument should be of type AnimatedNode but got ${what}`\n );\n invariant(\n value instanceof AnimatedNode,\n `Reanimated: Animated.set second argument should be of type AnimatedNode, String or Number but got ${value}`\n );\n super({ type: 'set', what, value }, [value]);\n invariant(!what._constant, 'Value to be set cannot be constant');\n this._what = what;\n this._value = value;\n }\n\n toString() {\n return `AnimatedSet, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n const newValue = val(this._value);\n this._what.setValue(newValue);\n return newValue;\n }\n}\n\nexport function createAnimatedSet(what, value) {\n return new AnimatedSet(what, adapt(value));\n}\n","export function val(v) {\n return v && v.__getValue ? v.__getValue() : v || 0;\n}\n","import invariant from 'invariant';\nimport { val } from '../val';\nimport AnimatedNode from './AnimatedNode';\nimport InternalAnimatedValue from './InternalAnimatedValue';\n\nclass AnimatedBlock extends AnimatedNode {\n _array;\n\n constructor(array) {\n invariant(\n array.every((el) => el instanceof AnimatedNode),\n `Reanimated: Animated.block node argument should be an array with elements of type AnimatedNode. One or more of them are not AnimatedNodes`\n );\n super({ type: 'block', block: array }, array);\n this._array = array;\n }\n\n toString() {\n return `AnimatedBlock, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n let result;\n this._array.forEach((node) => {\n result = val(node);\n });\n return result;\n }\n}\n\nexport function createAnimatedBlock(items) {\n return adapt(items);\n}\n\nfunction nodify(v) {\n if (typeof v === 'object' && v?.__isProxy) {\n if (!v.__val) {\n v.__val = new InternalAnimatedValue(0);\n }\n return v.__val;\n }\n // TODO: cache some typical static values (e.g. 0, 1, -1)\n return v instanceof AnimatedNode\n ? v\n : InternalAnimatedValue.valueForConstant(v);\n}\n\nexport function adapt(v) {\n return Array.isArray(v)\n ? new AnimatedBlock(v.map((node) => adapt(node)))\n : nodify(v);\n}\n","import AnimatedNode from './AnimatedNode';\nimport { val } from '../val';\nimport ReanimatedModule from '../../ReanimatedModule';\nimport invariant from 'invariant';\n\nfunction sanitizeValue(value) {\n return value === null || value === undefined || typeof value === 'string'\n ? value\n : Number(value);\n}\n\nconst CONSTANT_VALUES = new Map();\n\nfunction initializeConstantValues() {\n if (CONSTANT_VALUES.size !== 0) {\n return;\n }\n [0, -1, 1, -2, 2].forEach((v) =>\n CONSTANT_VALUES.set(v, new InternalAnimatedValue(v, true))\n );\n}\n\n/**\n * This class has been made internal in order to omit dependencies' cycles which\n * were caused by imperative setValue and interpolate – they are currently exposed with AnimatedValue.js\n */\nexport default class InternalAnimatedValue extends AnimatedNode {\n static valueForConstant(number) {\n initializeConstantValues();\n return (\n CONSTANT_VALUES.get(number) || new InternalAnimatedValue(number, true)\n );\n }\n\n constructor(value, constant = false) {\n invariant(value !== null, 'Animated.Value cannot be set to the null');\n super({ type: 'value', value: sanitizeValue(value) });\n this._startingValue = this._value = value;\n this._animation = null;\n this._constant = constant;\n }\n\n __detach() {\n if (!this._constant) {\n if (ReanimatedModule.getValue) {\n ReanimatedModule.getValue(\n this.__nodeID,\n (val) => (this.__nodeConfig.value = val)\n );\n } else {\n this.__nodeConfig.value = this.__getValue();\n }\n }\n this.__detachAnimation(this._animation);\n super.__detach();\n }\n\n __detachAnimation(animation) {\n animation && animation.__detach();\n if (this._animation === animation) {\n this._animation = null;\n }\n }\n\n __attachAnimation(animation) {\n this.__detachAnimation(this._animation);\n this._animation = animation;\n }\n\n __onEvaluate() {\n if (this.__inputNodes && this.__inputNodes.length) {\n this.__inputNodes.forEach(val);\n }\n return this._value;\n }\n\n // AnimatedValue will override this method to modify the value of a native node.\n setValue(value) {\n this.__detachAnimation(this._animation);\n this._updateValue(value);\n }\n\n _updateValue(value) {\n this._value = value;\n this.__forceUpdateCache(value);\n }\n}\n","import {\n lessThan,\n multiply,\n sub,\n add,\n divide,\n greaterThan,\n lessOrEq,\n eq,\n} from '../operators';\nimport invariant from 'invariant';\n\nimport AnimatedNode from '../core/AnimatedNode';\nimport { createAnimatedCond as cond } from '../core/AnimatedCond';\nimport { createAnimatedFunction as proc } from '../core/AnimatedFunction';\n\nconst interpolateInternalSingleProc = proc(function (\n value,\n inS,\n inE,\n outS,\n outE\n) {\n const progress = divide(sub(value, inS), sub(inE, inS));\n // logic below was made in order to provide a compatibility witn an Animated API\n const resultForNonZeroRange = add(outS, multiply(progress, sub(outE, outS)));\n const result = cond(\n eq(inS, inE),\n cond(lessOrEq(value, inS), outS, outE),\n resultForNonZeroRange\n );\n return result;\n});\n\nfunction interpolateInternalSingle(value, inputRange, outputRange, offset) {\n const inS = inputRange[offset];\n const inE = inputRange[offset + 1];\n const outS = outputRange[offset];\n const outE = outputRange[offset + 1];\n return interpolateInternalSingleProc(value, inS, inE, outS, outE);\n}\n\nfunction interpolateInternal(value, inputRange, outputRange, offset = 0) {\n if (inputRange.length - offset === 2) {\n return interpolateInternalSingle(value, inputRange, outputRange, offset);\n }\n return cond(\n lessThan(value, inputRange[offset + 1]),\n interpolateInternalSingle(value, inputRange, outputRange, offset),\n interpolateInternal(value, inputRange, outputRange, offset + 1)\n );\n}\n\nexport const Extrapolate = {\n EXTEND: 'extend',\n CLAMP: 'clamp',\n IDENTITY: 'identity',\n};\n\nfunction checkNonDecreasing(name, arr) {\n for (let i = 1; i < arr.length; ++i) {\n // We can't validate animated nodes in JS.\n if (arr[i] instanceof AnimatedNode || arr[i - 1] instanceof AnimatedNode)\n continue;\n invariant(\n arr[i] >= arr[i - 1],\n '%s must be monotonically non-decreasing. (%s)',\n name,\n arr\n );\n }\n}\n\nfunction checkMinElements(name, arr) {\n invariant(\n arr.length >= 2,\n '%s must have at least 2 elements. (%s)',\n name,\n arr\n );\n}\n\nfunction checkValidNumbers(name, arr) {\n for (let i = 0; i < arr.length; i++) {\n // We can't validate animated nodes in JS.\n if (arr[i] instanceof AnimatedNode || typeof arr[i] !== 'number') continue;\n invariant(\n Number.isFinite(arr[i]),\n '%s cannot include %s. (%s)',\n name,\n arr[i],\n arr\n );\n }\n}\n\nfunction convertToRadians(outputRange) {\n for (const [i, value] of outputRange.entries()) {\n if (typeof value === 'string' && value.endsWith('deg')) {\n outputRange[i] = parseFloat(value) * (Math.PI / 180);\n } else if (typeof value === 'string' && value.endsWith('rad')) {\n outputRange[i] = parseFloat(value);\n }\n }\n}\n\nexport default function interpolate(value, config) {\n const {\n inputRange,\n outputRange,\n extrapolate = Extrapolate.EXTEND,\n extrapolateLeft,\n extrapolateRight,\n } = config;\n\n checkMinElements('inputRange', inputRange);\n checkValidNumbers('inputRange', inputRange);\n checkMinElements('outputRange', outputRange);\n checkValidNumbers('outputRange', outputRange);\n checkNonDecreasing('inputRange', inputRange);\n invariant(\n inputRange.length === outputRange.length,\n 'inputRange and outputRange must be the same length.'\n );\n\n convertToRadians(outputRange);\n const left = extrapolateLeft || extrapolate;\n const right = extrapolateRight || extrapolate;\n let output = interpolateInternal(value, inputRange, outputRange);\n\n if (left === Extrapolate.EXTEND) {\n } else if (left === Extrapolate.CLAMP) {\n output = cond(lessThan(value, inputRange[0]), outputRange[0], output);\n } else if (left === Extrapolate.IDENTITY) {\n output = cond(lessThan(value, inputRange[0]), value, output);\n }\n\n if (right === Extrapolate.EXTEND) {\n } else if (right === Extrapolate.CLAMP) {\n output = cond(\n greaterThan(value, inputRange[inputRange.length - 1]),\n outputRange[outputRange.length - 1],\n output\n );\n } else if (right === Extrapolate.IDENTITY) {\n output = cond(\n greaterThan(value, inputRange[inputRange.length - 1]),\n value,\n output\n );\n }\n\n return output;\n}\n","import { createAnimatedOperator } from './core/AnimatedOperator';\n\nconst operator = createAnimatedOperator;\n\nexport const add = operator('add');\nexport const sub = operator('sub');\nexport const multiply = operator('multiply');\nexport const divide = operator('divide');\nexport const pow = operator('pow');\nexport const modulo = operator('modulo');\nexport const sqrt = operator('sqrt');\nexport const log = operator('log');\nexport const sin = operator('sin');\nexport const cos = operator('cos');\nexport const exp = operator('exp');\nexport const round = operator('round');\nexport const lessThan = operator('lessThan');\nexport const eq = operator('eq');\nexport const greaterThan = operator('greaterThan');\nexport const lessOrEq = operator('lessOrEq');\nexport const greaterOrEq = operator('greaterOrEq');\nexport const neq = operator('neq');\nexport const and = operator('and');\nexport const or = operator('or');\nexport const defined = operator('defined');\nexport const not = operator('not');\nexport const tan = operator('tan');\nexport const acos = operator('acos');\nexport const asin = operator('asin');\nexport const atan = operator('atan');\nexport const abs = operator('abs');\nexport const ceil = operator('ceil');\nexport const floor = operator('floor');\nexport const max = operator('max');\nexport const min = operator('min');\n","import AnimatedNode from './AnimatedNode';\nimport { val } from '../val';\n\nimport invariant from 'invariant';\nimport { adapt } from '../core/AnimatedBlock';\n\nfunction reduce(fn) {\n return (input) => input.reduce((a, b) => fn(val(a), val(b)));\n}\n\nfunction reduceFrom(fn, initialValue) {\n return (input) => input.reduce((a, b) => fn(val(a), val(b)), initialValue);\n}\n\nfunction infix(fn) {\n return (input) => fn(val(input[0]), val(input[1]));\n}\n\nfunction single(fn) {\n return (input) => fn(val(input[0]));\n}\n\nconst OPERATIONS = {\n // arithmetic\n add: reduce((a, b) => a + b),\n sub: reduce((a, b) => a - b),\n multiply: reduce((a, b) => a * b),\n divide: reduce((a, b) => a / b),\n pow: reduce((a, b) => Math.pow(a, b)),\n modulo: reduce((a, b) => ((a % b) + b) % b),\n sqrt: single((a) => Math.sqrt(a)),\n log: single((a) => Math.log(a)),\n sin: single((a) => Math.sin(a)),\n cos: single((a) => Math.cos(a)),\n tan: single((a) => Math.tan(a)),\n acos: single((a) => Math.acos(a)),\n asin: single((a) => Math.asin(a)),\n atan: single((a) => Math.atan(a)),\n exp: single((a) => Math.exp(a)),\n round: single((a) => Math.round(a)),\n abs: single((a) => Math.abs(a)),\n ceil: single((a) => Math.ceil(a)),\n floor: single((a) => Math.floor(a)),\n max: reduce((a, b) => Math.max(a, b)),\n min: reduce((a, b) => Math.min(a, b)),\n\n // logical\n and: reduceFrom((a, b) => a && b, true),\n or: reduceFrom((a, b) => a || b, false),\n not: single((a) => !a),\n defined: single((a) => a !== null && a !== undefined && !isNaN(a)),\n\n // comparing\n lessThan: infix((a, b) => a < b),\n /* eslint-disable-next-line eqeqeq */\n eq: infix((a, b) => a == b),\n greaterThan: infix((a, b) => a > b),\n lessOrEq: infix((a, b) => a <= b),\n greaterOrEq: infix((a, b) => a >= b),\n /* eslint-disable-next-line eqeqeq */\n neq: infix((a, b) => a != b),\n};\n\nclass AnimatedOperator extends AnimatedNode {\n _input;\n _op;\n _operation;\n\n constructor(operator, input) {\n invariant(\n typeof operator === 'string',\n `Reanimated: Animated.operator node first argument should be of type String, but got: ${operator}`\n );\n invariant(\n input.every(\n (el) =>\n el instanceof AnimatedNode ||\n typeof el === 'string' ||\n typeof el === 'number'\n ),\n `Reanimated: Animated.operator node second argument should be one or more of type AnimatedNode, String or Number but got ${input}`\n );\n super({ type: 'op', op: operator, input }, input);\n this._op = operator;\n this._input = input;\n }\n\n toString() {\n return `AnimatedOperator, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n if (!this._operation) {\n this._operation = OPERATIONS[this._op];\n invariant(this._operation, `Illegal operator '%s'`, this._op);\n }\n return this._operation(this._input);\n }\n}\n\nexport function createAnimatedOperator(name) {\n return (...args) => new AnimatedOperator(name, args.map(adapt));\n}\n","import invariant from 'invariant';\nimport { adapt } from '../core/AnimatedBlock';\nimport { val } from '../val';\nimport AnimatedNode from './AnimatedNode';\n\nclass AnimatedCond extends AnimatedNode {\n _condition;\n _ifBlock;\n _elseBlock;\n\n constructor(condition, ifBlock, elseBlock) {\n invariant(\n condition instanceof AnimatedNode,\n `Reanimated: Animated.cond node first argument should be of type AnimatedNode but got ${condition}`\n );\n invariant(\n ifBlock instanceof AnimatedNode,\n `Reanimated: Animated.cond node second argument should be of type AnimatedNode but got ${ifBlock}`\n );\n invariant(\n elseBlock instanceof AnimatedNode || elseBlock === undefined,\n `Reanimated: Animated.cond node third argument should be of type AnimatedNode or should be undefined but got ${elseBlock}`\n );\n super(\n {\n type: 'cond',\n cond: condition,\n ifBlock,\n elseBlock,\n },\n [condition, ifBlock, elseBlock]\n );\n this._condition = condition;\n this._ifBlock = ifBlock;\n this._elseBlock = elseBlock;\n }\n\n toString() {\n return `AnimatedCond, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n if (val(this._condition)) {\n return val(this._ifBlock);\n } else {\n return this._elseBlock !== undefined ? val(this._elseBlock) : undefined;\n }\n }\n}\n\nexport function createAnimatedCond(cond, ifBlock, elseBlock) {\n return new AnimatedCond(\n adapt(cond),\n adapt(ifBlock),\n elseBlock === undefined ? undefined : adapt(elseBlock)\n );\n}\n","import AnimatedNode from './AnimatedNode';\nimport { createAnimatedCallFunc } from './AnimatedCallFunc';\nimport { createAnimatedParam } from './AnimatedParam';\nimport { val } from '../val';\nimport invariant from 'invariant';\n\nclass AnimatedFunction extends AnimatedNode {\n _what;\n\n constructor(what, ...params) {\n invariant(\n what instanceof AnimatedNode,\n `Reanimated: AnimatedCallFunc 'what' argument should be of type AnimatedNode but got ${what}`\n );\n super(\n {\n type: 'func',\n what,\n },\n [what, ...params]\n );\n this._what = what;\n this.__attach();\n }\n\n __onEvaluate() {\n return val(this._what);\n }\n\n toString() {\n return `AnimatedFunction, id: ${this.__nodeID}`;\n }\n}\n\nexport function createAnimatedFunction(cb) {\n const params = new Array(cb.length);\n for (let i = 0; i < params.length; i++) {\n params[i] = createAnimatedParam();\n }\n // eslint-disable-next-line standard/no-callback-literal\n const what = cb(...params);\n const func = new AnimatedFunction(what, ...params);\n return (...args) => {\n if (args.length !== params.length) {\n throw new Error(\n 'Parameter mismatch when calling reanimated function. Expected ' +\n params.length +\n ' parameters, got ' +\n args.length +\n '.'\n );\n }\n return createAnimatedCallFunc(func, args, params);\n };\n}\n","import AnimatedNode, { getCallID, setCallID } from './AnimatedNode';\nimport { adapt } from './AnimatedBlock';\nimport { val } from '../val';\nimport invariant from 'invariant';\n\nclass AnimatedCallFunc extends AnimatedNode {\n _previousCallID;\n _what;\n _args;\n _params;\n constructor(what, args, params) {\n invariant(\n what instanceof AnimatedNode,\n `Reanimated: AnimatedCallFunc 'what' argument should be of type AnimatedNode but got ${what}`\n );\n invariant(\n args.every((el) => el instanceof AnimatedNode),\n `Reanimated: every AnimatedCallFunc 'args' argument should be of type AnimatedNode but got ${args}`\n );\n invariant(\n params.every((el) => el instanceof AnimatedNode),\n `Reanimated: every AnimatedCallFunc 'params' argument should be of type AnimatedNode but got ${params}`\n );\n super(\n {\n type: 'callfunc',\n what,\n args,\n params,\n },\n [...args]\n );\n this._what = what;\n this._args = args;\n this._params = params;\n }\n\n toString() {\n return `AnimatedCallFunc, id: ${this.__nodeID}`;\n }\n\n beginContext() {\n this._previousCallID = getCallID();\n setCallID(getCallID() + '/' + this.__nodeID);\n\n this._params.forEach((param, index) => {\n param.beginContext(this._args[index], this._previousCallID);\n });\n }\n\n endContext() {\n this._params.forEach((param) => {\n param.endContext();\n });\n setCallID(this._previousCallID);\n }\n\n __onEvaluate() {\n this.beginContext();\n const value = val(this._what);\n this.endContext();\n return value;\n }\n}\n\nexport function createAnimatedCallFunc(proc, args, params) {\n return new AnimatedCallFunc(\n proc,\n args.map((p) => adapt(p)),\n params\n );\n}\n","import invariant from 'invariant';\nimport AnimatedNode, { getCallID, setCallID } from './AnimatedNode';\nimport AnimatedClock from './AnimatedClock';\nimport { val } from '../val';\n\nexport class AnimatedParam extends AnimatedNode {\n argsStack = [];\n _prevCallID;\n\n constructor() {\n super({ type: 'param' }, []);\n this.__attach();\n }\n\n beginContext(ref, prevCallID) {\n this._prevCallID = prevCallID;\n this.argsStack.push(ref);\n }\n\n endContext() {\n this.argsStack.pop();\n }\n\n _getTopNode() {\n if (this.argsStack.length === 0)\n throw new Error(`param: Invocation failed because argsStack is empty`);\n const top = this.argsStack[this.argsStack.length - 1];\n return top;\n }\n\n setValue(value) {\n const top = this._getTopNode();\n if (top.setValue) {\n const callID = getCallID();\n setCallID(this._prevCallID);\n top.setValue(value);\n setCallID(callID);\n } else {\n throw new Error(\n `param: setValue(${value}) failed because the top element has no known method for updating it's current value.`\n );\n }\n }\n\n __onEvaluate() {\n const callID = getCallID();\n setCallID(this._prevCallID);\n const top = this._getTopNode();\n const value = val(top);\n setCallID(callID);\n return value;\n }\n\n start() {\n const node = this._getTopNode();\n invariant(\n node instanceof AnimatedClock || node instanceof AnimatedParam,\n `param: top node should be of type AnimatedClock but got ${node}`\n );\n node.start();\n }\n\n stop() {\n const node = this._getTopNode();\n invariant(\n node instanceof AnimatedClock || node instanceof AnimatedParam,\n `param: top node should be of type AnimatedClock but got ${node}`\n );\n node.stop();\n }\n\n isRunning() {\n const node = this._getTopNode();\n\n if (node instanceof AnimatedParam) {\n return node.isRunning();\n }\n invariant(\n node instanceof AnimatedClock,\n `param: top node should be of type AnimatedClock but got ${node}`\n );\n return node.isStarted();\n }\n}\n\nexport function createAnimatedParam() {\n return new AnimatedParam();\n}\n","import InternalAnimatedValue from './InternalAnimatedValue';\nimport AnimatedNode from './AnimatedNode';\nimport { val } from '../val';\n\nclass AnimatedMainClock extends InternalAnimatedValue {\n _frameCallback;\n\n constructor() {\n super({ type: 'MAIN_CLOCK' });\n }\n\n __onEvaluate() {\n return +new Date();\n }\n\n _runFrame = () => {\n this._updateValue(0);\n if (this.__children.length > 0) {\n this._frameCallback = requestAnimationFrame(this._runFrame);\n }\n };\n\n __attach() {\n super.__attach();\n if (!this._frameCallback) {\n this._frameCallback = requestAnimationFrame(this._runFrame);\n }\n }\n\n __detach() {\n if (this._frameCallback) {\n cancelAnimationFrame(this._frameCallback);\n this._frameCallback = null;\n }\n super.__detach();\n }\n}\n\nconst mainClock = new AnimatedMainClock();\n\nexport default class AnimatedClock extends AnimatedNode {\n _started;\n _attached;\n\n constructor() {\n super({ type: 'clock' });\n }\n\n toString() {\n return `AnimatedClock, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n return val(mainClock);\n }\n\n __attach() {\n super.__attach();\n if (this._started && !this._attached) {\n mainClock.__addChild(this);\n }\n this._attached = true;\n }\n\n __detach() {\n if (this._started && this._attached) {\n mainClock.__removeChild(this);\n }\n this._attached = false;\n super.__detach();\n }\n\n start() {\n if (!this._started && this._attached) {\n mainClock.__addChild(this);\n }\n this._started = true;\n }\n\n stop() {\n if (this._started && this._attached) {\n mainClock.__removeChild(this);\n }\n this._started = false;\n }\n\n isStarted() {\n return this._started;\n }\n}\n","import AnimatedValue from '../core/InternalAnimatedValue';\nimport { createAnimatedSet as set } from '../core/AnimatedSet';\nimport { createAnimatedCall as call } from '../core/AnimatedCall';\nimport { createAnimatedAlways as always } from '../core/AnimatedAlways';\nimport { createAnimatedCond as cond } from '../core/AnimatedCond';\n\n/**\n * evaluate given node and notify children\n * @param node - node to be evaluated\n * @param input - nodes (or one node) representing values which states input for node.\n * @param callback - after callback\n */\n\nexport function evaluateOnce(node, input = [], callback) {\n if (!Array.isArray(input)) {\n input = [input];\n }\n const done = new AnimatedValue(0);\n const evalNode = cond(\n done,\n 0,\n call([node, set(done, 1)], () => {\n callback && callback();\n for (let i = 0; i < input.length; i++) {\n input[i].__removeChild(alwaysNode);\n alwaysNode.__detach();\n }\n })\n );\n const alwaysNode = always(evalNode);\n for (let i = 0; i < input.length; i++) {\n input[i].__addChild(alwaysNode);\n alwaysNode.__attach();\n }\n}\n","import invariant from 'invariant';\nimport ReanimatedEventEmitter from '../../ReanimatedEventEmitter';\nimport { val } from '../val';\nimport AnimatedNode from './AnimatedNode';\n\nconst NODE_MAPPING = new Map();\n\nfunction listener(data) {\n const node = NODE_MAPPING.get(data.id);\n node && node._callback(data.args);\n}\n\nclass AnimatedCall extends AnimatedNode {\n _callback;\n _args;\n\n constructor(args, jsFunction) {\n invariant(\n args.every((el) => el instanceof AnimatedNode),\n `Reanimated: Animated.call node args should be an array with elements of type AnimatedNode. One or more of them are not AnimatedNodes`\n );\n super({ type: 'call', input: args }, args);\n this._callback = jsFunction;\n this._args = args;\n }\n\n toString() {\n return `AnimatedCall, id: ${this.__nodeID}`;\n }\n\n __attach() {\n super.__attach();\n NODE_MAPPING.set(this.__nodeID, this);\n if (NODE_MAPPING.size === 1) {\n ReanimatedEventEmitter.addListener('onReanimatedCall', listener);\n }\n }\n\n __detach() {\n NODE_MAPPING.delete(this.__nodeID);\n if (NODE_MAPPING.size === 0) {\n ReanimatedEventEmitter.removeAllListeners('onReanimatedCall');\n }\n super.__detach();\n }\n\n __onEvaluate() {\n this._callback(this._args.map(val));\n return 0;\n }\n}\n\nexport function createAnimatedCall(args, func) {\n return new AnimatedCall(args, func);\n}\n","import AnimatedNode from './AnimatedNode';\nimport invariant from 'invariant';\nimport { val } from '../val';\n\nclass AnimatedAlways extends AnimatedNode {\n _what;\n\n constructor(what) {\n invariant(\n what instanceof AnimatedNode,\n `Reanimated: Animated.always node argument should be of type AnimatedNode but got ${what}`\n );\n super({ type: 'always', what }, [what]);\n this._what = what;\n }\n\n toString() {\n return `AnimatedAlways, id: ${this.__nodeID}`;\n }\n\n update() {\n this.__getValue();\n }\n\n __onEvaluate() {\n val(this._what);\n return 0;\n }\n}\n\nexport function createAnimatedAlways(item) {\n return new AnimatedAlways(item);\n}\n","// JSC on Android and iOS 8 & 9 does not support proxies.\n// The below workaround provides a proxy-like functionality for event data by\n// creating an object which contains predefined fields for the most commonly\n// used event attributes. If your app uses even attribute which is not listed\n// here please submit a PR to add that and we will merge it right away\nexport default function createEventObjectProxyPolyfill() {\n const nodesMap = {\n // Gesture handlers-related event\n translationX: {},\n translationY: {},\n state: {},\n oldState: {},\n absoluteX: {},\n absoluteY: {},\n x: {},\n y: {},\n velocityX: {},\n velocityY: {},\n scale: {},\n focalX: {},\n focalY: {},\n rotation: {},\n anchorX: {},\n anchorY: {},\n velocity: {},\n numberOfPointers: {},\n // onLayour-related event\n layout: { x: {}, y: {}, width: {}, height: {} },\n // ScrollView event\n contentOffset: { y: {}, x: {} },\n layoutMeasurement: { width: {}, height: {} },\n contentSize: { width: {}, height: {} },\n zoomScale: {},\n contentInset: { right: {}, top: {}, left: {}, bottom: {} },\n };\n const traverse = (obj) => {\n for (const key in obj) {\n traverse(obj[key]);\n Object.assign(obj[key], { __isProxy: true });\n }\n };\n traverse(nodesMap);\n return nodesMap;\n}\n","import { findNodeHandle } from 'react-native';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedEvent from './AnimatedEvent';\nimport { createOrReuseStyleNode } from './AnimatedStyle';\n\nimport invariant from 'invariant';\nimport deepEqual from 'lodash.isequal';\nimport { val } from '../val';\n\nfunction sanitizeProps(inputProps) {\n let props;\n for (const key in inputProps) {\n const value = inputProps[key];\n if (value instanceof AnimatedNode && !(value instanceof AnimatedEvent)) {\n if (props === undefined) {\n props = {};\n }\n props[key] = value.__nodeID;\n }\n }\n return props;\n}\n\nexport function createOrReusePropsNode(props, callback, oldNode) {\n if (props.style) {\n const style = createOrReuseStyleNode(\n props.style,\n oldNode && oldNode._props.style\n );\n if (style) {\n props = {\n ...props,\n style,\n };\n }\n }\n const config = sanitizeProps(props);\n if (config === undefined) {\n return undefined;\n }\n if (oldNode && deepEqual(config, oldNode._config)) {\n return oldNode;\n }\n return new AnimatedProps(props, config, callback);\n}\n\nclass AnimatedProps extends AnimatedNode {\n constructor(props, config, callback) {\n super(\n { type: 'props', props: config },\n Object.values(props).filter((n) => !(n instanceof AnimatedEvent))\n );\n this._config = config;\n this._props = props;\n this._callback = callback;\n this.__attach();\n }\n\n toString() {\n return `AnimatedProps, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n const props = {};\n for (const key in this._props) {\n const value = this._props[key];\n if (value instanceof AnimatedNode) {\n props[key] = value.__getValue();\n }\n }\n return props;\n }\n\n __detach() {\n const nativeViewTag = findNodeHandle(this._animatedView);\n invariant(\n nativeViewTag != null,\n 'Unable to locate attached view in the native tree'\n );\n this._disconnectAnimatedView(nativeViewTag);\n super.__detach();\n }\n\n update() {\n this._callback();\n\n if (!this._animatedView) {\n return;\n }\n\n val(this);\n }\n\n setNativeView(animatedView) {\n if (this._animatedView === animatedView) {\n return;\n }\n this._animatedView = animatedView;\n\n const nativeViewTag = findNodeHandle(this._animatedView);\n invariant(\n nativeViewTag != null,\n 'Unable to locate attached view in the native tree'\n );\n this._connectAnimatedView(nativeViewTag);\n }\n}\n","import { StyleSheet } from 'react-native';\n\nimport AnimatedNode from './AnimatedNode';\nimport { createOrReuseTransformNode } from './AnimatedTransform';\n\nimport deepEqual from 'lodash.isequal';\n\nfunction sanitizeStyle(inputStyle) {\n let style;\n for (const key in inputStyle) {\n const value = inputStyle[key];\n if (value instanceof AnimatedNode) {\n if (style === undefined) {\n style = {};\n }\n style[key] = value.__nodeID;\n }\n }\n return style;\n}\n\nexport function createOrReuseStyleNode(style, oldNode) {\n style = StyleSheet.flatten(style) || {};\n if (style.transform) {\n const transform = createOrReuseTransformNode(\n style.transform,\n oldNode && oldNode._style.transform\n );\n if (transform) {\n style = {\n ...style,\n transform,\n };\n }\n }\n const config = sanitizeStyle(style);\n if (config === undefined) {\n return undefined;\n }\n if (oldNode && deepEqual(config, oldNode._config)) {\n return oldNode;\n }\n return new AnimatedStyle(style, config);\n}\n\n/**\n * AnimatedStyle should never be directly instantiated, use createOrReuseStyleNode\n * in order to make a new instance of this node.\n */\nexport default class AnimatedStyle extends AnimatedNode {\n constructor(style, config) {\n super({ type: 'style', style: config }, Object.values(style));\n this._config = config;\n this._style = style;\n }\n\n toString() {\n return `AnimatedStyle, id: ${this.__nodeID}`;\n }\n\n _walkStyleAndGetAnimatedValues(style) {\n const updatedStyle = {};\n for (const key in style) {\n const value = style[key];\n if (value instanceof AnimatedNode) {\n updatedStyle[key] = value.__getValue();\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n // Support animating nested values (for example: shadowOffset.height)\n updatedStyle[key] = this._walkStyleAndGetAnimatedValues(value);\n }\n }\n return updatedStyle;\n }\n\n __onEvaluate() {\n return this._walkStyleAndGetAnimatedValues(this._style);\n }\n}\n","import AnimatedNode from './AnimatedNode';\n\nimport deepEqual from 'lodash.isequal';\n\nfunction sanitizeTransform(inputTransform) {\n const outputTransform = [];\n let hasAnimatedTransform = false;\n inputTransform.forEach((transform) => {\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n hasAnimatedTransform = true;\n outputTransform.push({\n property: key,\n nodeID: value.__nodeID,\n });\n } else {\n outputTransform.push({\n property: key,\n value,\n });\n }\n }\n });\n return hasAnimatedTransform ? outputTransform : undefined;\n}\n\nfunction extractAnimatedParentNodes(transform) {\n const parents = [];\n transform.forEach((transform) => {\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n parents.push(value);\n }\n }\n });\n return parents;\n}\n\nexport function createOrReuseTransformNode(transform, oldNode) {\n const config = sanitizeTransform(transform);\n if (config === undefined) {\n return undefined;\n }\n if (oldNode && deepEqual(config, oldNode._config)) {\n return oldNode;\n }\n return new AnimatedTransform(transform, config);\n}\n\nclass AnimatedTransform extends AnimatedNode {\n constructor(transform, config) {\n super(\n { type: 'transform', transform: config },\n extractAnimatedParentNodes(transform)\n );\n this._config = config;\n this._transform = transform;\n }\n\n toString() {\n return `AnimatedTransform, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n return this._transform.map((transform) => {\n const result = {};\n for (const key in transform) {\n const value = transform[key];\n if (value instanceof AnimatedNode) {\n result[key] = value.__getValue();\n }\n }\n return result;\n });\n }\n}\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","import { NativeEvent } from './commonTypes';\nimport NativeReanimatedModule from './NativeReanimated';\n\nfunction jsListener>(\n eventName: string,\n handler: (event: T) => void\n) {\n return (evt: T) => {\n handler({ ...evt.nativeEvent, eventName });\n };\n}\n\nexport default class WorkletEventHandler> {\n worklet: (event: T) => void;\n eventNames: string[];\n reattachNeeded: boolean;\n listeners: Record void>;\n viewTag: number | undefined;\n registrations: string[];\n constructor(worklet: (event: T) => void, eventNames: string[] = []) {\n this.worklet = worklet;\n this.eventNames = eventNames;\n this.reattachNeeded = false;\n this.listeners = {};\n this.viewTag = undefined;\n this.registrations = [];\n\n if (!NativeReanimatedModule.native) {\n this.listeners = eventNames.reduce(\n (acc: Record void>, eventName: string) => {\n acc[eventName] = jsListener(eventName, worklet);\n return acc;\n },\n {}\n );\n }\n }\n\n updateWorklet(newWorklet: (event: T) => void): void {\n this.worklet = newWorklet;\n this.reattachNeeded = true;\n }\n\n registerForEvents(viewTag: number, fallbackEventName?: string): void {\n this.viewTag = viewTag;\n this.registrations = this.eventNames.map((eventName) =>\n NativeReanimatedModule.registerEventHandler(\n viewTag + eventName,\n this.worklet\n )\n );\n if (this.registrations.length === 0 && fallbackEventName) {\n this.registrations.push(\n NativeReanimatedModule.registerEventHandler(\n viewTag + fallbackEventName,\n this.worklet\n )\n );\n }\n }\n\n unregisterFromEvents(): void {\n this.registrations.forEach((id) =>\n NativeReanimatedModule.unregisterEventHandler(id)\n );\n this.registrations = [];\n }\n}\n","import reanimatedJS from '../js-reanimated';\nimport { shouldBeUseWeb } from '../PlatformChecker';\nimport { Platform } from 'react-native';\nimport { NativeReanimated } from './NativeReanimated';\n\nlet exportedModule;\nif (shouldBeUseWeb()) {\n exportedModule = reanimatedJS;\n} else {\n exportedModule = new NativeReanimated();\n if (exportedModule.useOnlyV1 && Platform.OS === 'android') {\n console.warn(\n `If you want to use Reanimated 2 then go through our installation steps https://docs.swmansion.com/react-native-reanimated/docs/installation`\n );\n }\n}\n\nexport default exportedModule as NativeReanimated;\n","import JSReanimated from './JSReanimated';\nimport { shouldBeUseWeb } from '../PlatformChecker';\nimport { AnimatedStyle, StyleProps } from '../commonTypes';\n\nconst reanimatedJS = new JSReanimated();\n\ninterface JSReanimatedComponent {\n previousStyle: StyleProps;\n setNativeProps: (style: StyleProps) => void;\n props: Record;\n _touchableNode: {\n setAttribute: (key: string, props: unknown) => void;\n };\n}\n\nif (shouldBeUseWeb()) {\n global._frameTimestamp = null;\n global._setGlobalConsole = (_val) => {\n // noop\n };\n global._measure = () => {\n console.warn(\n \"[Reanimated] You can't use 'measue' method with Chrome Debugger or with web version\"\n );\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n pageX: 0,\n pageY: 0,\n };\n };\n global._scrollTo = () => {\n console.warn(\n \"[Reanimated] You can't use 'scrollTo' method with Chrome Debugger or with web version\"\n );\n };\n global._setGestureState = () => {\n console.warn(\n \"[Reanimated] You can't use 'setGestureState' method with Chrome Debugger or with web version\"\n );\n };\n}\n\nexport const _updatePropsJS = (\n updates: StyleProps | AnimatedStyle,\n viewRef: { _component?: JSReanimatedComponent }\n): void => {\n if (viewRef._component) {\n const component = viewRef._component;\n const [rawStyles] = Object.keys(updates).reduce(\n (acc: [StyleProps, AnimatedStyle], key) => {\n const value = updates[key];\n const index = typeof value === 'function' ? 1 : 0;\n acc[index][key] = value;\n return acc;\n },\n [{}, {}]\n );\n\n if (typeof component.setNativeProps === 'function') {\n setNativeProps(component, rawStyles);\n } else if (Object.keys(component.props).length > 0) {\n Object.keys(component.props).forEach((key) => {\n if (!rawStyles[key]) {\n return;\n }\n const dashedKey = key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n component._touchableNode.setAttribute(dashedKey, rawStyles[key]);\n });\n } else {\n console.warn('It is not possible to manipulate component');\n }\n }\n};\n\nconst setNativeProps = (\n component: JSReanimatedComponent,\n style: StyleProps\n): void => {\n const previousStyle = component.previousStyle ? component.previousStyle : {};\n const currentStyle = { ...previousStyle, ...style };\n component.previousStyle = currentStyle;\n component.setNativeProps({ style: currentStyle });\n};\n\nexport default reanimatedJS;\n","import MapperRegistry from './MapperRegistry';\nimport Mapper from './Mapper';\nimport MutableValue from './MutableValue';\nimport { NativeReanimated } from '../NativeReanimated/NativeReanimated';\nimport { Timestamp, NestedObjectValues } from '../commonTypes';\n\nexport default class JSReanimated extends NativeReanimated {\n _valueSetter?: (value: T) => void = undefined;\n\n _renderRequested = false;\n _mapperRegistry: MapperRegistry = new MapperRegistry(this);\n _frames: ((timestamp: Timestamp) => void)[] = [];\n timeProvider: { now: () => number };\n\n constructor() {\n super(false);\n if (process.env.JEST_WORKER_ID) {\n this.timeProvider = { now: () => Date.now() };\n } else {\n this.timeProvider = { now: () => window.performance.now() };\n }\n }\n\n pushFrame(frame: (timestamp: Timestamp) => void): void {\n this._frames.push(frame);\n this.maybeRequestRender();\n }\n\n getTimestamp(): number {\n return this.timeProvider.now();\n }\n\n maybeRequestRender(): void {\n if (!this._renderRequested) {\n this._renderRequested = true;\n\n requestAnimationFrame((_timestampMs) => {\n this._renderRequested = false;\n\n this._onRender(this.getTimestamp());\n });\n }\n }\n\n _onRender(timestampMs: number): void {\n this._mapperRegistry.execute();\n\n const frames = [...this._frames];\n this._frames = [];\n\n for (let i = 0, len = frames.length; i < len; ++i) {\n frames[i](timestampMs);\n }\n\n if (this._mapperRegistry.needRunOnRender) {\n this._mapperRegistry.execute();\n }\n }\n\n installCoreFunctions(valueSetter: (value: T) => void): void {\n this._valueSetter = valueSetter;\n }\n\n makeShareable(value: T): T {\n return value;\n }\n\n makeMutable(value: T): MutableValue {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new MutableValue(value, this._valueSetter!);\n }\n\n makeRemote(object = {}): T {\n return object as T;\n }\n\n startMapper(\n mapper: () => void,\n inputs: NestedObjectValues>[] = [],\n outputs: NestedObjectValues>[] = []\n ): number {\n const instance = new Mapper(this, mapper, inputs, outputs);\n const mapperId = this._mapperRegistry.startMapper(instance);\n this.maybeRequestRender();\n return mapperId;\n }\n\n stopMapper(mapperId: number): void {\n this._mapperRegistry.stopMapper(mapperId);\n }\n\n registerEventHandler(_: string, __: (event: T) => void): string {\n // noop\n return '';\n }\n\n unregisterEventHandler(_: string): void {\n // noop\n }\n\n enableLayoutAnimations() {\n console.warn(\n '[Reanimated] enableLayoutAnimations is not available for WEB yet'\n );\n }\n}\n","import { JSReanimated } from './commonTypes';\nimport Mapper from './Mapper';\n\nexport default class MapperRegistry {\n sortedMappers: Mapper[] = [];\n mappers: Map> = new Map();\n _module: JSReanimated;\n\n updatedSinceLastExecute = false;\n\n constructor(module: JSReanimated) {\n this._module = module;\n }\n\n startMapper(mapper: Mapper): number {\n this.mappers.set(mapper.id, mapper);\n this.updatedSinceLastExecute = true;\n return mapper.id;\n }\n\n stopMapper(id: number): void {\n this.mappers.delete(id);\n this.updatedSinceLastExecute = true;\n }\n\n execute(): void {\n if (this.updatedSinceLastExecute) {\n this.updateOrder();\n this.updatedSinceLastExecute = false;\n }\n\n for (let i = 0, len = this.sortedMappers.length; i < len; ++i) {\n const mapper = this.sortedMappers[i];\n if (mapper.dirty) {\n mapper.execute();\n }\n }\n }\n\n updateOrder(): void {\n const nodes = [...this.mappers.values()].map((mapper) => new Node(mapper));\n\n const mappersById: Record> = {};\n this.mappers.forEach((mapper) => {\n mappersById[mapper.id] = mapper;\n });\n\n // create a graph from array of nodes\n for (let i = 0, nodesLen = nodes.length; i < nodesLen; ++i) {\n const node = nodes[i];\n if (node.mapper.outputs.length === 0) {\n continue;\n }\n for (let j = 0; j < nodesLen; ++j) {\n const restNode = nodes[j];\n if (i === j || restNode.mapper.inputs.length === 0) {\n continue;\n }\n for (\n let outi = 0, outputsLen = node.mapper.outputs.length;\n outi < outputsLen;\n ++outi\n ) {\n for (\n let resti = 0, restLen = restNode.mapper.inputs.length;\n resti < restLen;\n ++resti\n ) {\n if (\n node.mapper.outputs[outi]._id ===\n restNode.mapper.inputs[resti]._id\n ) {\n node.children.push(restNode);\n }\n }\n }\n }\n }\n\n const post: Record = {};\n let postCounter = 1;\n const dfs = (node: Node) => {\n const index = nodes.indexOf(node);\n if (index === -1) {\n // this node has already been handled\n return;\n }\n ++postCounter;\n nodes.splice(index, 1);\n if (node.children.length === 0 && nodes.length > 0) {\n post[node.mapper.id] = postCounter++;\n dfs(nodes[0]);\n return;\n }\n for (let i = 0, len = node.children.length; i < len; ++i) {\n dfs(node.children[i]);\n }\n post[node.mapper.id] = postCounter++;\n };\n\n while (nodes.length) dfs(nodes[0]);\n\n const postArray = Object.keys(post).map((key) => {\n const num = parseInt(key);\n return [num, post[num]];\n });\n postArray.sort((a, b) => {\n return b[1] - a[1];\n });\n\n // clear sorted mappers\n this.sortedMappers = [];\n\n for (let i = 0, len = postArray.length; i < len; ++i) {\n const [id] = postArray[i];\n this.sortedMappers.push(mappersById[id]);\n }\n }\n\n get needRunOnRender(): boolean {\n return this.updatedSinceLastExecute;\n }\n}\n\nclass Node {\n mapper: Mapper;\n children: Node[];\n\n constructor(mapper: Mapper, children = []) {\n this.mapper = mapper;\n this.children = children;\n }\n}\n","import { NestedObjectValues } from '../commonTypes';\nimport { JSReanimated } from './commonTypes';\nimport MutableValue from './MutableValue';\n\nexport default class Mapper {\n static MAPPER_ID = 1;\n id: number;\n inputs: MutableValue[];\n outputs: MutableValue[];\n mapper: () => void;\n\n dirty = true;\n\n constructor(\n module: JSReanimated,\n mapper: () => void,\n inputs: NestedObjectValues>[] = [],\n outputs: NestedObjectValues>[] = []\n ) {\n this.id = Mapper.MAPPER_ID++;\n this.inputs = this.extractMutablesFromArray(inputs);\n this.outputs = this.extractMutablesFromArray(outputs);\n this.mapper = mapper;\n\n const markDirty = () => {\n this.dirty = true;\n module.maybeRequestRender();\n };\n\n this.inputs.forEach((input) => {\n input.addListener(markDirty);\n });\n }\n\n execute(): void {\n this.dirty = false;\n this.mapper();\n }\n\n extractMutablesFromArray(\n array: NestedObjectValues>\n ): MutableValue[] {\n const res: MutableValue[] = [];\n\n function extractMutables(value: NestedObjectValues>) {\n if (value == null) {\n // return;\n } else if (value instanceof MutableValue) {\n res.push(value);\n } else if (Array.isArray(value)) {\n value.forEach((v) => extractMutables(v));\n } else if (typeof value === 'object') {\n Object.keys(value).forEach((key) => {\n extractMutables(value[key]);\n });\n }\n }\n\n extractMutables(array);\n return res;\n }\n}\n","export default class MutableValue {\n static MUTABLE_ID = 1;\n _id: number;\n _value: T;\n _setter: (value: T) => void;\n _animation = null;\n _listeners: (() => void)[] = [];\n\n constructor(value: T, setter: (value: T) => void) {\n this._id = MutableValue.MUTABLE_ID++;\n this._value = value;\n this._setter = setter;\n }\n\n get value(): T {\n return this._value;\n }\n\n set value(nextValue: T) {\n this._setter(nextValue);\n }\n\n // this changes the value finally and is supposed to be called from this._setter\n _setValue(newValue: T): void {\n this._value = newValue;\n this._triggerListener();\n }\n\n addListener(listener: () => void): void {\n this._listeners.push(listener);\n }\n\n _triggerListener(): void {\n for (let i = 0, len = this._listeners.length; i < len; ++i) {\n this._listeners[i]();\n }\n }\n}\n","import { SharedValue } from '../commonTypes';\nimport { Descriptor } from '../hook/commonTypes';\n\nconst InnerNativeModule = global.__reanimatedModuleProxy;\n\nexport class NativeReanimated {\n native: boolean;\n useOnlyV1: boolean;\n\n constructor(native = true) {\n this.native = native;\n this.useOnlyV1 = InnerNativeModule === null;\n }\n\n installCoreFunctions(valueSetter: (value: T) => void): void {\n return InnerNativeModule.installCoreFunctions(valueSetter);\n }\n\n makeShareable(value: T): T {\n return InnerNativeModule.makeShareable(value);\n }\n\n makeMutable(value: T): SharedValue {\n return InnerNativeModule.makeMutable(value);\n }\n\n makeRemote(object = {}): T {\n return InnerNativeModule.makeRemote(object);\n }\n\n startMapper(\n mapper: () => void,\n inputs: any[] = [],\n outputs: any[] = [],\n updater: () => void,\n viewDescriptors: Descriptor[] | SharedValue\n ): number {\n return InnerNativeModule.startMapper(\n mapper,\n inputs,\n outputs,\n updater,\n viewDescriptors\n );\n }\n\n stopMapper(mapperId: number): void {\n return InnerNativeModule.stopMapper(mapperId);\n }\n\n registerEventHandler(\n eventHash: string,\n eventHandler: (event: T) => void\n ): string {\n return InnerNativeModule.registerEventHandler(eventHash, eventHandler);\n }\n\n unregisterEventHandler(id: string): void {\n return InnerNativeModule.unregisterEventHandler(id);\n }\n\n getViewProp(\n viewTag: string,\n propName: string,\n callback?: (result: T) => void\n ): Promise {\n return InnerNativeModule.getViewProp(viewTag, propName, callback);\n }\n\n enableLayoutAnimations(flag: boolean): void {\n InnerNativeModule.enableLayoutAnimations(flag);\n }\n}\n","/**\n * imported from react-native\n */\n\nimport { MutableRefObject } from 'react';\n\n/**\n * This is a helper function for when a component needs to be able to forward a ref\n * to a child component, but still needs to have access to that component as part of\n * its implementation.\n *\n * Its main use case is in wrappers for native components.\n *\n * Usage:\n *\n * class MyView extends React.Component {\n * _nativeRef = null;\n *\n * _setNativeRef = setAndForwardRef({\n * getForwardedRef: () => this.props.forwardedRef,\n * setLocalRef: ref => {\n * this._nativeRef = ref;\n * },\n * });\n *\n * render() {\n * return ;\n * }\n * }\n *\n * const MyViewWithRef = React.forwardRef((props, ref) => (\n * \n * ));\n *\n * module.exports = MyViewWithRef;\n */\n\nexport type ForwardedRef = () => MutableRefObject | ((ref: T) => void);\n\nfunction setAndForwardRef({\n getForwardedRef,\n setLocalRef,\n}: {\n getForwardedRef: ForwardedRef;\n setLocalRef: (ref: T) => void;\n}): (ref: T) => void {\n return function forwardRef(ref: T) {\n const forwardedRef = getForwardedRef();\n\n setLocalRef(ref);\n\n // Forward to user ref prop (if one has been specified)\n if (typeof forwardedRef === 'function') {\n // Handle function-based refs. String-based refs are handled as functions.\n forwardedRef(ref);\n } else if (typeof forwardedRef === 'object' && forwardedRef != null) {\n // Handle createRef-based refs\n forwardedRef.current = ref;\n }\n };\n}\n\nexport default setAndForwardRef;\n","/* global _stopObservingProgress, _startObservingProgress */\nimport { runOnUI } from '../core';\nimport { withStyleAnimation } from '../animation/styleAnimation';\nimport { ColorProperties } from '../UpdateProps';\nimport { processColor } from '../Colors';\n\nrunOnUI(() => {\n 'worklet';\n\n const configs: Record = {};\n const enteringAnimationForTag: Record = {};\n\n global.LayoutAnimationRepository = {\n configs,\n registerConfig(tag, config) {\n configs[tag] = config;\n enteringAnimationForTag[tag] = null;\n },\n removeConfig(tag) {\n delete configs[tag];\n delete enteringAnimationForTag[tag];\n },\n startAnimationForTag(tag, type, yogaValues) {\n if (configs[tag] == null) {\n return; // :(\n }\n const style = configs[tag][type](yogaValues);\n let currentAnimation = style.animations;\n if (type === 'entering') {\n enteringAnimationForTag[tag] = style;\n } else if (type === 'layout' && enteringAnimationForTag[tag] !== null) {\n const entryAniamtion = enteringAnimationForTag[tag].animations;\n const layoutAnimation = style.animations;\n currentAnimation = {};\n for (const key in entryAniamtion) {\n currentAnimation[key] = entryAniamtion[key];\n }\n for (const key in layoutAnimation) {\n currentAnimation[key] = layoutAnimation[key];\n }\n }\n\n const sv: { value: boolean; _value: boolean } = configs[tag].sv;\n _stopObservingProgress(tag, false);\n _startObservingProgress(tag, sv);\n\n const backupColor: Record = {};\n for (const key in style.initialValues) {\n if (ColorProperties.includes(key)) {\n const value = style.initialValues[key];\n backupColor[key] = value;\n style.initialValues[key] = processColor(value);\n }\n }\n\n sv.value = Object.assign({}, sv._value, style.initialValues);\n _stopObservingProgress(tag, false);\n const animation = withStyleAnimation(currentAnimation);\n\n animation.callback = (finished?: boolean) => {\n if (finished) {\n _stopObservingProgress(tag, finished);\n }\n style.callback && style.callback(finished);\n };\n\n if (backupColor) {\n configs[tag].sv._value = { ...configs[tag].sv.value, ...backupColor };\n }\n\n configs[tag].sv.value = animation;\n _startObservingProgress(tag, sv);\n },\n };\n})();\n","/* global _WORKLET _getCurrentTime _frameTimestamp _eventTimestamp, _setGlobalConsole */\nimport NativeReanimatedModule from './NativeReanimated';\nimport { Platform } from 'react-native';\nimport { nativeShouldBeMock, shouldBeUseWeb, isWeb } from './PlatformChecker';\nimport {\n BasicWorkletFunction,\n WorkletFunction,\n ComplexWorkletFunction,\n SharedValue,\n AnimationObject,\n AnimatableValue,\n Timestamp,\n} from './commonTypes';\nimport { Descriptor } from './hook/commonTypes';\nimport JSReanimated from './js-reanimated/JSReanimated';\n\nglobal.__reanimatedWorkletInit = function (worklet: WorkletFunction) {\n worklet.__worklet = true;\n};\n\nif (global._setGlobalConsole === undefined) {\n // it can happen when Reanimated plugin wasn't added, but the user uses the only API from version 1\n global._setGlobalConsole = () => {\n // noop\n };\n}\n\nexport type ReanimatedConsole = Pick<\n Console,\n 'debug' | 'log' | 'warn' | 'info' | 'error'\n>;\n\nexport type WorkletValue =\n | (() => AnimationObject)\n | AnimationObject\n | AnimatableValue\n | Descriptor;\ninterface WorkletValueSetterContext {\n _animation?: AnimationObject | null;\n _value?: AnimatableValue | Descriptor;\n value?: AnimatableValue;\n _setValue?: (val: AnimatableValue | Descriptor) => void;\n}\n\nconst testWorklet: BasicWorkletFunction = () => {\n 'worklet';\n};\n\nexport const checkPluginState: (throwError: boolean) => boolean = (\n throwError = true\n) => {\n if (!testWorklet.__workletHash && !shouldBeUseWeb()) {\n if (throwError) {\n throw new Error(\n \"Reanimated 2 failed to create a worklet, maybe you forgot to add Reanimated's babel plugin?\"\n );\n }\n return false;\n }\n return true;\n};\n\nexport const isConfigured: (throwError?: boolean) => boolean = (\n throwError = false\n) => {\n return checkPluginState(throwError) && !NativeReanimatedModule.useOnlyV1;\n};\n\nexport const isConfiguredCheck: () => void = () => {\n if (!isConfigured(true)) {\n throw new Error(\n 'If you want to use Reanimated 2 then go through our installation steps https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/installation'\n );\n }\n};\n\nfunction _toArrayReanimated(object: Iterable | ArrayLike | T[]): T[] {\n 'worklet';\n if (Array.isArray(object)) {\n return object;\n }\n if (\n typeof Symbol !== 'undefined' &&\n (typeof Symbol === 'function' ? Symbol.iterator : '@@iterator') in\n Object(object)\n ) {\n return Array.from(object);\n }\n throw new Error(\n 'Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'\n );\n}\n\nfunction _mergeObjectsReanimated(): unknown {\n 'worklet';\n // we can't use rest parameters in worklets at the moment\n // eslint-disable-next-line prefer-rest-params\n const arr = Array.from(arguments);\n return Object.assign.apply(null, [arr[0], ...arr.slice(1)]);\n}\n\nglobal.__reanimatedWorkletInit = function (worklet: WorkletFunction) {\n worklet.__worklet = true;\n\n if (worklet._closure) {\n const closure = worklet._closure;\n Object.keys(closure).forEach((key) => {\n if (key === '_toConsumableArray') {\n closure[key] = _toArrayReanimated;\n }\n\n if (key === '_objectSpread') {\n closure[key] = _mergeObjectsReanimated;\n }\n });\n }\n};\n\nfunction pushFrame(frame: (timestamp: Timestamp) => void): void {\n (NativeReanimatedModule as JSReanimated).pushFrame(frame);\n}\n\nexport function requestFrame(frame: (timestamp: Timestamp) => void): void {\n 'worklet';\n if (NativeReanimatedModule.native) {\n requestAnimationFrame(frame);\n } else {\n pushFrame(frame);\n }\n}\n\nglobal._WORKLET = false;\nglobal._log = function (s: string) {\n console.log(s);\n};\n\nexport function runOnUI(\n worklet: ComplexWorkletFunction\n): (...args: A) => void {\n return makeShareable(worklet);\n}\n\nexport function makeShareable(value: T): T {\n isConfiguredCheck();\n return NativeReanimatedModule.makeShareable(value);\n}\n\nexport function getViewProp(viewTag: string, propName: string): Promise {\n return new Promise((resolve, reject) => {\n return NativeReanimatedModule.getViewProp(\n viewTag,\n propName,\n (result: T) => {\n if (typeof result === 'string' && result.substr(0, 6) === 'error:') {\n reject(result);\n } else {\n resolve(result);\n }\n }\n );\n });\n}\n\nlet _getTimestamp: () => number;\nif (nativeShouldBeMock()) {\n _getTimestamp = () => {\n return (NativeReanimatedModule as JSReanimated).getTimestamp();\n };\n} else {\n _getTimestamp = () => {\n 'worklet';\n if (_frameTimestamp) {\n return _frameTimestamp;\n }\n if (_eventTimestamp) {\n return _eventTimestamp;\n }\n return _getCurrentTime();\n };\n}\n\nexport function getTimestamp(): number {\n 'worklet';\n if (Platform.OS === 'web') {\n return (NativeReanimatedModule as JSReanimated).getTimestamp();\n }\n return _getTimestamp();\n}\n\nfunction workletValueSetter(\n this: WorkletValueSetterContext,\n value: T\n): void {\n 'worklet';\n const previousAnimation = this._animation;\n if (previousAnimation) {\n previousAnimation.cancelled = true;\n this._animation = null;\n }\n if (\n typeof value === 'function' ||\n (value !== null &&\n typeof value === 'object' &&\n (value as AnimationObject).onFrame !== undefined)\n ) {\n const animation: AnimationObject =\n typeof value === 'function'\n ? (value as () => AnimationObject)()\n : (value as AnimationObject);\n // prevent setting again to the same value\n // and triggering the mappers that treat this value as an input\n // this happens when the animation's target value(stored in animation.current until animation.onStart is called) is set to the same value as a current one(this._value)\n // built in animations that are not higher order(withTiming, withSpring) hold target value in .current\n if (this._value === animation.current && !animation.isHigherOrder) {\n animation.callback && animation.callback(true);\n return;\n }\n // animated set\n const initializeAnimation = (timestamp: number) => {\n animation.onStart(animation, this.value, timestamp, previousAnimation);\n };\n initializeAnimation(getTimestamp());\n const step = (timestamp: number) => {\n if (animation.cancelled) {\n animation.callback && animation.callback(false /* finished */);\n return;\n }\n const finished = animation.onFrame(animation, timestamp);\n animation.finished = true;\n animation.timestamp = timestamp;\n this._value = animation.current;\n if (finished) {\n animation.callback && animation.callback(true /* finished */);\n } else {\n requestAnimationFrame(step);\n }\n };\n\n this._animation = animation;\n\n if (_frameTimestamp) {\n // frame\n step(_frameTimestamp);\n } else {\n requestAnimationFrame(step);\n }\n } else {\n // prevent setting again to the same value\n // and triggering the mappers that treat this value as an input\n if (this._value === value) {\n return;\n }\n this._value = value as Descriptor | AnimatableValue;\n }\n}\n\n// We cannot use pushFrame\n// so we use own implementation for js\nfunction workletValueSetterJS(\n this: WorkletValueSetterContext,\n value: T\n): void {\n const previousAnimation = this._animation;\n if (previousAnimation) {\n previousAnimation.cancelled = true;\n this._animation = null;\n }\n if (\n typeof value === 'function' ||\n (value !== null &&\n typeof value === 'object' &&\n (value as AnimationObject).onFrame)\n ) {\n // animated set\n const animation: AnimationObject =\n typeof value === 'function'\n ? (value as () => AnimationObject)()\n : (value as AnimationObject);\n let initializeAnimation: ((timestamp: number) => void) | null = (\n timestamp: number\n ) => {\n animation.onStart(animation, this.value, timestamp, previousAnimation);\n };\n const step = (timestamp: number) => {\n if (animation.cancelled) {\n animation.callback && animation.callback(false /* finished */);\n return;\n }\n if (initializeAnimation) {\n initializeAnimation(timestamp);\n initializeAnimation = null; // prevent closure from keeping ref to previous animation\n }\n const finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n this._setValue && this._setValue(animation.current as AnimatableValue);\n if (finished) {\n animation.callback && animation.callback(true /* finished */);\n } else {\n requestFrame(step);\n }\n };\n\n this._animation = animation;\n\n requestFrame(step);\n } else {\n this._setValue && this._setValue(value as AnimatableValue | Descriptor);\n }\n}\n\nexport function makeMutable(value: T): SharedValue {\n isConfiguredCheck();\n return NativeReanimatedModule.makeMutable(value);\n}\n\nexport function makeRemote(object = {}): T {\n isConfiguredCheck();\n return NativeReanimatedModule.makeRemote(object);\n}\n\nexport function startMapper(\n mapper: () => void,\n inputs: any[] = [],\n outputs: any[] = [],\n updater: () => void = () => {\n // noop\n },\n viewDescriptors: Descriptor[] | SharedValue = []\n): number {\n isConfiguredCheck();\n return NativeReanimatedModule.startMapper(\n mapper,\n inputs,\n outputs,\n updater,\n viewDescriptors\n );\n}\n\nexport function stopMapper(mapperId: number): void {\n NativeReanimatedModule.stopMapper(mapperId);\n}\n\nexport interface RunOnJSFunction {\n __callAsync?: (...args: A) => void;\n (...args: A): R;\n}\n\nexport function runOnJS(\n fun: RunOnJSFunction\n): () => void {\n 'worklet';\n if (!_WORKLET) {\n return fun;\n }\n if (!fun.__callAsync) {\n throw new Error(\n \"Attempting to call runOnJS with an object that is not a host function. Using runOnJS is only possible with methods that are defined on the main React-Native Javascript thread and that aren't marked as worklets\"\n );\n } else {\n return fun.__callAsync;\n }\n}\n\nif (!NativeReanimatedModule.useOnlyV1) {\n NativeReanimatedModule.installCoreFunctions(\n NativeReanimatedModule.native\n ? (workletValueSetter as (value: T) => void)\n : (workletValueSetterJS as (value: T) => void)\n );\n\n if (!isWeb() && isConfigured()) {\n const capturableConsole = console;\n runOnUI(() => {\n 'worklet';\n const console = {\n debug: runOnJS(capturableConsole.debug),\n log: runOnJS(capturableConsole.log),\n warn: runOnJS(capturableConsole.warn),\n error: runOnJS(capturableConsole.error),\n info: runOnJS(capturableConsole.info),\n };\n _setGlobalConsole(console);\n if (global.performance == null) {\n global.performance = {\n now: global._chronoNow,\n };\n }\n })();\n }\n}\n\ntype FeaturesConfig = {\n enableLayoutAnimations: boolean;\n setByUser: boolean;\n};\n\nlet featuresConfig: FeaturesConfig = {\n enableLayoutAnimations: false,\n setByUser: false,\n};\n\nexport function enableLayoutAnimations(\n flag: boolean,\n isCallByUser = true\n): void {\n if (isCallByUser) {\n featuresConfig = {\n enableLayoutAnimations: flag,\n setByUser: true,\n };\n NativeReanimatedModule.enableLayoutAnimations(flag);\n } else if (\n !featuresConfig.setByUser &&\n featuresConfig.enableLayoutAnimations !== flag\n ) {\n featuresConfig.enableLayoutAnimations = flag;\n NativeReanimatedModule.enableLayoutAnimations(flag);\n }\n}\n","import { defineAnimation } from './util';\nimport {\n Timestamp,\n AnimatableValue,\n AnimationObject,\n Animation,\n AnimatedStyle,\n NestedObject,\n NestedObjectValues,\n} from '../commonTypes';\nimport { StyleLayoutAnimation } from './commonTypes';\nimport { withTiming } from './timing';\nimport { ColorProperties } from '../UpdateProps';\nimport { processColor } from '../Colors';\n\n// resolves path to value for nested objects\n// if path cannot be resolved returns undefined\nexport function resolvePath(\n obj: NestedObject,\n path: AnimatableValue[] | AnimatableValue\n): NestedObjectValues | undefined {\n 'worklet';\n const keys: AnimatableValue[] = Array.isArray(path) ? path : [path];\n return keys.reduce | undefined>((acc, current) => {\n if (Array.isArray(acc) && typeof current === 'number') {\n return acc[current];\n } else if (typeof acc === 'object' && (current as number | string) in acc) {\n return (acc as { [key: string]: NestedObjectValues })[\n current as number | string\n ];\n }\n return undefined;\n }, obj);\n}\n\n// set value at given path\ntype Path = Array | string | number;\nexport function setPath(\n obj: NestedObject,\n path: Path,\n value: NestedObjectValues\n): void {\n 'worklet';\n const keys: Path = Array.isArray(path) ? path : [path];\n let currObj: NestedObjectValues = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n // creates entry if there isn't one\n currObj = currObj as { [key: string]: NestedObjectValues };\n if (!currObj[keys[i]]) {\n // if next key is a number create an array\n if (typeof keys[i + 1] === 'number') {\n currObj[keys[i]] = [];\n } else {\n currObj[keys[i]] = {};\n }\n }\n currObj = currObj[keys[i]];\n }\n\n (currObj as { [key: string]: NestedObjectValues })[\n keys[keys.length - 1]\n ] = value;\n}\n\ninterface NestedObjectEntry {\n value: NestedObjectValues;\n path: (string | number)[];\n}\n\nexport function withStyleAnimation(\n styleAnimations: AnimatedStyle\n): StyleLayoutAnimation {\n 'worklet';\n return defineAnimation({}, () => {\n 'worklet';\n\n const onFrame = (\n animation: StyleLayoutAnimation,\n now: Timestamp\n ): boolean => {\n let stillGoing = false;\n const entriesToCheck: NestedObjectEntry[] = [\n { value: animation.styleAnimations, path: [] },\n ];\n while (entriesToCheck.length > 0) {\n const currentEntry: NestedObjectEntry = entriesToCheck.pop() as NestedObjectEntry;\n if (Array.isArray(currentEntry.value)) {\n for (let index = 0; index < currentEntry.value.length; index++) {\n entriesToCheck.push({\n value: currentEntry.value[index],\n path: currentEntry.path.concat(index),\n });\n }\n } else if (\n typeof currentEntry.value === 'object' &&\n currentEntry.value.onFrame === undefined\n ) {\n // nested object\n for (const key of Object.keys(currentEntry.value)) {\n entriesToCheck.push({\n value: currentEntry.value[key],\n path: currentEntry.path.concat(key),\n });\n }\n } else {\n const currentStyleAnimation: AnimationObject = currentEntry.value as AnimationObject;\n if (currentStyleAnimation.finished) {\n continue;\n }\n const finished = currentStyleAnimation.onFrame(\n currentStyleAnimation,\n now\n );\n if (finished) {\n currentStyleAnimation.finished = true;\n if (currentStyleAnimation.callback) {\n currentStyleAnimation.callback(true);\n }\n } else {\n stillGoing = true;\n }\n\n if (ColorProperties.includes(currentEntry.path[0] as string)) {\n currentStyleAnimation.current = processColor(\n currentStyleAnimation.current\n ) as number;\n }\n\n setPath(\n animation.current,\n currentEntry.path,\n currentStyleAnimation.current\n );\n }\n }\n return !stillGoing;\n };\n\n const onStart = (\n animation: StyleLayoutAnimation,\n value: AnimatedStyle,\n now: Timestamp,\n previousAnimation: StyleLayoutAnimation\n ): void => {\n const entriesToCheck: NestedObjectEntry<\n AnimationObject | AnimatableValue\n >[] = [{ value: styleAnimations, path: [] }];\n while (entriesToCheck.length > 0) {\n const currentEntry: NestedObjectEntry<\n AnimationObject | AnimatableValue\n > = entriesToCheck.pop() as NestedObjectEntry<\n AnimationObject | AnimatableValue\n >;\n if (Array.isArray(currentEntry.value)) {\n for (let index = 0; index < currentEntry.value.length; index++) {\n entriesToCheck.push({\n value: currentEntry.value[index],\n path: currentEntry.path.concat(index),\n });\n }\n } else if (\n typeof currentEntry.value === 'object' &&\n currentEntry.value.onStart === undefined\n ) {\n for (const key of Object.keys(currentEntry.value)) {\n entriesToCheck.push({\n value: currentEntry.value[key],\n path: currentEntry.path.concat(key),\n });\n }\n } else {\n const prevAnimation = resolvePath(\n previousAnimation?.styleAnimations,\n currentEntry.path\n );\n let prevVal = resolvePath(value, currentEntry.path);\n if (prevAnimation && !prevVal) {\n prevVal = prevAnimation.current;\n }\n setPath(animation.current, currentEntry.path, prevVal);\n let currentAnimation: AnimationObject;\n if (\n typeof currentEntry.value !== 'object' ||\n !currentEntry.value.onStart\n ) {\n currentAnimation = withTiming(\n currentEntry.value as AnimatableValue,\n { duration: 0 }\n );\n setPath(\n animation.styleAnimations,\n currentEntry.path,\n currentAnimation\n );\n } else {\n currentAnimation = currentEntry.value as Animation;\n }\n currentAnimation.onStart(\n currentAnimation,\n prevVal,\n now,\n prevAnimation\n );\n }\n }\n };\n\n const callback = (finished: boolean): void => {\n if (!finished) {\n const animationsToCheck: NestedObjectValues[] = [\n styleAnimations,\n ];\n while (animationsToCheck.length > 0) {\n const currentAnimation: NestedObjectValues = animationsToCheck.pop() as NestedObjectValues;\n if (Array.isArray(currentAnimation)) {\n for (const element of currentAnimation) {\n animationsToCheck.push(element);\n }\n } else if (\n typeof currentAnimation === 'object' &&\n currentAnimation.onStart === undefined\n ) {\n for (const value of Object.values(currentAnimation)) {\n animationsToCheck.push(value);\n }\n } else {\n const currentStyleAnimation: AnimationObject = currentAnimation as AnimationObject;\n if (\n !currentStyleAnimation.finished &&\n currentStyleAnimation.callback\n ) {\n currentStyleAnimation.callback(false);\n }\n }\n }\n }\n };\n\n return {\n isHigherOrder: true,\n onFrame,\n onStart,\n current: {},\n styleAnimations,\n callback,\n } as StyleLayoutAnimation;\n });\n}\n","import {\n HigherOrderAnimation,\n NextAnimation,\n DelayAnimation,\n RepeatAnimation,\n SequenceAnimation,\n StyleLayoutAnimation,\n} from './commonTypes';\n/* global _WORKLET */\nimport { ParsedColorArray, convertToHSVA, isColor, toRGBA } from '../Colors';\n\nimport {\n AnimatedStyle,\n SharedValue,\n AnimatableValue,\n Animation,\n AnimationObject,\n Timestamp,\n} from '../commonTypes';\nimport NativeReanimatedModule from '../NativeReanimated';\n\nlet IN_STYLE_UPDATER = false;\n\nexport type UserUpdater = () => AnimatedStyle;\n\nexport function initialUpdaterRun(updater: () => T): T {\n IN_STYLE_UPDATER = true;\n const result = updater();\n IN_STYLE_UPDATER = false;\n return result;\n}\ninterface RecognizedPrefixSuffix {\n prefix?: string;\n suffix?: string;\n strippedValue: number;\n}\n\nfunction recognizePrefixSuffix(value: string | number): RecognizedPrefixSuffix {\n 'worklet';\n if (typeof value === 'string') {\n const match = value.match(\n /([A-Za-z]*)(-?\\d*\\.?\\d*)([eE][-+]?[0-9]+)?([A-Za-z%]*)/\n );\n if (!match) {\n throw Error(\n \"Couldn't parse animation value. Check if there isn't any typo.\"\n );\n }\n const prefix = match[1];\n const suffix = match[4];\n // number with scientific notation\n const number = match[2] + (match[3] ?? '');\n return { prefix, suffix, strippedValue: parseFloat(number) };\n } else {\n return { strippedValue: value };\n }\n}\n\nfunction decorateAnimation(\n animation: T\n): void {\n 'worklet';\n if ((animation as HigherOrderAnimation).isHigherOrder) {\n return;\n }\n\n const baseOnStart = (animation as Animation).onStart;\n const baseOnFrame = (animation as Animation).onFrame;\n const animationCopy = Object.assign({}, animation);\n delete animationCopy.callback;\n\n const prefNumberSuffOnStart = (\n animation: Animation,\n value: string | number,\n timestamp: number,\n previousAnimation: Animation\n ) => {\n // recognize prefix, suffix, and updates stripped value on animation start\n const { prefix, suffix, strippedValue } = recognizePrefixSuffix(value);\n animation.__prefix = prefix;\n animation.__suffix = suffix;\n animation.strippedCurrent = strippedValue;\n const { strippedValue: strippedToValue } = recognizePrefixSuffix(\n animation.toValue as string | number\n );\n animation.current = strippedValue;\n animation.startValue = strippedValue;\n animation.toValue = strippedToValue;\n if (previousAnimation && previousAnimation !== animation) {\n previousAnimation.current = previousAnimation.strippedCurrent;\n }\n\n baseOnStart(animation, strippedValue, timestamp, previousAnimation);\n\n animation.current =\n (animation.__prefix ?? '') +\n animation.current +\n (animation.__suffix ?? '');\n\n if (previousAnimation && previousAnimation !== animation) {\n previousAnimation.current =\n (previousAnimation.__prefix ?? '') +\n previousAnimation.current +\n (previousAnimation.__suffix ?? '');\n }\n };\n const prefNumberSuffOnFrame = (\n animation: Animation,\n timestamp: number\n ) => {\n animation.current = animation.strippedCurrent;\n const res = baseOnFrame(animation, timestamp);\n animation.strippedCurrent = animation.current;\n animation.current =\n (animation.__prefix ?? '') +\n animation.current +\n (animation.__suffix ?? '');\n return res;\n };\n\n const tab = ['H', 'S', 'V', 'A'];\n const colorOnStart = (\n animation: Animation,\n value: string | number,\n timestamp: Timestamp,\n previousAnimation: Animation\n ): void => {\n let HSVAValue: ParsedColorArray;\n let HSVACurrent: ParsedColorArray;\n let HSVAToValue: ParsedColorArray;\n const res: Array = [];\n if (isColor(value)) {\n HSVACurrent = convertToHSVA(animation.current);\n HSVAValue = convertToHSVA(value);\n if (animation.toValue) {\n HSVAToValue = convertToHSVA(animation.toValue);\n }\n }\n tab.forEach((i, index) => {\n animation[i] = Object.assign({}, animationCopy);\n animation[i].current = HSVACurrent[index];\n animation[i].toValue = HSVAToValue ? HSVAToValue[index] : undefined;\n animation[i].onStart(\n animation[i],\n HSVAValue[index],\n timestamp,\n previousAnimation ? previousAnimation[i] : undefined\n );\n res.push(animation[i].current);\n });\n\n animation.current = toRGBA(res as ParsedColorArray);\n };\n\n const colorOnFrame = (\n animation: Animation,\n timestamp: Timestamp\n ): boolean => {\n const HSVACurrent = convertToHSVA(animation.current);\n const res: Array = [];\n let finished = true;\n tab.forEach((i, index) => {\n animation[i].current = HSVACurrent[index];\n // @ts-ignore: disable-next-line\n finished &= animation[i].onFrame(animation[i], timestamp);\n res.push(animation[i].current);\n });\n\n animation.current = toRGBA(res as ParsedColorArray);\n return finished;\n };\n\n const arrayOnStart = (\n animation: Animation,\n value: Array,\n timestamp: Timestamp,\n previousAnimation: Animation\n ): void => {\n value.forEach((v, i) => {\n animation[i] = Object.assign({}, animationCopy);\n animation[i].current = v;\n animation[i].toValue = (animation.toValue as Array)[i];\n animation[i].onStart(\n animation[i],\n v,\n timestamp,\n previousAnimation ? previousAnimation[i] : undefined\n );\n });\n\n animation.current = value;\n };\n\n const arrayOnFrame = (\n animation: Animation,\n timestamp: Timestamp\n ): boolean => {\n let finished = true;\n (animation.current as Array).forEach((v, i) => {\n // @ts-ignore: disable-next-line\n finished &= animation[i].onFrame(animation[i], timestamp);\n (animation.current as Array)[i] = animation[i].current;\n });\n\n return finished;\n };\n\n animation.onStart = (\n animation: Animation,\n value: number,\n timestamp: Timestamp,\n previousAnimation: Animation\n ) => {\n if (isColor(value)) {\n colorOnStart(animation, value, timestamp, previousAnimation);\n animation.onFrame = colorOnFrame;\n return;\n } else if (Array.isArray(value)) {\n arrayOnStart(animation, value, timestamp, previousAnimation);\n animation.onFrame = arrayOnFrame;\n return;\n } else if (typeof value === 'string') {\n prefNumberSuffOnStart(animation, value, timestamp, previousAnimation);\n animation.onFrame = prefNumberSuffOnFrame;\n return;\n }\n baseOnStart(animation, value, timestamp, previousAnimation);\n };\n}\n\ntype AnimationToDecoration<\n T extends AnimationObject | StyleLayoutAnimation\n> = T extends StyleLayoutAnimation\n ? Record\n : T extends DelayAnimation\n ? NextAnimation\n : T extends RepeatAnimation\n ? NextAnimation\n : T extends SequenceAnimation\n ? NextAnimation\n : AnimatableValue | T;\n\nexport function defineAnimation<\n T extends AnimationObject | StyleLayoutAnimation\n>(starting: AnimationToDecoration, factory: () => T): T {\n 'worklet';\n if (IN_STYLE_UPDATER) {\n return starting as T;\n }\n const create = () => {\n 'worklet';\n const animation = factory();\n decorateAnimation(animation);\n return animation;\n };\n\n if (_WORKLET || !NativeReanimatedModule.native) {\n return create();\n }\n // @ts-ignore: eslint-disable-line\n return create;\n}\n\nexport function cancelAnimation(sharedValue: SharedValue): void {\n 'worklet';\n // setting the current value cancels the animation if one is currently running\n sharedValue.value = sharedValue.value; // eslint-disable-line no-self-assign\n}\n\n// TODO it should work only if there was no animation before.\nexport function withStartValue(\n startValue: AnimatableValue,\n animation: NextAnimation\n): Animation {\n 'worklet';\n return defineAnimation(startValue, () => {\n 'worklet';\n if (!_WORKLET && typeof animation === 'function') {\n animation = animation();\n }\n (animation as Animation).current = startValue;\n return animation as Animation;\n });\n}\n","/* global _WORKLET */\n/**\n * Copied from:\n * react-native/Libraries/StyleSheet/normalizeColor.js\n * react-native/Libraries/StyleSheet/processColor.js\n * https://github.com/wcandillon/react-native-redash/blob/master/src/Colors.ts\n */\n\n/* eslint no-bitwise: 0 */\nimport { Platform } from 'react-native';\nimport { makeRemote, makeShareable, isConfigured } from './core';\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\ninterface HSV {\n h: number;\n s: number;\n v: number;\n}\n\n// var INTEGER = '[-+]?\\\\d+';\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...args: unknown[]): string {\n 'worklet';\n return '\\\\(\\\\s*(' + args.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\n// matchers use RegExp objects which needs to be created separately on JS and on\n// the UI thread. We keep separate cache of Regexes for UI and JS using the below\n// objects, then pick the right cache in getMatchers() method.\nconst jsCachedMatchers: Matchers = {};\nconst uiCachedMatchers: Matchers = !isConfigured() ? {} : makeRemote({});\ntype Matchers = {\n rgb?: RegExp;\n rgba?: RegExp;\n hsl?: RegExp;\n hsla?: RegExp;\n hex3?: RegExp;\n hex4?: RegExp;\n hex5?: RegExp;\n hex6?: RegExp;\n hex8?: RegExp;\n};\nfunction getMatchers(): Matchers {\n 'worklet';\n const cachedMatchers: Matchers = _WORKLET\n ? uiCachedMatchers\n : jsCachedMatchers;\n if (cachedMatchers.rgb === undefined) {\n cachedMatchers.rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER));\n cachedMatchers.rgba = new RegExp(\n 'rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER)\n );\n cachedMatchers.hsl = new RegExp(\n 'hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)\n );\n cachedMatchers.hsla = new RegExp(\n 'hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER)\n );\n cachedMatchers.hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\n cachedMatchers.hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\n cachedMatchers.hex6 = /^#([0-9a-fA-F]{6})$/;\n cachedMatchers.hex8 = /^#([0-9a-fA-F]{8})$/;\n }\n return cachedMatchers;\n}\n// cachedMatchers is lazy loaded and it is frozen when worklet is being created,\n// it is possible to call getMatchers() when the object is frozen, then cachedMatchers\n// has no assigned regexes\ngetMatchers();\n\nfunction hue2rgb(p: number, q: number, t: number): number {\n 'worklet';\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n\nfunction hslToRgb(h: number, s: number, l: number): number {\n 'worklet';\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n\n return (\n (Math.round(r * 255) << 24) |\n (Math.round(g * 255) << 16) |\n (Math.round(b * 255) << 8)\n );\n}\n\nfunction parse255(str: string): number {\n 'worklet';\n const int = Number.parseInt(str, 10);\n if (int < 0) {\n return 0;\n }\n if (int > 255) {\n return 255;\n }\n return int;\n}\n\nfunction parse360(str: string): number {\n 'worklet';\n const int = Number.parseFloat(str);\n return (((int % 360) + 360) % 360) / 360;\n}\n\nfunction parse1(str: string): number {\n 'worklet';\n const num = Number.parseFloat(str);\n if (num < 0) {\n return 0;\n }\n if (num > 1) {\n return 255;\n }\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str: string): number {\n 'worklet';\n // parseFloat conveniently ignores the final %\n const int = Number.parseFloat(str);\n if (int < 0) {\n return 0;\n }\n if (int > 100) {\n return 1;\n }\n return int / 100;\n}\n\nconst names: any = !isConfigured()\n ? null\n : makeShareable({\n transparent: 0x00000000,\n\n // http://www.w3.org/TR/css3-color/#svg-color\n aliceblue: 0xf0f8ffff,\n antiquewhite: 0xfaebd7ff,\n aqua: 0x00ffffff,\n aquamarine: 0x7fffd4ff,\n azure: 0xf0ffffff,\n beige: 0xf5f5dcff,\n bisque: 0xffe4c4ff,\n black: 0x000000ff,\n blanchedalmond: 0xffebcdff,\n blue: 0x0000ffff,\n blueviolet: 0x8a2be2ff,\n brown: 0xa52a2aff,\n burlywood: 0xdeb887ff,\n burntsienna: 0xea7e5dff,\n cadetblue: 0x5f9ea0ff,\n chartreuse: 0x7fff00ff,\n chocolate: 0xd2691eff,\n coral: 0xff7f50ff,\n cornflowerblue: 0x6495edff,\n cornsilk: 0xfff8dcff,\n crimson: 0xdc143cff,\n cyan: 0x00ffffff,\n darkblue: 0x00008bff,\n darkcyan: 0x008b8bff,\n darkgoldenrod: 0xb8860bff,\n darkgray: 0xa9a9a9ff,\n darkgreen: 0x006400ff,\n darkgrey: 0xa9a9a9ff,\n darkkhaki: 0xbdb76bff,\n darkmagenta: 0x8b008bff,\n darkolivegreen: 0x556b2fff,\n darkorange: 0xff8c00ff,\n darkorchid: 0x9932ccff,\n darkred: 0x8b0000ff,\n darksalmon: 0xe9967aff,\n darkseagreen: 0x8fbc8fff,\n darkslateblue: 0x483d8bff,\n darkslategray: 0x2f4f4fff,\n darkslategrey: 0x2f4f4fff,\n darkturquoise: 0x00ced1ff,\n darkviolet: 0x9400d3ff,\n deeppink: 0xff1493ff,\n deepskyblue: 0x00bfffff,\n dimgray: 0x696969ff,\n dimgrey: 0x696969ff,\n dodgerblue: 0x1e90ffff,\n firebrick: 0xb22222ff,\n floralwhite: 0xfffaf0ff,\n forestgreen: 0x228b22ff,\n fuchsia: 0xff00ffff,\n gainsboro: 0xdcdcdcff,\n ghostwhite: 0xf8f8ffff,\n gold: 0xffd700ff,\n goldenrod: 0xdaa520ff,\n gray: 0x808080ff,\n green: 0x008000ff,\n greenyellow: 0xadff2fff,\n grey: 0x808080ff,\n honeydew: 0xf0fff0ff,\n hotpink: 0xff69b4ff,\n indianred: 0xcd5c5cff,\n indigo: 0x4b0082ff,\n ivory: 0xfffff0ff,\n khaki: 0xf0e68cff,\n lavender: 0xe6e6faff,\n lavenderblush: 0xfff0f5ff,\n lawngreen: 0x7cfc00ff,\n lemonchiffon: 0xfffacdff,\n lightblue: 0xadd8e6ff,\n lightcoral: 0xf08080ff,\n lightcyan: 0xe0ffffff,\n lightgoldenrodyellow: 0xfafad2ff,\n lightgray: 0xd3d3d3ff,\n lightgreen: 0x90ee90ff,\n lightgrey: 0xd3d3d3ff,\n lightpink: 0xffb6c1ff,\n lightsalmon: 0xffa07aff,\n lightseagreen: 0x20b2aaff,\n lightskyblue: 0x87cefaff,\n lightslategray: 0x778899ff,\n lightslategrey: 0x778899ff,\n lightsteelblue: 0xb0c4deff,\n lightyellow: 0xffffe0ff,\n lime: 0x00ff00ff,\n limegreen: 0x32cd32ff,\n linen: 0xfaf0e6ff,\n magenta: 0xff00ffff,\n maroon: 0x800000ff,\n mediumaquamarine: 0x66cdaaff,\n mediumblue: 0x0000cdff,\n mediumorchid: 0xba55d3ff,\n mediumpurple: 0x9370dbff,\n mediumseagreen: 0x3cb371ff,\n mediumslateblue: 0x7b68eeff,\n mediumspringgreen: 0x00fa9aff,\n mediumturquoise: 0x48d1ccff,\n mediumvioletred: 0xc71585ff,\n midnightblue: 0x191970ff,\n mintcream: 0xf5fffaff,\n mistyrose: 0xffe4e1ff,\n moccasin: 0xffe4b5ff,\n navajowhite: 0xffdeadff,\n navy: 0x000080ff,\n oldlace: 0xfdf5e6ff,\n olive: 0x808000ff,\n olivedrab: 0x6b8e23ff,\n orange: 0xffa500ff,\n orangered: 0xff4500ff,\n orchid: 0xda70d6ff,\n palegoldenrod: 0xeee8aaff,\n palegreen: 0x98fb98ff,\n paleturquoise: 0xafeeeeff,\n palevioletred: 0xdb7093ff,\n papayawhip: 0xffefd5ff,\n peachpuff: 0xffdab9ff,\n peru: 0xcd853fff,\n pink: 0xffc0cbff,\n plum: 0xdda0ddff,\n powderblue: 0xb0e0e6ff,\n purple: 0x800080ff,\n rebeccapurple: 0x663399ff,\n red: 0xff0000ff,\n rosybrown: 0xbc8f8fff,\n royalblue: 0x4169e1ff,\n saddlebrown: 0x8b4513ff,\n salmon: 0xfa8072ff,\n sandybrown: 0xf4a460ff,\n seagreen: 0x2e8b57ff,\n seashell: 0xfff5eeff,\n sienna: 0xa0522dff,\n silver: 0xc0c0c0ff,\n skyblue: 0x87ceebff,\n slateblue: 0x6a5acdff,\n slategray: 0x708090ff,\n slategrey: 0x708090ff,\n snow: 0xfffafaff,\n springgreen: 0x00ff7fff,\n steelblue: 0x4682b4ff,\n tan: 0xd2b48cff,\n teal: 0x008080ff,\n thistle: 0xd8bfd8ff,\n tomato: 0xff6347ff,\n turquoise: 0x40e0d0ff,\n violet: 0xee82eeff,\n wheat: 0xf5deb3ff,\n white: 0xffffffff,\n whitesmoke: 0xf5f5f5ff,\n yellow: 0xffff00ff,\n yellowgreen: 0x9acd32ff,\n });\n\nfunction normalizeColor(color: unknown): number | null {\n 'worklet';\n\n if (typeof color === 'number') {\n if (color >>> 0 === color && color >= 0 && color <= 0xffffffff) {\n return color;\n }\n return null;\n }\n\n if (typeof color !== 'string') {\n return null;\n }\n\n const matchers = getMatchers();\n\n let match: RegExpExecArray | null | undefined;\n\n // Ordered based on occurrences on Facebook codebase\n if ((match = matchers?.hex6?.exec(color))) {\n return Number.parseInt(match[1] + 'ff', 16) >>> 0;\n }\n\n if (names[color] !== undefined) {\n return names[color];\n }\n\n if ((match = matchers?.rgb?.exec(color))) {\n return (\n // b\n ((parse255(match[1]) << 24) | // r\n (parse255(match[2]) << 16) | // g\n (parse255(match[3]) << 8) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = matchers?.rgba?.exec(color))) {\n return (\n // b\n ((parse255(match[1]) << 24) | // r\n (parse255(match[2]) << 16) | // g\n (parse255(match[3]) << 8) |\n parse1(match[4])) >>> // a\n 0\n );\n }\n\n if ((match = matchers?.hex3?.exec(color))) {\n return (\n Number.parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n 'ff', // a\n 16\n ) >>> 0\n );\n }\n\n // https://drafts.csswg.org/css-color-4/#hex-notation\n if ((match = matchers?.hex8?.exec(color))) {\n return Number.parseInt(match[1], 16) >>> 0;\n }\n\n if ((match = matchers?.hex4?.exec(color))) {\n return (\n Number.parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n match[4] +\n match[4], // a\n 16\n ) >>> 0\n );\n }\n\n if ((match = matchers?.hsl?.exec(color))) {\n return (\n (hslToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // s\n parsePercentage(match[3]) // l\n ) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = matchers?.hsla?.exec(color))) {\n return (\n (hslToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // s\n parsePercentage(match[3]) // l\n ) |\n parse1(match[4])) >>> // a\n 0\n );\n }\n\n return null;\n}\n\nexport const opacity = (c: number): number => {\n 'worklet';\n return ((c >> 24) & 255) / 255;\n};\n\nexport const red = (c: number): number => {\n 'worklet';\n return (c >> 16) & 255;\n};\n\nexport const green = (c: number): number => {\n 'worklet';\n return (c >> 8) & 255;\n};\n\nexport const blue = (c: number): number => {\n 'worklet';\n return c & 255;\n};\n\nexport const rgbaColor = (\n r: number,\n g: number,\n b: number,\n alpha = 1\n): number | string => {\n 'worklet';\n if (Platform.OS === 'web' || !_WORKLET) {\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n\n const c =\n Math.round(alpha * 255) * (1 << 24) +\n Math.round(r) * (1 << 16) +\n Math.round(g) * (1 << 8) +\n Math.round(b);\n if (Platform.OS === 'android') {\n // on Android color is represented as signed 32 bit int\n return c < (1 << 31) >>> 0 ? c : c - 4294967296; // 4294967296 == Math.pow(2, 32);\n }\n return c;\n};\n\n/* accepts parameters\n * r Object = {r:x, g:y, b:z}\n * OR\n * r, g, b\n * 0 <= r, g, b <= 255\n * returns 0 <= h, s, v <= 1\n */\nexport function RGBtoHSV(rgb: RGB): HSV;\nexport function RGBtoHSV(r: number, g: number, b: number): HSV;\nexport function RGBtoHSV(r: any, g?: any, b?: any): HSV {\n 'worklet';\n /* eslint-disable */\n if (arguments.length === 1) {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n const v = max / 255;\n\n let h;\n\n switch (max) {\n default:\n /* fallthrough */\n case min:\n h = 0;\n break;\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n }\n\n return {\n h: h,\n s: s,\n v: v,\n };\n /* eslint-enable */\n}\n\n/* accepts parameters\n * h Object = {h:x, s:y, v:z}\n * OR\n * h, s, v\n * 0 <= h, s, v <= 1\n * returns 0 <= r, g, b <= 255\n */\nfunction HSVtoRGB(hsv: HSV): RGB;\nfunction HSVtoRGB(h: number, s: number, v: number): RGB;\nfunction HSVtoRGB(h: any, s?: any, v?: any) {\n 'worklet';\n /* eslint-disable */\n var r, g, b, i, f, p, q, t;\n if (arguments.length === 1) {\n s = h.s;\n v = h.v;\n h = h.h;\n }\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n (r = v), (g = t), (b = p);\n break;\n case 1:\n (r = q), (g = v), (b = p);\n break;\n case 2:\n (r = p), (g = v), (b = t);\n break;\n case 3:\n (r = p), (g = q), (b = v);\n break;\n case 4:\n (r = t), (g = p), (b = v);\n break;\n case 5:\n (r = v), (g = p), (b = q);\n break;\n }\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n /* eslint-enable */\n}\n\nexport const hsvToColor = (\n h: number,\n s: number,\n v: number\n): number | string => {\n 'worklet';\n const { r, g, b } = HSVtoRGB(h, s, v);\n return rgbaColor(r, g, b);\n};\n\nexport function processColorInitially(\n color: unknown\n): number | null | undefined {\n 'worklet';\n if (color === null || color === undefined || typeof color === 'number') {\n return color;\n }\n\n let normalizedColor = normalizeColor(color);\n\n if (normalizedColor === null || normalizedColor === undefined) {\n return undefined;\n }\n\n if (typeof normalizedColor !== 'number') {\n return null;\n }\n\n normalizedColor = ((normalizedColor << 24) | (normalizedColor >>> 8)) >>> 0; // argb\n return normalizedColor;\n}\n\nexport function isColor(value: unknown): boolean {\n 'worklet';\n if (typeof value !== 'string') {\n return false;\n }\n return processColorInitially(value) != null;\n}\n\nexport function processColor(color: unknown): number | null | undefined {\n 'worklet';\n let normalizedColor = processColorInitially(color);\n if (normalizedColor === null || normalizedColor === undefined) {\n return undefined;\n }\n\n if (typeof normalizedColor !== 'number') {\n return null;\n }\n\n if (Platform.OS === 'android') {\n // Android use 32 bit *signed* integer to represent the color\n // We utilize the fact that bitwise operations in JS also operates on\n // signed 32 bit integers, so that we can use those to convert from\n // *unsigned* to *signed* 32bit int that way.\n normalizedColor = normalizedColor | 0x0;\n }\n\n return normalizedColor;\n}\n\nexport type ParsedColorArray = [number, number, number, number];\n\nexport function convertToHSVA(color: unknown): ParsedColorArray {\n 'worklet';\n const processedColor = processColorInitially(color)!; // argb;\n const a = (processedColor >>> 24) / 255;\n const r = (processedColor << 8) >>> 24;\n const g = (processedColor << 16) >>> 24;\n const b = (processedColor << 24) >>> 24;\n const { h, s, v } = RGBtoHSV(r, g, b);\n return [h, s, v, a];\n}\n\nexport function toRGBA(HSVA: ParsedColorArray): string {\n 'worklet';\n const { r, g, b } = HSVtoRGB(HSVA[0], HSVA[1], HSVA[2]);\n return `rgba(${r}, ${g}, ${b}, ${HSVA[3]})`;\n}\n","import { Easing, EasingFn, EasingFactoryFn } from '../Easing';\nimport { defineAnimation } from './util';\nimport {\n Animation,\n AnimationCallback,\n Timestamp,\n AnimatableValue,\n} from '../commonTypes';\n\ninterface TimingConfig {\n duration?: number;\n easing?: EasingFn | EasingFactoryFn;\n}\n\nexport interface TimingAnimation extends Animation {\n type: string;\n easing: EasingFn;\n startValue: AnimatableValue;\n startTime: Timestamp;\n progress: number;\n toValue: AnimatableValue;\n current: AnimatableValue;\n}\n\nexport interface InnerTimingAnimation\n extends Omit {\n toValue: number;\n current: number;\n}\n\nexport function withTiming(\n toValue: AnimatableValue,\n userConfig?: TimingConfig,\n callback?: AnimationCallback\n): Animation {\n 'worklet';\n\n return defineAnimation(toValue, () => {\n 'worklet';\n const config: Required = {\n duration: 300,\n easing: Easing.inOut(Easing.quad),\n };\n if (userConfig) {\n Object.keys(userConfig).forEach(\n (key) =>\n ((config as any)[key] = userConfig[key as keyof typeof userConfig])\n );\n }\n\n function timing(animation: InnerTimingAnimation, now: Timestamp): boolean {\n const { toValue, startTime, startValue } = animation;\n const runtime = now - startTime;\n\n if (runtime >= config.duration) {\n // reset startTime to avoid reusing finished animation config in `start` method\n animation.startTime = 0;\n animation.current = toValue;\n return true;\n }\n const progress = animation.easing(runtime / config.duration);\n animation.current =\n (startValue as number) + (toValue - (startValue as number)) * progress;\n return false;\n }\n\n function onStart(\n animation: TimingAnimation,\n value: number,\n now: Timestamp,\n previousAnimation: Animation\n ): void {\n if (\n previousAnimation &&\n (previousAnimation as TimingAnimation).type === 'timing' &&\n (previousAnimation as TimingAnimation).toValue === toValue &&\n (previousAnimation as TimingAnimation).startTime\n ) {\n // to maintain continuity of timing animations we check if we are starting\n // new timing over the old one with the same parameters. If so, we want\n // to copy animation timeline properties\n animation.startTime = (previousAnimation as TimingAnimation).startTime;\n animation.startValue = (previousAnimation as TimingAnimation).startValue;\n } else {\n animation.startTime = now;\n animation.startValue = value;\n }\n animation.current = value;\n if (typeof config.easing === 'object') {\n animation.easing = config.easing.factory();\n } else {\n animation.easing = config.easing;\n }\n }\n\n return {\n type: 'timing',\n onFrame: timing,\n onStart: onStart as (animation: TimingAnimation, now: number) => boolean,\n progress: 0,\n toValue,\n startValue: 0,\n startTime: 0,\n easing: () => 0,\n current: toValue,\n callback,\n } as TimingAnimation;\n });\n}\n","// spread and rest parameters can't be used in worklets right now\n/* eslint-disable prefer-rest-params */\n/* eslint-disable prefer-spread */\n\n/* global _WORKLET */\n\n// @ts-ignore reanimated1/Easing is JS file\nimport EasingNode from '../reanimated1/Easing';\nimport { Bezier } from './Bezier';\n\n/**\n * The `Easing` module implements common easing functions. This module is used\n * by [Animate.timing()](docs/animate.html#timing) to convey physically\n * believable motion in animations.\n *\n * You can find a visualization of some common easing functions at\n * http://easings.net/\n *\n * ### Predefined animations\n *\n * The `Easing` module provides several predefined animations through the\n * following methods:\n *\n * - [`back`](docs/easing.html#back) provides a simple animation where the\n * object goes slightly back before moving forward\n * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation\n * - [`ease`](docs/easing.html#ease) provides a simple inertial animation\n * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction\n *\n * ### Standard functions\n *\n * Three standard easing functions are provided:\n *\n * - [`linear`](docs/easing.html#linear)\n * - [`quad`](docs/easing.html#quad)\n * - [`cubic`](docs/easing.html#cubic)\n *\n * The [`poly`](docs/easing.html#poly) function can be used to implement\n * quartic, quintic, and other higher power functions.\n *\n * ### Additional functions\n *\n * Additional mathematical functions are provided by the following methods:\n *\n * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve\n * - [`circle`](docs/easing.html#circle) provides a circular function\n * - [`sin`](docs/easing.html#sin) provides a sinusoidal function\n * - [`exp`](docs/easing.html#exp) provides an exponential function\n *\n * The following helpers are used to modify other easing functions.\n *\n * - [`in`](docs/easing.html#in) runs an easing function forwards\n * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical\n * - [`out`](docs/easing.html#out) runs an easing function backwards\n */\n\nexport type EasingFn = (t: number) => number;\n\nexport type EasingFactoryFn = { factory: () => EasingFn };\n/**\n * A linear function, `f(t) = t`. Position correlates to elapsed time one to\n * one.\n *\n * http://cubic-bezier.com/#0,0,1,1\n */\nfunction linear(t: number): number {\n 'worklet';\n return t;\n}\n\n/**\n * A simple inertial interaction, similar to an object slowly accelerating to\n * speed.\n *\n * http://cubic-bezier.com/#.42,0,1,1\n */\nfunction ease(t: number): number {\n 'worklet';\n return Bezier(0.42, 0, 1, 1)(t);\n}\n\n/**\n * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed\n * time.\n *\n * http://easings.net/#easeInQuad\n */\nfunction quad(t: number): number {\n 'worklet';\n return t * t;\n}\n\n/**\n * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed\n * time.\n *\n * http://easings.net/#easeInCubic\n */\nfunction cubic(t: number): number {\n 'worklet';\n return t * t * t;\n}\n\n/**\n * A power function. Position is equal to the Nth power of elapsed time.\n *\n * n = 4: http://easings.net/#easeInQuart\n * n = 5: http://easings.net/#easeInQuint\n */\nfunction poly(n: number): EasingFn {\n 'worklet';\n return (t) => Math.pow(t, n);\n}\n\n/**\n * A sinusoidal function.\n *\n * http://easings.net/#easeInSine\n */\nfunction sin(t: number): number {\n 'worklet';\n return 1 - Math.cos((t * Math.PI) / 2);\n}\n\n/**\n * A circular function.\n *\n * http://easings.net/#easeInCirc\n */\nfunction circle(t: number): number {\n 'worklet';\n return 1 - Math.sqrt(1 - t * t);\n}\n\n/**\n * An exponential function.\n *\n * http://easings.net/#easeInExpo\n */\nfunction exp(t: number): number {\n 'worklet';\n return Math.pow(2, 10 * (t - 1));\n}\n\n/**\n * A simple elastic interaction, similar to a spring oscillating back and\n * forth.\n *\n * Default bounciness is 1, which overshoots a little bit once. 0 bounciness\n * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N\n * times.\n *\n * http://easings.net/#easeInElastic\n */\nfunction elastic(bounciness = 1): EasingFn {\n 'worklet';\n const p = bounciness * Math.PI;\n return (t) => {\n 'worklet';\n return 1 - Math.pow(Math.cos((t * Math.PI) / 2), 3) * Math.cos(t * p);\n };\n}\n\n/**\n * Use with `Animated.parallel()` to create a simple effect where the object\n * animates back slightly as the animation starts.\n *\n * Wolfram Plot:\n *\n * - http://tiny.cc/back_default (s = 1.70158, default)\n */\nfunction back(s = 1.70158): (t: number) => number {\n 'worklet';\n return (t) => t * t * ((s + 1) * t - s);\n}\n\n/**\n * Provides a simple bouncing effect.\n *\n * http://easings.net/#easeInBounce\n */\nfunction bounce(t: number): number {\n 'worklet';\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n\n if (t < 2 / 2.75) {\n const t2 = t - 1.5 / 2.75;\n return 7.5625 * t2 * t2 + 0.75;\n }\n\n if (t < 2.5 / 2.75) {\n const t2 = t - 2.25 / 2.75;\n return 7.5625 * t2 * t2 + 0.9375;\n }\n\n const t2 = t - 2.625 / 2.75;\n return 7.5625 * t2 * t2 + 0.984375;\n}\n\n/**\n * Provides a cubic bezier curve, equivalent to CSS Transitions'\n * `transition-timing-function`.\n *\n * A useful tool to visualize cubic bezier curves can be found at\n * http://cubic-bezier.com/\n */\nfunction bezier(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n): { factory: () => (x: number) => number } {\n 'worklet';\n return {\n factory: () => {\n 'worklet';\n return Bezier(x1, y1, x2, y2);\n },\n };\n}\n\nfunction bezierFn(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n): (x: number) => number {\n 'worklet';\n return Bezier(x1, y1, x2, y2);\n}\n\n/**\n * Runs an easing function forwards.\n */\nfunction in_(easing: EasingFn): EasingFn {\n 'worklet';\n return easing;\n}\n\n/**\n * Runs an easing function backwards.\n */\nfunction out(easing: EasingFn): EasingFn {\n 'worklet';\n return (t) => {\n 'worklet';\n return 1 - easing(1 - t);\n };\n}\n\n/**\n * Makes any easing function symmetrical. The easing function will run\n * forwards for half of the duration, then backwards for the rest of the\n * duration.\n */\nfunction inOut(easing: EasingFn): EasingFn {\n 'worklet';\n return (t) => {\n 'worklet';\n if (t < 0.5) {\n return easing(t * 2) / 2;\n }\n return 1 - easing((1 - t) * 2) / 2;\n };\n}\n\nconst EasingObject = {\n linear,\n ease,\n quad,\n cubic,\n poly,\n sin,\n circle,\n exp,\n elastic,\n back,\n bounce,\n bezier,\n bezierFn,\n in: in_,\n out,\n inOut,\n};\n\n// TODO type worklets\nfunction createChecker(\n worklet: any,\n workletName: string,\n prevArgs?: unknown\n): any {\n /* should return Animated.Value or worklet */\n function checkIfReaOne(): any {\n 'worklet';\n if (arguments && !_WORKLET) {\n for (let i = 0; i < arguments.length; i++) {\n const arg = arguments[i];\n if (arg && arg.__nodeID) {\n console.warn(\n `Easing was renamed to EasingNode in Reanimated 2. Please use EasingNode instead`\n );\n if (prevArgs) {\n return EasingNode[workletName]\n .apply(undefined, prevArgs)\n .apply(undefined, arguments);\n }\n return EasingNode[workletName].apply(undefined, arguments);\n }\n }\n }\n // @ts-ignore this is implicitly any - TODO\n const res = worklet.apply(this, arguments);\n if (!_WORKLET && res && typeof res === 'function' && res.__worklet) {\n return createChecker(res, workletName, arguments);\n }\n return res;\n }\n // use original worklet on UI side\n checkIfReaOne._closure = worklet._closure;\n checkIfReaOne.asString = worklet.asString;\n checkIfReaOne.__workletHash = worklet.__workletHash;\n checkIfReaOne.__location = worklet.__location;\n return checkIfReaOne;\n}\n\ntype EasingObjT = Array;\n(Object.keys(EasingObject) as EasingObjT).forEach((key) => {\n EasingObject[key] = createChecker(EasingObject[key], key);\n});\n\nexport const Easing = EasingObject;\n","import {\n cond,\n lessThan,\n multiply,\n pow,\n cos,\n sqrt,\n sub,\n add,\n divide,\n} from './base';\nimport AnimatedBezier from './core/AnimatedBezier';\n\n/**\n * The `Easing` module implements common easing functions. This module is used\n * by [Animate.timing()](docs/animate.html#timing) to convey physically\n * believable motion in animations.\n *\n * You can find a visualization of some common easing functions at\n * http://easings.net/\n *\n * ### Predefined animations\n *\n * The `Easing` module provides several predefined animations through the\n * following methods:\n *\n * - [`back`](docs/easing.html#back) provides a simple animation where the\n * object goes slightly back before moving forward\n * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation\n * - [`ease`](docs/easing.html#ease) provides a simple inertial animation\n * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction\n *\n * ### Standard functions\n *\n * Three standard easing functions are provided:\n *\n * - [`linear`](docs/easing.html#linear)\n * - [`quad`](docs/easing.html#quad)\n * - [`cubic`](docs/easing.html#cubic)\n *\n * The [`poly`](docs/easing.html#poly) function can be used to implement\n * quartic, quintic, and other higher power functions.\n *\n * ### Additional functions\n *\n * Additional mathematical functions are provided by the following methods:\n *\n * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve\n * - [`circle`](docs/easing.html#circle) provides a circular function\n * - [`sin`](docs/easing.html#sin) provides a sinusoidal function\n * - [`exp`](docs/easing.html#exp) provides an exponential function\n *\n * The following helpers are used to modify other easing functions.\n *\n * - [`in`](docs/easing.html#in) runs an easing function forwards\n * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical\n * - [`out`](docs/easing.html#out) runs an easing function backwards\n */\nexport default class Easing {\n /**\n * A linear function, `f(t) = t`. Position correlates to elapsed time one to\n * one.\n *\n * http://cubic-bezier.com/#0,0,1,1\n */\n static linear(t) {\n return t;\n }\n\n /**\n * A simple inertial interaction, similar to an object slowly accelerating to\n * speed.\n *\n * http://cubic-bezier.com/#.42,0,1,1\n */\n static ease(t) {\n return new AnimatedBezier(t, 0.42, 0, 1, 1);\n }\n\n /**\n * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed\n * time.\n *\n * http://easings.net/#easeInQuad\n */\n static quad(t) {\n return multiply(t, t);\n }\n\n /**\n * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed\n * time.\n *\n * http://easings.net/#easeInCubic\n */\n static cubic(t) {\n return multiply(t, t, t);\n }\n\n /**\n * A power function. Position is equal to the Nth power of elapsed time.\n *\n * n = 4: http://easings.net/#easeInQuart\n * n = 5: http://easings.net/#easeInQuint\n */\n static poly(n) {\n return (t) => pow(t, n);\n }\n\n /**\n * A sinusoidal function.\n *\n * http://easings.net/#easeInSine\n */\n static sin(t) {\n return sub(1, cos(multiply(t, Math.PI, 0.5)));\n }\n\n /**\n * A circular function.\n *\n * http://easings.net/#easeInCirc\n */\n static circle(t) {\n return sub(1, sqrt(sub(1, multiply(t, t))));\n }\n\n /**\n * An exponential function.\n *\n * http://easings.net/#easeInExpo\n */\n static exp(t) {\n return pow(2, multiply(10, sub(t, 1)));\n }\n\n /**\n * A simple elastic interaction, similar to a spring oscillating back and\n * forth.\n *\n * Default bounciness is 1, which overshoots a little bit once. 0 bounciness\n * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N\n * times.\n *\n * http://easings.net/#easeInElastic\n */\n static elastic(bounciness = 1) {\n const p = bounciness * Math.PI;\n return (t) =>\n sub(\n 1,\n multiply(pow(cos(multiply(t, Math.PI, 0.5)), 3), cos(multiply(t, p)))\n );\n }\n\n /**\n * Use with `Animated.parallel()` to create a simple effect where the object\n * animates back slightly as the animation starts.\n *\n * Wolfram Plot:\n *\n * - http://tiny.cc/back_default (s = 1.70158, default)\n */\n static back(s) {\n if (s === undefined) {\n s = 1.70158;\n }\n return (t) => multiply(t, t, sub(multiply(add(s, 1), t), s));\n }\n\n /**\n * Provides a simple bouncing effect.\n *\n * http://easings.net/#easeInBounce\n */\n static bounce(t) {\n const sq = (v) => multiply(7.5625, v, v);\n return cond(\n lessThan(t, 1 / 2.75),\n sq(t),\n cond(\n lessThan(t, 2 / 2.75),\n add(0.75, sq(sub(t, 1.5 / 2.75))),\n cond(\n lessThan(t, 2.5 / 2.76),\n add(0.9375, sq(sub(t, 2.25 / 2.75))),\n add(0.984375, sq(sub(t, 2.625 / 2.75)))\n )\n )\n );\n }\n\n /**\n * Provides a cubic bezier curve, equivalent to CSS Transitions'\n * `transition-timing-function`.\n *\n * A useful tool to visualize cubic bezier curves can be found at\n * http://cubic-bezier.com/\n */\n static bezier(x1, y1, x2, y2) {\n return (t) => new AnimatedBezier(t, x1, y1, x2, y2);\n }\n\n /**\n * Runs an easing function forwards.\n */\n static in(easing) {\n return easing;\n }\n\n /**\n * Runs an easing function backwards.\n */\n static out(easing) {\n return (t) => sub(1, easing(sub(1, t)));\n }\n\n /**\n * Makes any easing function symmetrical. The easing function will run\n * forwards for half of the duration, then backwards for the rest of the\n * duration.\n */\n static inOut(easing) {\n return (t) =>\n cond(\n lessThan(t, 0.5),\n divide(easing(multiply(t, 2)), 2),\n sub(1, divide(easing(multiply(sub(1, t), 2)), 2))\n );\n }\n}\n","export { createAnimatedCond as cond } from './core/AnimatedCond';\nexport { createAnimatedSet as set } from './core/AnimatedSet';\nexport { createAnimatedStartClock as startClock } from './core/AnimatedStartClock';\nexport { createAnimatedStopClock as stopClock } from './core/AnimatedStopClock';\nexport { createAnimatedClockTest as clockRunning } from './core/AnimatedClockTest';\nexport { createAnimatedDebug as debug } from './core/AnimatedDebug';\nexport { createAnimatedCall as call } from './core/AnimatedCall';\nexport { createAnimatedEvent as event } from './core/AnimatedEvent';\nexport { createAnimatedAlways as always } from './core/AnimatedAlways';\nexport { createAnimatedConcat as concat } from './core/AnimatedConcat';\nexport { createAnimatedBlock as block, adapt } from './core/AnimatedBlock';\nexport { createAnimatedFunction as proc } from './core/AnimatedFunction';\nexport * from './operators';\n","import AnimatedNode from './AnimatedNode';\nimport AnimatedClock from './AnimatedClock';\nimport { AnimatedParam } from './AnimatedParam';\nimport invariant from 'invariant';\n\nclass AnimatedStartClock extends AnimatedNode {\n _clockNode;\n\n constructor(clockNode) {\n invariant(\n clockNode instanceof AnimatedClock || clockNode instanceof AnimatedParam,\n `Reanimated: Animated.startClock argument should be of type AnimatedClock but got ${clockNode}`\n );\n super({ type: 'clockStart', clock: clockNode });\n this._clockNode = clockNode;\n }\n\n toString() {\n return `AnimatedStartClock, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n this._clockNode.start();\n return 0;\n }\n}\n\nexport function createAnimatedStartClock(clock) {\n return new AnimatedStartClock(clock);\n}\n","import AnimatedNode from './AnimatedNode';\nimport AnimatedClock from './AnimatedClock';\nimport { AnimatedParam } from './AnimatedParam';\nimport invariant from 'invariant';\n\nclass AnimatedStopClock extends AnimatedNode {\n _clockNode;\n\n constructor(clockNode) {\n invariant(\n clockNode instanceof AnimatedClock || clockNode instanceof AnimatedParam,\n `Reanimated: Animated.stopClock argument should be of type AnimatedClock but got ${clockNode}`\n );\n super({ type: 'clockStop', clock: clockNode });\n this._clockNode = clockNode;\n }\n\n toString() {\n return `AnimatedStopClock, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n this._clockNode.stop();\n return 0;\n }\n}\n\nexport function createAnimatedStopClock(clock) {\n return new AnimatedStopClock(clock);\n}\n","import AnimatedNode from './AnimatedNode';\n\nclass AnimatedClockTest extends AnimatedNode {\n _clockNode;\n\n constructor(clockNode) {\n super({ type: 'clockTest', clock: clockNode });\n this._clockNode = clockNode;\n }\n\n toString() {\n return `AnimatedClockTest, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n return this._clockNode.isStarted() ? 1 : 0;\n }\n}\n\nexport function createAnimatedClockTest(clock) {\n return new AnimatedClockTest(clock);\n}\n","import invariant from 'invariant';\nimport { NativeModules } from 'react-native';\nimport { val } from '../val';\nimport { adapt, createAnimatedBlock as block } from './AnimatedBlock';\nimport { createAnimatedCall as call } from './AnimatedCall';\nimport AnimatedNode from './AnimatedNode';\n\nclass AnimatedDebug extends AnimatedNode {\n _message;\n _value;\n\n constructor(message, value) {\n invariant(\n typeof message === 'string',\n `Reanimated: Animated.debug node first argument should be of type string but got ${message}`\n );\n invariant(\n value instanceof AnimatedNode,\n `Reanimated: Animated.debug node second argument should be of type AnimatedNode but got ${value}`\n );\n super({ type: 'debug', message, value }, [value]);\n this._message = message;\n this._value = value;\n }\n\n toString() {\n return `AnimatedDebug, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n const value = val(this._value);\n console.log(this._message, value);\n return value;\n }\n}\n\nexport function createAnimatedDebug(message, value) {\n if (__DEV__) {\n // hack to detect if app is running in remote debugger\n // https://stackoverflow.com/questions/39022216\n const runningInRemoteDebugger = typeof atob !== 'undefined';\n\n // read the executionEnvironment off of expo-constants without explicitly\n // depending on the package\n const runningInExpoShell =\n NativeModules.NativeUnimoduleProxy?.modulesConstants?.ExponentConstants\n ?.executionEnvironment === 'storeClient';\n\n if (runningInRemoteDebugger || runningInExpoShell) {\n // When running in expo or remote debugger we use JS console.log to output variables\n // otherwise we output to the native console using native debug node\n return block([\n call([value], ([a]) => console.log(`${message} ${a}`)),\n value,\n ]);\n } else {\n return new AnimatedDebug(message, adapt(value));\n }\n }\n // Debugging is disabled in PROD\n return value;\n}\n","import invariant from 'invariant';\nimport { adapt } from '../core/AnimatedBlock';\nimport AnimatedNode from './AnimatedNode';\nimport { val } from '../val';\n\nclass AnimatedConcat extends AnimatedNode {\n constructor(input) {\n invariant(\n input.every(\n (el) =>\n el instanceof AnimatedNode ||\n typeof el === 'number' ||\n typeof el === 'string'\n ),\n `Reanimated: Animated.concat node arguments should be of type AnimatedNode or String or Number. One or more of them are not of that type. Node: ${input}`\n );\n super({ type: 'concat', input }, input);\n this._input = input;\n }\n\n __onEvaluate() {\n return this._input.reduce((prev, current) => prev + val(current), '');\n }\n\n toString() {\n return `AnimatedConcat, id: ${this.__nodeID}`;\n }\n}\n\nexport function createAnimatedConcat(...args) {\n return new AnimatedConcat(args.map(adapt));\n}\n","import { val } from '../val';\nimport AnimatedNode from './AnimatedNode';\nimport invariant from 'invariant';\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX = 0;\n var currentT = 0;\n var i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (\n Math.abs(currentX) > SUBDIVISION_PRECISION &&\n ++i < SUBDIVISION_MAX_ITERATIONS\n );\n return currentT;\n}\n\nfunction newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction bezier(mX1, mY1, mX2, mY2) {\n // Precompute samples table\n var sampleValues = float32ArraySupported\n ? new Float32Array(kSplineTableSize)\n : new Array(kSplineTableSize);\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n\n function getTForX(aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (\n ;\n currentSample !== lastSample && sampleValues[currentSample] <= aX;\n ++currentSample\n ) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist =\n (aX - sampleValues[currentSample]) /\n (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(\n aX,\n intervalStart,\n intervalStart + kSampleStepSize,\n mX1,\n mX2\n );\n }\n }\n\n return function BezierEasing(x) {\n if (mX1 === mY1 && mX2 === mY2) {\n return x; // linear\n }\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n}\n\nexport default class AnimatedBezier extends AnimatedNode {\n _value;\n _bezier;\n\n constructor(value, mX1, mY1, mX2, mY2) {\n invariant(\n value instanceof AnimatedNode,\n `Reanimated: Bezier node argument should be of type AnimatedNode but got ${value}`\n );\n super({ type: 'bezier', mX1, mY1, mX2, mY2, input: value }, [value]);\n this._value = value;\n this._bezier = bezier(mX1, mY1, mX2, mY2);\n }\n\n toString() {\n return `AnimatedBezier, id: ${this.__nodeID}`;\n }\n\n __onEvaluate() {\n return this._bezier(val(this._value));\n }\n}\n","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\n\nexport function Bezier(\n mX1: number,\n mY1: number,\n mX2: number,\n mY2: number\n): (x: number) => number {\n 'worklet';\n\n const NEWTON_ITERATIONS = 4;\n const NEWTON_MIN_SLOPE = 0.001;\n const SUBDIVISION_PRECISION = 0.0000001;\n const SUBDIVISION_MAX_ITERATIONS = 10;\n\n const kSplineTableSize = 11;\n const kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n function A(aA1: number, aA2: number): number {\n 'worklet';\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n function B(aA1: number, aA2: number): number {\n 'worklet';\n return 3.0 * aA2 - 6.0 * aA1;\n }\n function C(aA1: number) {\n 'worklet';\n return 3.0 * aA1;\n }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier(aT: number, aA1: number, aA2: number): number {\n 'worklet';\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n function getSlope(aT: number, aA1: number, aA2: number): number {\n 'worklet';\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(\n aX: number,\n aA: number,\n aB: number,\n mX1: number,\n mX2: number\n ): number {\n 'worklet';\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (\n Math.abs(currentX) > SUBDIVISION_PRECISION &&\n ++i < SUBDIVISION_MAX_ITERATIONS\n );\n return currentT;\n }\n\n function newtonRaphsonIterate(\n aX: number,\n aGuessT: number,\n mX1: number,\n mX2: number\n ): number {\n 'worklet';\n for (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n const currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n const currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n function LinearEasing(x: number): number {\n 'worklet';\n return x;\n }\n\n if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // FIXME: Float32Array is not available in Hermes right now\n //\n // var float32ArraySupported = typeof Float32Array === 'function';\n // const sampleValues = float32ArraySupported\n // ? new Float32Array(kSplineTableSize)\n // : new Array(kSplineTableSize);\n\n // Precompute samples table\n const sampleValues = new Array(kSplineTableSize);\n\n for (let i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX(aX: number): number {\n 'worklet';\n let intervalStart = 0.0;\n let currentSample = 1;\n const lastSample = kSplineTableSize - 1;\n\n for (\n ;\n currentSample !== lastSample && sampleValues[currentSample] <= aX;\n ++currentSample\n ) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n const dist =\n (aX - sampleValues[currentSample]) /\n (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n const guessForT = intervalStart + dist * kSampleStepSize;\n\n const initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(\n aX,\n intervalStart,\n intervalStart + kSampleStepSize,\n mX1,\n mX2\n );\n }\n }\n\n return function BezierEasing(x) {\n 'worklet';\n if (mX1 === mY1 && mX2 === mY2) {\n return x; // linear\n }\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n}\n","/* global _updateProps */\nimport { MutableRefObject } from 'react';\nimport { processColor } from './Colors';\nimport { AnimatedStyle, SharedValue, StyleProps } from './commonTypes';\nimport { makeShareable, isConfigured } from './core';\nimport { Descriptor } from './hook/commonTypes';\nimport { _updatePropsJS } from './js-reanimated';\nimport { shouldBeUseWeb } from './PlatformChecker';\nimport { ViewRefSet } from './ViewDescriptorsSet';\n\n// copied from react-native/Libraries/Components/View/ReactNativeStyleAttributes\nexport const colorProps = [\n 'backgroundColor',\n 'borderBottomColor',\n 'borderColor',\n 'borderLeftColor',\n 'borderRightColor',\n 'borderTopColor',\n 'borderStartColor',\n 'borderEndColor',\n 'color',\n 'shadowColor',\n 'textDecorationColor',\n 'tintColor',\n 'textShadowColor',\n 'overlayColor',\n];\n\nexport const ColorProperties = !isConfigured() ? [] : makeShareable(colorProps);\n\nlet updatePropsByPlatform;\nif (shouldBeUseWeb()) {\n updatePropsByPlatform = (\n _: SharedValue,\n updates: StyleProps | AnimatedStyle,\n maybeViewRef: ViewRefSet | undefined\n ): void => {\n 'worklet';\n if (maybeViewRef) {\n maybeViewRef.items.forEach((item, _) => {\n _updatePropsJS(updates, item);\n });\n }\n };\n} else {\n updatePropsByPlatform = (\n viewDescriptors: SharedValue,\n updates: StyleProps | AnimatedStyle,\n _: ViewRefSet | undefined\n ): void => {\n 'worklet';\n\n for (const key in updates) {\n if (ColorProperties.indexOf(key) !== -1) {\n updates[key] = processColor(updates[key]);\n }\n }\n\n viewDescriptors.value.forEach((viewDescriptor) => {\n _updateProps(\n viewDescriptor.tag,\n viewDescriptor.name || 'RCTView',\n updates\n );\n });\n };\n}\n\nexport const updateProps: (\n viewDescriptor: SharedValue,\n updates: StyleProps | AnimatedStyle,\n maybeViewRef: ViewRefSet | undefined\n) => void = updatePropsByPlatform;\n\nexport const updatePropsJestWrapper = (\n viewDescriptors: SharedValue,\n updates: AnimatedStyle,\n maybeViewRef: ViewRefSet | undefined,\n animatedStyle: MutableRefObject,\n adapters: ((updates: AnimatedStyle) => void)[]\n): void => {\n adapters.forEach((adapter) => {\n adapter(updates);\n });\n animatedStyle.current.value = {\n ...animatedStyle.current.value,\n ...updates,\n };\n\n updateProps(viewDescriptors, updates, maybeViewRef);\n};\n\nexport default updateProps;\n","import ReanimatedModule from './ReanimatedModule';\n\n/**\n * Styles allowed to be direcly updated in UI thread\n */\nlet UI_THREAD_PROPS_WHITELIST: Record = {\n opacity: true,\n transform: true,\n /* colors */\n backgroundColor: true,\n borderRightColor: true,\n borderBottomColor: true,\n borderColor: true,\n borderEndColor: true,\n borderLeftColor: true,\n borderStartColor: true,\n borderTopColor: true,\n /* ios styles */\n shadowOpacity: true,\n shadowRadius: true,\n /* legacy android transform properties */\n scaleX: true,\n scaleY: true,\n translateX: true,\n translateY: true,\n};\n\n/**\n * Whitelist of view props that can be updated in native thread via UIManagerModule\n */\nlet NATIVE_THREAD_PROPS_WHITELIST: Record = {\n borderBottomWidth: true,\n borderEndWidth: true,\n borderLeftWidth: true,\n borderRightWidth: true,\n borderStartWidth: true,\n borderTopWidth: true,\n borderWidth: true,\n bottom: true,\n flex: true,\n flexGrow: true,\n flexShrink: true,\n height: true,\n left: true,\n margin: true,\n marginBottom: true,\n marginEnd: true,\n marginHorizontal: true,\n marginLeft: true,\n marginRight: true,\n marginStart: true,\n marginTop: true,\n marginVertical: true,\n maxHeight: true,\n maxWidth: true,\n minHeight: true,\n minWidth: true,\n padding: true,\n paddingBottom: true,\n paddingEnd: true,\n paddingHorizontal: true,\n paddingLeft: true,\n paddingRight: true,\n paddingStart: true,\n paddingTop: true,\n paddingVertical: true,\n right: true,\n start: true,\n top: true,\n width: true,\n zIndex: true,\n borderBottomEndRadius: true,\n borderBottomLeftRadius: true,\n borderBottomRightRadius: true,\n borderBottomStartRadius: true,\n borderRadius: true,\n borderTopEndRadius: true,\n borderTopLeftRadius: true,\n borderTopRightRadius: true,\n borderTopStartRadius: true,\n opacity: true,\n elevation: true,\n fontSize: true,\n lineHeight: true,\n textShadowRadius: true,\n letterSpacing: true,\n /* strings */\n display: true,\n backfaceVisibility: true,\n overflow: true,\n resizeMode: true,\n fontStyle: true,\n fontWeight: true,\n textAlign: true,\n textDecorationLine: true,\n fontFamily: true,\n textAlignVertical: true,\n fontVariant: true,\n textDecorationStyle: true,\n textTransform: true,\n writingDirection: true,\n /* text color */\n color: true,\n tintColor: true,\n shadowColor: true,\n placeholderTextColor: true,\n};\n\nfunction configureProps(): void {\n ReanimatedModule.configureProps(\n Object.keys(NATIVE_THREAD_PROPS_WHITELIST),\n Object.keys(UI_THREAD_PROPS_WHITELIST)\n );\n}\n\nexport function addWhitelistedNativeProps(\n props: Record\n): void {\n const oldSize = Object.keys(NATIVE_THREAD_PROPS_WHITELIST).length;\n NATIVE_THREAD_PROPS_WHITELIST = {\n ...NATIVE_THREAD_PROPS_WHITELIST,\n ...props,\n };\n if (oldSize !== Object.keys(NATIVE_THREAD_PROPS_WHITELIST).length) {\n configureProps();\n }\n}\n\nexport function addWhitelistedUIProps(props: Record): void {\n const oldSize = Object.keys(UI_THREAD_PROPS_WHITELIST).length;\n UI_THREAD_PROPS_WHITELIST = { ...UI_THREAD_PROPS_WHITELIST, ...props };\n if (oldSize !== Object.keys(UI_THREAD_PROPS_WHITELIST).length) {\n configureProps();\n }\n}\n\nconst PROCESSED_VIEW_NAMES = new Set();\n\ninterface ViewConfig {\n uiViewClassName: string;\n validAttributes: Record;\n}\n/**\n * updates UI props whitelist for given view host instance\n * this will work just once for every view name\n */\n\nexport function adaptViewConfig(viewConfig: ViewConfig): void {\n const viewName = viewConfig.uiViewClassName;\n const props = viewConfig.validAttributes;\n\n // update whitelist of UI props for this view name only once\n if (!PROCESSED_VIEW_NAMES.has(viewName)) {\n const propsToAdd: Record = {};\n Object.keys(props).forEach((key) => {\n // we don't want to add native props as they affect layout\n // we also skip props which repeat here\n if (\n !(key in NATIVE_THREAD_PROPS_WHITELIST) &&\n !(key in UI_THREAD_PROPS_WHITELIST)\n ) {\n propsToAdd[key] = true;\n }\n });\n addWhitelistedUIProps(propsToAdd);\n\n PROCESSED_VIEW_NAMES.add(viewName);\n }\n}\n\nconfigureProps();\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nexport { default as RNRenderer } from 'react-native/Libraries/Renderer/shims/ReactNative';\n","import {\n LayoutAnimationFunction,\n EntryAnimationsValues,\n ExitAnimationsValues,\n AnimationConfigFunction,\n} from '../animationBuilder/commonTypes';\n\nexport const DefaultLayout: LayoutAnimationFunction = (values) => {\n 'worklet';\n return {\n initialValues: {\n originX: values.targetOriginX,\n originY: values.targetOriginY,\n width: values.targetWidth,\n height: values.targetHeight,\n },\n animations: {},\n };\n};\n\nexport const DefaultEntering: AnimationConfigFunction = (\n values\n) => {\n 'worklet';\n return {\n initialValues: {\n originX: values.targetOriginX,\n originY: values.targetOriginY,\n width: values.targetWidth,\n height: values.targetHeight,\n },\n animations: {},\n };\n};\n\nexport const DefaultExiting: AnimationConfigFunction = (\n values\n) => {\n 'worklet';\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {},\n };\n};\n","export {\n HigherOrderAnimation,\n NextAnimation,\n RepeatAnimation,\n SequenceAnimation,\n StyleLayoutAnimation,\n} from './commonTypes';\nexport { cancelAnimation, defineAnimation, initialUpdaterRun } from './util';\nexport { withTiming, TimingAnimation } from './timing';\nexport { withSpring, SpringAnimation } from './spring';\nexport { withDecay, DecayAnimation } from './decay';\nexport { withDelay } from './delay';\nexport { withRepeat } from './repeat';\nexport { withSequence } from './sequence';\nexport { withStyleAnimation } from './styleAnimation';\n","import {\n AnimatedStyle,\n StyleProps,\n AnimatableValue,\n AnimationObject,\n Animation,\n Timestamp,\n AnimationCallback,\n} from '../commonTypes';\n\nexport interface HigherOrderAnimation {\n isHigherOrder?: boolean;\n}\n\nexport type NextAnimation = T | (() => T);\n\nexport interface DelayAnimation\n extends Animation,\n HigherOrderAnimation {\n startTime: Timestamp;\n started: boolean;\n previousAnimation: DelayAnimation | null;\n current: AnimatableValue;\n}\n\nexport interface RepeatAnimation\n extends Animation,\n HigherOrderAnimation {\n reps: number;\n startValue: AnimatableValue;\n toValue?: AnimatableValue;\n previousAnimation?: RepeatAnimation;\n}\n\nexport interface SequenceAnimation\n extends Animation,\n HigherOrderAnimation {\n animationIndex: number;\n}\n\nexport interface StyleLayoutAnimation extends HigherOrderAnimation {\n current: StyleProps;\n styleAnimations: AnimatedStyle;\n onFrame: (animation: StyleLayoutAnimation, timestamp: Timestamp) => boolean;\n onStart: (\n nextAnimation: StyleLayoutAnimation,\n current: AnimatedStyle,\n timestamp: Timestamp,\n previousAnimation: StyleLayoutAnimation\n ) => void;\n callback?: AnimationCallback;\n}\n","import { defineAnimation } from './util';\nimport {\n Animation,\n AnimationCallback,\n AnimatableValue,\n Timestamp,\n} from '../commonTypes';\n\ninterface SpringConfig {\n mass?: number;\n stiffness?: number;\n overshootClamping?: boolean;\n restDisplacementThreshold?: number;\n restSpeedThreshold?: number;\n velocity?: number;\n damping?: number;\n}\n\nexport interface SpringAnimation extends Animation {\n current: AnimatableValue;\n toValue: AnimatableValue;\n velocity: number;\n lastTimestamp: Timestamp;\n}\n\nexport interface InnerSpringAnimation\n extends Omit {\n toValue: number;\n current: number;\n}\n\nexport function withSpring(\n toValue: AnimatableValue,\n userConfig?: SpringConfig,\n callback?: AnimationCallback\n): Animation {\n 'worklet';\n\n return defineAnimation(toValue, () => {\n 'worklet';\n\n // TODO: figure out why we can't use spread or Object.assign here\n // when user config is \"frozen object\" we can't enumerate it (perhaps\n // something is wrong with the object prototype).\n const config: Required = {\n damping: 10,\n mass: 1,\n stiffness: 100,\n overshootClamping: false,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 2,\n velocity: 0,\n };\n if (userConfig) {\n Object.keys(userConfig).forEach(\n (key) =>\n ((config as any)[key] = userConfig[key as keyof typeof userConfig])\n );\n }\n\n function spring(animation: InnerSpringAnimation, now: Timestamp): boolean {\n const { toValue, lastTimestamp, current, velocity } = animation;\n\n const deltaTime = Math.min(now - lastTimestamp, 64);\n animation.lastTimestamp = now;\n\n const c = config.damping;\n const m = config.mass;\n const k = config.stiffness;\n\n const v0 = -velocity;\n const x0 = toValue - current;\n\n const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n const omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay\n\n const t = deltaTime / 1000;\n\n const sin1 = Math.sin(omega1 * t);\n const cos1 = Math.cos(omega1 * t);\n\n // under damped\n const underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n const underDampedFrag1 =\n underDampedEnvelope *\n (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\n const underDampedPosition = toValue - underDampedFrag1;\n // This looks crazy -- it's actually just the derivative of the oscillation function\n const underDampedVelocity =\n zeta * omega0 * underDampedFrag1 -\n underDampedEnvelope *\n (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\n // critically damped\n const criticallyDampedEnvelope = Math.exp(-omega0 * t);\n const criticallyDampedPosition =\n toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\n const criticallyDampedVelocity =\n criticallyDampedEnvelope *\n (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\n const isOvershooting = () => {\n if (config.overshootClamping && config.stiffness !== 0) {\n return current < toValue\n ? animation.current > toValue\n : animation.current < toValue;\n } else {\n return false;\n }\n };\n\n const isVelocity = Math.abs(velocity) < config.restSpeedThreshold;\n const isDisplacement =\n config.stiffness === 0 ||\n Math.abs(toValue - current) < config.restDisplacementThreshold;\n\n if (zeta < 1) {\n animation.current = underDampedPosition;\n animation.velocity = underDampedVelocity;\n } else {\n animation.current = criticallyDampedPosition;\n animation.velocity = criticallyDampedVelocity;\n }\n\n if (isOvershooting() || (isVelocity && isDisplacement)) {\n if (config.stiffness !== 0) {\n animation.velocity = 0;\n animation.current = toValue;\n }\n // clear lastTimestamp to avoid using stale value by the next spring animation that starts after this one\n animation.lastTimestamp = 0;\n return true;\n }\n return false;\n }\n\n function onStart(\n animation: SpringAnimation,\n value: number,\n now: Timestamp,\n previousAnimation: SpringAnimation\n ): void {\n animation.current = value;\n if (previousAnimation) {\n animation.velocity =\n previousAnimation.velocity || animation.velocity || 0;\n animation.lastTimestamp = previousAnimation.lastTimestamp || now;\n } else {\n animation.lastTimestamp = now;\n }\n }\n\n return {\n onFrame: spring,\n onStart,\n toValue,\n velocity: config.velocity || 0,\n current: toValue,\n callback,\n lastTimestamp: 0,\n } as SpringAnimation;\n });\n}\n","import { defineAnimation } from './util';\nimport {\n Animation,\n AnimationCallback,\n AnimationObject,\n AnimatableValue,\n Timestamp,\n} from '../commonTypes';\nimport { Platform } from 'react-native';\n\ninterface DecayConfig {\n deceleration?: number;\n velocityFactor?: number;\n clamp?: number[];\n velocity?: number;\n}\n\ninterface DefaultDecayConfig {\n deceleration: number;\n velocityFactor: number;\n clamp?: number[];\n velocity: number;\n}\n\nexport interface DecayAnimation extends Animation {\n lastTimestamp: Timestamp;\n startTimestamp: Timestamp;\n initialVelocity: number;\n velocity: number;\n current: AnimatableValue;\n}\n\nexport interface InnerDecayAnimation\n extends Omit,\n AnimationObject {\n current: number;\n}\n\nexport function withDecay(\n userConfig: DecayConfig,\n callback?: AnimationCallback\n): Animation {\n 'worklet';\n\n return defineAnimation(0, () => {\n 'worklet';\n const config: DefaultDecayConfig = {\n deceleration: 0.998,\n velocityFactor: Platform.OS !== 'web' ? 1 : 1000,\n velocity: 0,\n };\n if (userConfig) {\n Object.keys(userConfig).forEach(\n (key) =>\n ((config as any)[key] = userConfig[key as keyof typeof userConfig])\n );\n }\n\n const VELOCITY_EPS = Platform.OS !== 'web' ? 1 : 1 / 20;\n const SLOPE_FACTOR = 0.1;\n\n function decay(animation: InnerDecayAnimation, now: number): boolean {\n const {\n lastTimestamp,\n startTimestamp,\n initialVelocity,\n current,\n velocity,\n } = animation;\n\n const deltaTime = Math.min(now - lastTimestamp, 64);\n const v =\n velocity *\n Math.exp(\n -(1 - config.deceleration) * (now - startTimestamp) * SLOPE_FACTOR\n );\n animation.current =\n current + (v * config.velocityFactor * deltaTime) / 1000; // /1000 because time is in ms not in s\n animation.velocity = v;\n animation.lastTimestamp = now;\n\n if (config.clamp) {\n if (initialVelocity < 0 && animation.current <= config.clamp[0]) {\n animation.current = config.clamp[0];\n return true;\n } else if (\n initialVelocity > 0 &&\n animation.current >= config.clamp[1]\n ) {\n animation.current = config.clamp[1];\n return true;\n }\n }\n\n return Math.abs(v) < VELOCITY_EPS;\n }\n\n function validateConfig(): void {\n if (config.clamp) {\n if (!Array.isArray(config.clamp)) {\n throw Error(\n `config.clamp must be an array but is ${typeof config.clamp}`\n );\n }\n if (config.clamp.length !== 2) {\n throw Error(\n `clamp array must contain 2 items but is given ${config.clamp.length}`\n );\n }\n }\n if (config.velocityFactor <= 0) {\n throw Error(\n `config.velocityFactor must be greather then 0 but is ${config.velocityFactor}`\n );\n }\n }\n\n function onStart(\n animation: DecayAnimation,\n value: number,\n now: Timestamp\n ): void {\n animation.current = value;\n animation.lastTimestamp = now;\n animation.startTimestamp = now;\n animation.initialVelocity = config.velocity;\n validateConfig();\n }\n\n return {\n onFrame: decay,\n onStart,\n callback,\n velocity: config.velocity ?? 0,\n initialVelocity: 0,\n current: 0,\n lastTimestamp: 0,\n startTimestamp: 0,\n } as DecayAnimation;\n });\n}\n","import { defineAnimation } from './util';\nimport { Animation, Timestamp, AnimatableValue } from '../commonTypes';\nimport { NextAnimation, DelayAnimation } from './commonTypes';\n\nexport function withDelay(\n delayMs: number,\n _nextAnimation: NextAnimation\n): Animation {\n 'worklet';\n return defineAnimation(_nextAnimation, () => {\n 'worklet';\n const nextAnimation =\n typeof _nextAnimation === 'function' ? _nextAnimation() : _nextAnimation;\n\n function delay(animation: DelayAnimation, now: Timestamp): boolean {\n const { startTime, started, previousAnimation } = animation;\n\n if (now - startTime > delayMs) {\n if (!started) {\n nextAnimation.onStart(\n nextAnimation,\n animation.current,\n now,\n previousAnimation as DelayAnimation\n );\n animation.previousAnimation = null;\n animation.started = true;\n }\n const finished = nextAnimation.onFrame(nextAnimation, now);\n animation.current = nextAnimation.current;\n return finished;\n } else if (previousAnimation) {\n const finished =\n previousAnimation.finished ||\n previousAnimation.onFrame(previousAnimation, now);\n animation.current = previousAnimation.current;\n if (finished) {\n animation.previousAnimation = null;\n }\n }\n return false;\n }\n\n function onStart(\n animation: DelayAnimation,\n value: AnimatableValue,\n now: Timestamp,\n previousAnimation: DelayAnimation\n ): void {\n animation.startTime = now;\n animation.started = false;\n animation.current = value;\n if (previousAnimation === animation) {\n animation.previousAnimation = previousAnimation.previousAnimation;\n } else {\n animation.previousAnimation = previousAnimation;\n }\n }\n\n const callback = (finished?: boolean): void => {\n if (nextAnimation.callback) {\n nextAnimation.callback(finished);\n }\n };\n\n return {\n isHigherOrder: true,\n onFrame: delay,\n onStart,\n current: nextAnimation.current,\n callback,\n previousAnimation: null,\n startTime: 0,\n started: false,\n };\n });\n}\n\n/**\n * @deprecated Kept for backward compatibility. Will be removed soon.\n */\nexport function delay(\n delayMs: number,\n _nextAnimation: NextAnimation\n): Animation {\n 'worklet';\n console.warn('Method `delay` is deprecated. Please use `withDelay` instead');\n return withDelay(delayMs, _nextAnimation);\n}\n","import { defineAnimation } from './util';\nimport {\n Animation,\n AnimationCallback,\n AnimatableValue,\n Timestamp,\n} from '../commonTypes';\nimport { NextAnimation, RepeatAnimation } from './commonTypes';\n\nexport interface InnerRepeatAnimation\n extends Omit {\n toValue: number;\n startValue: number;\n}\n\nexport function withRepeat(\n _nextAnimation: NextAnimation,\n numberOfReps = 2,\n reverse = false,\n callback?: AnimationCallback\n): Animation {\n 'worklet';\n\n return defineAnimation(_nextAnimation, () => {\n 'worklet';\n\n const nextAnimation: RepeatAnimation =\n typeof _nextAnimation === 'function' ? _nextAnimation() : _nextAnimation;\n\n function repeat(animation: InnerRepeatAnimation, now: Timestamp): boolean {\n const finished = nextAnimation.onFrame(nextAnimation, now);\n animation.current = nextAnimation.current;\n if (finished) {\n animation.reps += 1;\n // call inner animation's callback on every repetition\n // as the second argument the animation's current value is passed\n if (nextAnimation.callback) {\n nextAnimation.callback(true /* finished */, animation.current);\n }\n if (numberOfReps > 0 && animation.reps >= numberOfReps) {\n return true;\n }\n\n const startValue = reverse\n ? (nextAnimation.current as number)\n : animation.startValue;\n if (reverse) {\n nextAnimation.toValue = animation.startValue;\n animation.startValue = startValue;\n }\n nextAnimation.onStart(\n nextAnimation,\n startValue,\n now,\n nextAnimation.previousAnimation as RepeatAnimation\n );\n return false;\n }\n return false;\n }\n\n const repCallback = (finished: boolean): void => {\n if (callback) {\n callback(finished);\n }\n // when cancelled call inner animation's callback\n if (!finished && nextAnimation.callback) {\n nextAnimation.callback(false /* finished */);\n }\n };\n\n function onStart(\n animation: RepeatAnimation,\n value: AnimatableValue,\n now: Timestamp,\n previousAnimation: RepeatAnimation\n ): void {\n animation.startValue = value;\n animation.reps = 0;\n nextAnimation.onStart(nextAnimation, value, now, previousAnimation);\n }\n\n return {\n isHigherOrder: true,\n onFrame: repeat,\n onStart,\n reps: 0,\n current: nextAnimation.current,\n callback: repCallback,\n startValue: 0,\n } as RepeatAnimation;\n });\n}\n\n/**\n * @deprecated Kept for backward compatibility. Will be removed soon.\n */\nexport function repeat(\n _nextAnimation: NextAnimation,\n numberOfReps = 2,\n reverse = false,\n callback?: AnimationCallback\n): Animation {\n 'worklet';\n console.warn(\n 'Method `repeat` is deprecated. Please use `withRepeat` instead'\n );\n return withRepeat(_nextAnimation, numberOfReps, reverse, callback);\n}\n\nexport function loop(\n nextAnimation: NextAnimation,\n numberOfLoops = 1\n): Animation {\n 'worklet';\n console.warn('Method `loop` is deprecated. Please use `withRepeat` instead');\n return repeat(nextAnimation, Math.round(numberOfLoops * 2), true);\n}\n","import { defineAnimation } from './util';\nimport { NextAnimation, SequenceAnimation } from './commonTypes';\nimport {\n Animation,\n AnimatableValue,\n AnimationObject,\n Timestamp,\n} from '../commonTypes';\n\nexport function withSequence(\n ..._animations: NextAnimation[]\n): Animation {\n 'worklet';\n return defineAnimation(\n _animations[0] as SequenceAnimation,\n () => {\n 'worklet';\n const animations = _animations.map((a) => {\n const result = typeof a === 'function' ? a() : a;\n result.finished = false;\n return result;\n });\n const firstAnimation = animations[0];\n\n const callback = (finished: boolean): void => {\n if (finished) {\n // we want to call the callback after every single animation\n // not after all of them\n return;\n }\n // this is going to be called only if sequence has been cancelled\n animations.forEach((animation) => {\n if (typeof animation.callback === 'function' && !animation.finished) {\n animation.callback(finished);\n }\n });\n };\n\n function sequence(animation: SequenceAnimation, now: Timestamp): boolean {\n const currentAnim = animations[animation.animationIndex];\n const finished = currentAnim.onFrame(currentAnim, now);\n animation.current = currentAnim.current;\n if (finished) {\n // we want to call the callback after every single animation\n if (currentAnim.callback) {\n currentAnim.callback(true /* finished */);\n }\n currentAnim.finished = true;\n animation.animationIndex += 1;\n if (animation.animationIndex < animations.length) {\n const nextAnim = animations[animation.animationIndex];\n nextAnim.onStart(nextAnim, currentAnim.current, now, currentAnim);\n return false;\n }\n return true;\n }\n return false;\n }\n\n function onStart(\n animation: SequenceAnimation,\n value: AnimatableValue,\n now: Timestamp,\n previousAnimation: SequenceAnimation\n ): void {\n if (animations.length === 1) {\n throw Error(\n 'withSequence() animation require more than one animation as argument'\n );\n }\n animation.animationIndex = 0;\n if (previousAnimation === undefined) {\n previousAnimation = animations[\n animations.length - 1\n ] as SequenceAnimation;\n }\n firstAnimation.onStart(firstAnimation, value, now, previousAnimation);\n }\n\n return {\n isHigherOrder: true,\n onFrame: sequence,\n onStart,\n animationIndex: 0,\n current: firstAnimation.current,\n callback,\n } as SequenceAnimation;\n }\n );\n}\n\n/**\n * @deprecated Kept for backward compatibility. Will be removed soon.\n */\nexport function sequence(\n ..._animations: NextAnimation[]\n): Animation {\n 'worklet';\n console.warn(\n 'Method `sequence` is deprecated. Please use `withSequence` instead'\n );\n return withSequence(..._animations);\n}\n","import EasingNode from './Easing';\nimport AnimatedClock from './core/AnimatedClock';\nimport AnimatedValue from './core/AnimatedValue';\nimport AnimatedNode from './core/AnimatedNode';\nimport AnimatedCode from './core/AnimatedCode';\nimport decay from './animations/decay';\nimport timing from './animations/timing';\nimport spring from './animations/spring';\nimport Animation from './animations/Animation';\nimport {\n Transition,\n Transitioning,\n createTransitioningComponent,\n} from './Transitioning';\nimport SpringUtils from './animations/SpringUtils';\nimport useValue from './useValue';\nimport backwardCompatibleAnimWrapper from './animations/backwardCompatibleAnimWrapper';\n\nconst decayWrapper = backwardCompatibleAnimWrapper(\n decay,\n Animation.decayDefaultState\n);\nconst timingWrapper = backwardCompatibleAnimWrapper(\n timing,\n Animation.timingDefaultState\n);\nconst springWrapper = backwardCompatibleAnimWrapper(\n spring,\n Animation.springDefaultState\n);\n\n// operations\nexport * from './base';\nexport * from './derived';\nexport {\n AnimatedCode as Code,\n // transitions\n EasingNode,\n Transitioning,\n Transition,\n createTransitioningComponent,\n // nodes\n AnimatedClock as Clock,\n AnimatedValue as Value,\n AnimatedNode as Node,\n // animations\n decayWrapper as decay,\n timingWrapper as timing,\n springWrapper as spring,\n SpringUtils,\n // hooks\n useValue,\n};\n","import useCode from '../derived/useCode';\nimport AnimatedNode from './AnimatedNode';\n\nfunction assertNodesNotNull(code, children, exec) {\n if (!code) {\n const error = !children\n ? `Got \"${typeof children}\" type passed to children`\n : `Got \"${typeof exec}\" type passed to exec`;\n\n throw new Error(\n ` expects the 'exec' prop or children to be an animated node or a function returning an animated node. ${error}`\n );\n }\n}\n\nfunction Code({ exec, children, dependencies }) {\n const nodes = children || exec;\n\n let code = null;\n if (nodes instanceof AnimatedNode) {\n code = () => nodes;\n } else if (typeof nodes === 'function') {\n code = nodes;\n }\n\n assertNodesNotNull(code, children, exec);\n\n useCode(code, dependencies);\n return null;\n}\n\nexport default Code;\n","import React from 'react';\nimport { always, block } from '../base';\n\n/**\n * @callback NodeFactory\n * Function to create a node or an array of nodes.\n * @returns {(Node[] | Node | null | undefined | Boolean)}\n */\n\n/**\n * React hook to run a node.\n * @param {NodeFactory} nodeFactory Function to build the node to run.\n * @param dependencies Array of dependencies. Refresh the node on changes.\n */\nexport default function useCode(nodeFactory, dependencies) {\n if (!(React.useEffect instanceof Function)) return;\n\n React.useEffect(() => {\n // check and correct 1st parameter\n if (!(nodeFactory instanceof Function)) {\n console.warn(\n 'useCode() first argument should be a function that returns an animation node.'\n );\n\n const node = nodeFactory;\n nodeFactory = () => node;\n }\n\n let node = nodeFactory();\n if (node) {\n // allow factory to return array\n if (node instanceof Array) node = block(node);\n\n const animatedAlways = always(node);\n animatedAlways.__attach();\n\n // return undo function\n return () => animatedAlways.__detach();\n }\n }, dependencies);\n}\n","import {\n cond,\n sub,\n pow,\n divide,\n multiply,\n add,\n block,\n set,\n lessThan,\n proc,\n abs,\n} from '../base';\n\nconst VELOCITY_EPS = 5;\n\nfunction decay(clock, state, config) {\n const lastTime = cond(state.time, state.time, clock);\n const deltaTime = sub(clock, lastTime);\n\n // v0 = v / 1000\n // v = v0 * powf(deceleration, dt);\n // v = v * 1000;\n\n // x0 = x;\n // x = x0 + v0 * deceleration * (1 - powf(deceleration, dt)) / (1 - deceleration)\n const kv = pow(config.deceleration, deltaTime);\n const kx = divide(\n multiply(config.deceleration, sub(1, kv)),\n sub(1, config.deceleration)\n );\n const v0 = divide(state.velocity, 1000);\n const v = multiply(v0, kv, 1000);\n const x = add(state.position, multiply(v0, kx));\n return block([\n set(state.position, x),\n set(state.velocity, v),\n set(state.time, clock),\n cond(lessThan(abs(v), VELOCITY_EPS), set(state.finished, 1)),\n ]);\n}\n\nconst procDecay = proc(\n (clock, time, velocity, position, finished, deceleration) =>\n decay(clock, { time, velocity, position, finished }, { deceleration })\n);\n\nexport default function decayAnimation(\n clock,\n { time, velocity, position, finished },\n { deceleration }\n) {\n return procDecay(clock, time, velocity, position, finished, deceleration);\n}\n","import {\n cond,\n sub,\n divide,\n multiply,\n add,\n block,\n set,\n greaterOrEq,\n proc,\n} from '../base';\n\nconst internalTiming = proc(function (\n clock,\n time,\n frameTime,\n position,\n finished,\n toValue,\n duration,\n nextProgress,\n progress,\n newFrameTime\n) {\n const state = {\n time,\n finished,\n frameTime,\n position,\n };\n\n const config = {\n duration,\n toValue,\n };\n\n const distanceLeft = sub(config.toValue, state.position);\n const fullDistance = divide(distanceLeft, sub(1, progress));\n const startPosition = sub(config.toValue, fullDistance);\n const nextPosition = add(startPosition, multiply(fullDistance, nextProgress));\n\n return block([\n cond(\n greaterOrEq(newFrameTime, config.duration),\n [set(state.position, config.toValue), set(state.finished, 1)],\n set(state.position, nextPosition)\n ),\n set(state.frameTime, newFrameTime),\n set(state.time, clock),\n ]);\n});\n\nexport default function timing(clock, state, config) {\n if (config.duration === 0) {\n // when duration is zero we end the timing immediately\n return block([set(state.position, config.toValue), set(state.finished, 1)]);\n }\n const lastTime = cond(state.time, state.time, clock);\n const newFrameTime = add(state.frameTime, sub(clock, lastTime));\n const nextProgress = config.easing(divide(newFrameTime, config.duration));\n const progress = config.easing(divide(state.frameTime, config.duration));\n return internalTiming(\n clock,\n state.time,\n state.frameTime,\n state.position,\n state.finished,\n config.toValue,\n config.duration,\n nextProgress,\n progress,\n newFrameTime\n );\n}\n","import {\n cond,\n sub,\n divide,\n multiply,\n sqrt,\n add,\n block,\n set,\n exp,\n sin,\n cos,\n eq,\n or,\n neq,\n and,\n lessThan,\n greaterThan,\n proc,\n min,\n abs,\n} from '../base';\nimport AnimatedValue from '../core/InternalAnimatedValue';\n\nconst MAX_STEPS_MS = 64;\n\nfunction spring(clock, state, config) {\n const lastTime = cond(state.time, state.time, clock);\n\n const deltaTime = min(sub(clock, lastTime), MAX_STEPS_MS);\n\n const c = config.damping;\n const m = config.mass;\n const k = config.stiffness;\n\n const v0 = multiply(-1, state.velocity);\n const x0 = sub(config.toValue, state.position);\n\n const zeta = divide(c, multiply(2, sqrt(multiply(k, m)))); // damping ratio\n const omega0 = sqrt(divide(k, m)); // undamped angular frequency of the oscillator (rad/ms)\n const omega1 = multiply(omega0, sqrt(sub(1, multiply(zeta, zeta)))); // exponential decay\n\n const t = divide(deltaTime, 1000); // in seconds\n\n const sin1 = sin(multiply(omega1, t));\n const cos1 = cos(multiply(omega1, t));\n\n // under damped\n const underDampedEnvelope = exp(multiply(-1, zeta, omega0, t));\n const underDampedFrag1 = multiply(\n underDampedEnvelope,\n add(\n multiply(sin1, divide(add(v0, multiply(zeta, omega0, x0)), omega1)),\n multiply(x0, cos1)\n )\n );\n const underDampedPosition = sub(config.toValue, underDampedFrag1);\n // This looks crazy -- it's actually just the derivative of the oscillation function\n const underDampedVelocity = sub(\n multiply(zeta, omega0, underDampedFrag1),\n multiply(\n underDampedEnvelope,\n sub(\n multiply(cos1, add(v0, multiply(zeta, omega0, x0))),\n multiply(omega1, x0, sin1)\n )\n )\n );\n\n // critically damped\n const criticallyDampedEnvelope = exp(multiply(-1, omega0, t));\n const criticallyDampedPosition = sub(\n config.toValue,\n multiply(\n criticallyDampedEnvelope,\n add(x0, multiply(add(v0, multiply(omega0, x0)), t))\n )\n );\n const criticallyDampedVelocity = multiply(\n criticallyDampedEnvelope,\n add(\n multiply(v0, sub(multiply(t, omega0), 1)),\n multiply(t, x0, omega0, omega0)\n )\n );\n\n // conditions for stopping the spring animations\n const prevPosition = state.prevPosition\n ? state.prevPosition\n : new AnimatedValue(0);\n\n const isOvershooting = cond(\n and(config.overshootClamping, neq(config.stiffness, 0)),\n cond(\n lessThan(prevPosition, config.toValue),\n greaterThan(state.position, config.toValue),\n lessThan(state.position, config.toValue)\n )\n );\n const isVelocity = lessThan(abs(state.velocity), config.restSpeedThreshold);\n const isDisplacement = or(\n eq(config.stiffness, 0),\n lessThan(\n abs(sub(config.toValue, state.position)),\n config.restDisplacementThreshold\n )\n );\n\n return block([\n set(prevPosition, state.position),\n cond(\n lessThan(zeta, 1),\n [\n set(state.position, underDampedPosition),\n set(state.velocity, underDampedVelocity),\n ],\n [\n set(state.position, criticallyDampedPosition),\n set(state.velocity, criticallyDampedVelocity),\n ]\n ),\n set(state.time, clock),\n cond(or(isOvershooting, and(isVelocity, isDisplacement)), [\n cond(neq(config.stiffness, 0), [\n set(state.velocity, 0),\n set(state.position, config.toValue),\n ]),\n set(state.finished, 1),\n ]),\n ]);\n}\n\nconst procSpring = proc(\n (\n finished,\n velocity,\n position,\n time,\n prevPosition,\n toValue,\n damping,\n mass,\n stiffness,\n overshootClamping,\n restSpeedThreshold,\n restDisplacementThreshold,\n clock\n ) =>\n spring(\n clock,\n {\n finished,\n velocity,\n position,\n time,\n prevPosition,\n },\n {\n toValue,\n damping,\n mass,\n stiffness,\n overshootClamping,\n restDisplacementThreshold,\n restSpeedThreshold,\n }\n )\n);\n\nexport default function springAnimation(\n clock,\n { finished, velocity, position, time, prevPosition },\n {\n toValue,\n damping,\n mass,\n stiffness,\n overshootClamping,\n restDisplacementThreshold,\n restSpeedThreshold,\n }\n) {\n return procSpring(\n finished,\n velocity,\n position,\n time,\n prevPosition,\n toValue,\n damping,\n mass,\n stiffness,\n overshootClamping,\n restSpeedThreshold,\n restDisplacementThreshold,\n clock\n );\n}\n","import AnimatedValue from '../core/InternalAnimatedValue';\n\nclass Animation {\n static springDefaultState() {\n return {\n position: new AnimatedValue(0),\n finished: new AnimatedValue(0),\n velocity: new AnimatedValue(0),\n time: new AnimatedValue(0),\n };\n }\n\n static decayDefaultState() {\n return {\n position: new AnimatedValue(0),\n finished: new AnimatedValue(0),\n velocity: new AnimatedValue(0),\n time: new AnimatedValue(0),\n };\n }\n\n static timingDefaultState() {\n return {\n position: new AnimatedValue(0),\n finished: new AnimatedValue(0),\n time: new AnimatedValue(0),\n frameTime: new AnimatedValue(0),\n };\n }\n}\n\nexport default Animation;\n","import React from 'react';\nimport { View, findNodeHandle } from 'react-native';\nimport ReanimatedModule from '../ReanimatedModule';\n\nconst TransitioningContext = React.createContext();\n\nfunction configFromProps(type, props) {\n const config = { type };\n if ('durationMs' in props) {\n config.durationMs = props.durationMs;\n }\n if ('interpolation' in props) {\n config.interpolation = props.interpolation;\n }\n if ('type' in props) {\n config.animation = props.type;\n }\n if ('delayMs' in props) {\n config.delayMs = props.delayMs;\n }\n if ('propagation' in props) {\n config.propagation = props.propagation;\n }\n return config;\n}\n\n/**\n * The below wrapper is used to support legacy context API with Context.Consumer\n * render prop. We need it as we want to access `context` from within\n * `componentDidMount` callback. If we decided to drop support for older\n * react native we could rewrite it using hooks or `static contextType` API.\n */\nfunction wrapTransitioningContext(Comp) {\n return (props) => {\n return (\n \n {(context) => }\n \n );\n };\n}\n\nclass In extends React.Component {\n componentDidMount() {\n this.props.context.push(configFromProps('in', this.props));\n }\n\n render() {\n return this.props.children || null;\n }\n}\n\nclass Change extends React.Component {\n componentDidMount() {\n this.props.context.push(configFromProps('change', this.props));\n }\n\n render() {\n return this.props.children || null;\n }\n}\n\nclass Out extends React.Component {\n componentDidMount() {\n this.props.context.push(configFromProps('out', this.props));\n }\n\n render() {\n return this.props.children || null;\n }\n}\n\nclass Together extends React.Component {\n transitions = [];\n componentDidMount() {\n const config = configFromProps('group', this.props);\n config.transitions = this.transitions;\n this.props.context.push(config);\n }\n\n render() {\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nclass Sequence extends React.Component {\n transitions = [];\n componentDidMount() {\n const config = configFromProps('group', this.props);\n config.sequence = true;\n config.transitions = this.transitions;\n this.props.context.push(config);\n }\n\n render() {\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nfunction createTransitioningComponent(Component) {\n class Wrapped extends React.Component {\n propTypes = Component.propTypes;\n transitions = [];\n viewRef = React.createRef();\n\n componentDidMount() {\n if (this.props.animateMount) {\n this.animateNextTransition();\n }\n }\n\n setNativeProps(props) {\n this.viewRef.current.setNativeProps(props);\n }\n\n animateNextTransition() {\n const viewTag = findNodeHandle(this.viewRef.current);\n ReanimatedModule.animateNextTransition(viewTag, {\n transitions: this.transitions,\n });\n }\n\n render() {\n const { transition, ...rest } = this.props;\n return (\n \n \n {transition}\n \n \n \n );\n }\n }\n return Wrapped;\n}\n\nconst Transitioning = {\n View: createTransitioningComponent(View),\n};\n\nconst Transition = {\n Sequence: wrapTransitioningContext(Sequence),\n Together: wrapTransitioningContext(Together),\n In: wrapTransitioningContext(In),\n Out: wrapTransitioningContext(Out),\n Change: wrapTransitioningContext(Change),\n};\n\nexport { Transitioning, Transition, createTransitioningComponent };\n","import {\n cond,\n sub,\n divide,\n multiply,\n add,\n pow,\n lessOrEq,\n and,\n greaterThan,\n} from './../base';\nimport AnimatedValue from './../core/InternalAnimatedValue';\n\nfunction stiffnessFromOrigamiValue(oValue) {\n return (oValue - 30) * 3.62 + 194;\n}\n\nfunction dampingFromOrigamiValue(oValue) {\n return (oValue - 8) * 3 + 25;\n}\n\nfunction stiffnessFromOrigamiNode(oValue) {\n return add(multiply(sub(oValue, 30), 3.62), 194);\n}\n\nfunction dampingFromOrigamiNode(oValue) {\n return add(multiply(sub(oValue, 8), 3), 25);\n}\n\nfunction makeConfigFromOrigamiTensionAndFriction(prevConfig) {\n const { tension, friction, ...rest } = prevConfig;\n return {\n ...rest,\n stiffness:\n typeof tension === 'number'\n ? stiffnessFromOrigamiValue(tension)\n : stiffnessFromOrigamiNode(tension),\n damping:\n typeof friction === 'number'\n ? dampingFromOrigamiValue(friction)\n : dampingFromOrigamiNode(friction),\n };\n}\n\nfunction makeConfigFromBouncinessAndSpeed(prevConfig) {\n const { bounciness, speed, ...rest } = prevConfig;\n if (typeof bounciness === 'number' && typeof speed === 'number') {\n return fromBouncinessAndSpeedNumbers(bounciness, speed, rest);\n }\n return fromBouncinessAndSpeedNodes(bounciness, speed, rest);\n}\n\nfunction fromBouncinessAndSpeedNodes(bounciness, speed, rest) {\n function normalize(value, startValue, endValue) {\n return divide(sub(value, startValue), sub(endValue, startValue));\n }\n\n function projectNormal(n, start, end) {\n return add(start, multiply(n, sub(end, start)));\n }\n\n function linearInterpolation(t, start, end) {\n return add(multiply(t, end), multiply(sub(1, t), start));\n }\n\n function quadraticOutInterpolation(t, start, end) {\n return linearInterpolation(sub(multiply(2, t), multiply(t, t)), start, end);\n }\n\n function b3Friction1(x) {\n return add(\n sub(multiply(0.0007, pow(x, 3)), multiply(0.031, pow(x, 2))),\n multiply(0.64, x),\n 1.28\n );\n }\n\n function b3Friction2(x) {\n return add(\n sub(multiply(0.000044, pow(x, 3)), multiply(0.006, pow(x, 2))),\n multiply(0.36, x),\n 2\n );\n }\n\n function b3Friction3(x) {\n return add(\n sub(multiply(0.00000045, pow(x, 3)), multiply(0.000332, pow(x, 2))),\n multiply(0.1078, x),\n 5.84\n );\n }\n\n function b3Nobounce(tension) {\n return cond(\n lessOrEq(tension, 18),\n b3Friction1(tension),\n cond(\n and(greaterThan(tension, 18), lessOrEq(tension, 44)),\n b3Friction2(tension),\n b3Friction3(tension)\n )\n );\n }\n\n let b = normalize(divide(bounciness, 1.7), 0, 20);\n b = projectNormal(b, 0, 0.8);\n const s = normalize(divide(speed, 1.7), 0, 20);\n const bouncyTension = projectNormal(s, 0.5, 200);\n const bouncyFriction = quadraticOutInterpolation(\n b,\n b3Nobounce(bouncyTension),\n 0.01\n );\n return {\n ...rest,\n stiffness: stiffnessFromOrigamiNode(bouncyTension),\n damping: dampingFromOrigamiNode(bouncyFriction),\n };\n}\n\nfunction fromBouncinessAndSpeedNumbers(bounciness, speed, rest) {\n function normalize(value, startValue, endValue) {\n return (value - startValue) / (endValue - startValue);\n }\n\n function projectNormal(n, start, end) {\n return start + n * (end - start);\n }\n\n function linearInterpolation(t, start, end) {\n return t * end + (1 - t) * start;\n }\n\n function quadraticOutInterpolation(t, start, end) {\n return linearInterpolation(2 * t - t * t, start, end);\n }\n\n function b3Friction1(x) {\n return 0.0007 * Math.pow(x, 3) - 0.031 * Math.pow(x, 2) + 0.64 * x + 1.28;\n }\n\n function b3Friction2(x) {\n return 0.000044 * Math.pow(x, 3) - 0.006 * Math.pow(x, 2) + 0.36 * x + 2;\n }\n\n function b3Friction3(x) {\n return (\n 0.00000045 * Math.pow(x, 3) -\n 0.000332 * Math.pow(x, 2) +\n 0.1078 * x +\n 5.84\n );\n }\n\n function b3Nobounce(tension) {\n if (tension <= 18) {\n return b3Friction1(tension);\n } else if (tension > 18 && tension <= 44) {\n return b3Friction2(tension);\n } else {\n return b3Friction3(tension);\n }\n }\n\n let b = normalize(bounciness / 1.7, 0, 20);\n b = projectNormal(b, 0, 0.8);\n const s = normalize(speed / 1.7, 0, 20);\n const bouncyTension = projectNormal(s, 0.5, 200);\n const bouncyFriction = quadraticOutInterpolation(\n b,\n b3Nobounce(bouncyTension),\n 0.01\n );\n\n return {\n ...rest,\n stiffness: stiffnessFromOrigamiValue(bouncyTension),\n damping: dampingFromOrigamiValue(bouncyFriction),\n };\n}\n\nfunction makeDefaultConfig() {\n return {\n stiffness: new AnimatedValue(100),\n mass: new AnimatedValue(1),\n damping: new AnimatedValue(10),\n overshootClamping: false,\n restSpeedThreshold: 0.001,\n restDisplacementThreshold: 0.001,\n toValue: new AnimatedValue(0),\n };\n}\n\nexport default {\n makeDefaultConfig,\n makeConfigFromBouncinessAndSpeed,\n makeConfigFromOrigamiTensionAndFriction,\n};\n","import React from 'react';\nimport AnimatedValue from './core/AnimatedValue';\n\nexport default function useValue(initialValue) {\n const ref = React.useRef(null);\n if (ref.current === null) {\n ref.current = new AnimatedValue(initialValue);\n }\n return ref.current;\n}\n","import {\n always,\n block,\n call,\n clockRunning,\n cond,\n set,\n startClock,\n stopClock,\n} from '../base';\nimport Clock from '../core/AnimatedClock';\nimport { evaluateOnce } from '../derived/evaluateOnce';\n\nfunction createOldAnimationObject(node, animationStateDefaults, value, config) {\n const newClock = new Clock();\n const currentState = animationStateDefaults();\n let alwaysNode;\n let isStarted = false;\n let isDone = false;\n let wasStopped = false;\n let animationCallback;\n const animation = {\n start: (currentAnimationCallback) => {\n animationCallback = currentAnimationCallback;\n if (isStarted) {\n animationCallback && animationCallback({ finished: false });\n return;\n }\n if (isDone) {\n console.warn('Animation has been finished before');\n // inconsistent with React Native\n return;\n }\n\n if (!value.isNativelyInitialized()) {\n return;\n }\n\n isStarted = true;\n evaluateOnce(\n set(currentState.position, value),\n currentState.position,\n () => {\n alwaysNode = always(\n set(\n value,\n block([\n cond(clockRunning(newClock), 0, startClock(newClock)),\n node(newClock, currentState, config),\n cond(currentState.finished, [\n call([], () => {\n isStarted = false;\n if (!wasStopped) {\n isDone = true;\n }\n value.__detachAnimation(animation);\n isDone = true;\n if (!wasStopped) {\n wasStopped = false;\n }\n }),\n stopClock(newClock),\n ]),\n currentState.position,\n ])\n )\n );\n value.__attachAnimation(animation);\n alwaysNode.__addChild(value);\n }\n );\n },\n __detach: () => {\n animationCallback && animationCallback({ finished: isDone });\n animationCallback = null;\n value.__initialized && alwaysNode.__removeChild(value);\n },\n stop: () => {\n if (isDone) {\n console.warn(\n 'Calling stop has no effect as the animation has already completed'\n );\n return;\n }\n if (!isStarted) {\n console.warn(\n \"Calling stop has no effect as the animation hasn't been started\"\n );\n return;\n }\n wasStopped = true;\n evaluateOnce(set(currentState.finished, 1), currentState.finished);\n },\n __stopImmediately_testOnly: (result) => {\n animation.stop();\n isDone = result;\n value.__detachAnimation(animation);\n },\n };\n return animation;\n}\n\n/**\n * Depending on the arguments list we either return animation node or return an\n * animation object that is compatible with the original Animated API\n */\nexport default function backwardsCompatibleAnimWrapper(\n node,\n animationStateDefaults\n) {\n return (clock, state, config) => {\n if (config !== undefined) {\n return node(clock, state, config);\n }\n return createOldAnimationObject(node, animationStateDefaults, clock, state);\n };\n}\n","export { default as acc } from './acc';\nexport { default as color } from './color';\nexport { default as diff } from './diff';\nexport { default as diffClamp } from './diffClamp';\nexport { default as interpolateNode, Extrapolate } from './interpolate';\nexport { default as interpolateColors } from './interpolateColors';\nexport { default as onChange } from './onChange';\nexport { default as useCode } from './useCode';\n","import { set, add, proc } from '../base';\nimport AnimatedValue from '../core/InternalAnimatedValue';\n\nconst procAcc = proc(function (v, acc) {\n return set(acc, add(acc, v));\n});\n\nexport default function acc(v) {\n const acc = new AnimatedValue(0);\n return procAcc(v, acc);\n}\n","import { Platform } from 'react-native';\n\nimport {\n add,\n cond,\n concat,\n lessThan,\n multiply,\n round,\n sub,\n proc,\n} from '../base';\nimport AnimatedNode from '../core/AnimatedNode';\n\nconst procColor = proc(function (r, g, b, a) {\n const color = add(\n multiply(a, 1 << 24),\n multiply(round(r), 1 << 16),\n multiply(round(g), 1 << 8),\n round(b)\n );\n\n if (Platform.OS === 'android') {\n // on Android color is represented as signed 32 bit int\n return cond(\n lessThan(color, (1 << 31) >>> 0),\n color,\n sub(color, Math.pow(2, 32))\n );\n }\n return color;\n});\n\nexport default function color(r, g, b, a = 1) {\n if (Platform.OS === 'web') {\n // doesn't support bit shifting\n return concat('rgba(', r, ',', g, ',', b, ',', a, ')');\n }\n\n if (a instanceof AnimatedNode) {\n a = round(multiply(a, 255));\n } else {\n a = Math.round(a * 255);\n }\n\n return procColor(r, g, b, a);\n}\n","import { cond, block, defined, sub, set, proc } from '../base';\nimport AnimatedValue from '../core/InternalAnimatedValue';\n\nconst procDiff = proc(function (v, stash, prev) {\n return block([\n set(stash, cond(defined(prev), sub(v, prev), 0)),\n set(prev, v),\n stash,\n ]);\n});\n\nexport default function diff(v) {\n const stash = new AnimatedValue(0);\n const prev = new AnimatedValue();\n return procDiff(v, stash, prev);\n}\n","import { cond, defined, set, add, min, max } from '../base';\nimport AnimatedValue from '../core/InternalAnimatedValue';\nimport diff from './diff';\n\nexport default function diffClamp(a, minVal, maxVal) {\n const value = new AnimatedValue();\n return set(\n value,\n min(max(add(cond(defined(value), value, a), diff(a)), minVal), maxVal)\n );\n}\n","import { processColor } from 'react-native';\nimport { round } from '../base';\nimport color from './color';\nimport interpolate, { Extrapolate } from './interpolate';\n\nfunction red(c) {\n return (c >> 16) & 255;\n}\nfunction green(c) {\n return (c >> 8) & 255;\n}\nfunction blue(c) {\n return c & 255;\n}\nfunction opacity(c) {\n return ((c >> 24) & 255) / 255;\n}\n\n/**\n * Use this if you want to interpolate an `Animated.Value` into color values.\n *\n * #### Why is this needed?\n *\n * Unfortunately, if you'll pass color values directly into the `outputRange` option\n * of `interpolate()` function, that won't really work (at least at the moment).\n * See https://github.com/software-mansion/react-native-reanimated/issues/181 .\n *\n * So, for now you can just use this helper instead.\n */\nexport default function interpolateColors(animationValue, options) {\n const { inputRange, outputColorRange } = options;\n const colors = outputColorRange.map(processColor);\n\n const r = round(\n interpolate(animationValue, {\n inputRange,\n outputRange: colors.map(red),\n extrapolate: Extrapolate.CLAMP,\n })\n );\n const g = round(\n interpolate(animationValue, {\n inputRange,\n outputRange: colors.map(green),\n extrapolate: Extrapolate.CLAMP,\n })\n );\n const b = round(\n interpolate(animationValue, {\n inputRange,\n outputRange: colors.map(blue),\n extrapolate: Extrapolate.CLAMP,\n })\n );\n const a = interpolate(animationValue, {\n inputRange,\n outputRange: colors.map(opacity),\n extrapolate: Extrapolate.CLAMP,\n });\n\n return color(r, g, b, a);\n}\n","import { block, cond, defined, neq, not, set, proc } from '../base';\nimport AnimatedValue from '../core/InternalAnimatedValue';\n\nconst procOnChange = proc(function (value, action, prevValue) {\n return block([\n cond(not(defined(prevValue)), set(prevValue, value)),\n cond(neq(value, prevValue), [set(prevValue, value), action]),\n ]);\n});\n\nexport default function onChange(value, action) {\n const prevValue = new AnimatedValue();\n return procOnChange(value, action, prevValue);\n}\n","import ReanimatedFlatlist from './FlatList';\nimport WrappedComponents from './WrappedComponents';\n\nconst ReanimatedComponents = {\n ...WrappedComponents,\n FlatList: ReanimatedFlatlist,\n};\n\nexport default ReanimatedComponents;\n","import React from 'react';\nimport { FlatList, FlatListProps, LayoutChangeEvent } from 'react-native';\nimport WrappedComponents from './WrappedComponents';\nimport createAnimatedComponent from '../../createAnimatedComponent';\nimport { ILayoutAnimationBuilder } from '../layoutReanimation/animationBuilder/commonTypes';\n\nconst AnimatedFlatList = createAnimatedComponent(FlatList as any) as any;\n\nconst createCellRenderer = (itemLayoutAnimation?: ILayoutAnimationBuilder) => {\n const cellRenderer: React.FC<{\n onLayout: (event: LayoutChangeEvent) => void;\n }> = (props) => {\n return (\n \n {props.children}\n \n );\n };\n\n return cellRenderer;\n};\n\ninterface ReanimatedFlatlistProps extends FlatListProps {\n itemLayoutAnimation?: ILayoutAnimationBuilder;\n}\n\ntype ReanimatedFlatListFC = React.FC>;\n\nconst ReanimatedFlatlist: ReanimatedFlatListFC = ({\n itemLayoutAnimation,\n ...restProps\n}) => {\n const cellRenderer = React.useMemo(\n () => createCellRenderer(itemLayoutAnimation),\n []\n );\n return (\n \n );\n};\n\nexport default ReanimatedFlatlist;\n","import { Image, ScrollView, Text, View } from 'react-native';\nimport createAnimatedComponent from '../../createAnimatedComponent';\n\nconst WrappedComponents = {\n View: createAnimatedComponent(View),\n Text: createAnimatedComponent(Text as any),\n Image: createAnimatedComponent(Image as any),\n ScrollView: createAnimatedComponent(ScrollView),\n};\n\nexport default WrappedComponents;\n","export * from './core';\nexport * from './hook';\nexport * from './animation';\nexport * from './interpolation';\nexport * from './interpolateColor';\nexport * from './Easing';\nexport * from './NativeMethods';\nexport * from './Colors';\nexport * from './PropAdapters';\nexport * from './layoutReanimation';\nexport * from './utils';\nexport * from './commonTypes';\n","export { DependencyList, Context } from './commonTypes';\nexport {\n useAnimatedProps,\n useEvent,\n useHandler,\n useWorkletCallback,\n} from './Hooks';\nexport { useSharedValue } from './useSharedValue';\nexport { useAnimatedStyle, AnimatedStyleResult } from './useAnimatedStyle';\nexport {\n useAnimatedGestureHandler,\n GestureHandlerEvent,\n GestureHandlers,\n} from './useAnimatedGestureHandler';\nexport {\n useAnimatedReaction,\n AnimatedReactionWorkletFunction,\n} from './useAnimatedReaction';\nexport { useAnimatedRef } from './useAnimatedRef';\nexport {\n useAnimatedScrollHandler,\n ScrollHandler,\n ScrollHandlers,\n} from './useAnimatedScrollHandler';\nexport { useDerivedValue, DerivedValue } from './useDerivedValue';\n","export type DependencyList = Array | undefined;\n\nexport type Context = Record;\n\nexport interface ContextWithDependencies {\n context: TContext;\n savedDependencies: DependencyList;\n}\nexport interface Descriptor {\n tag: number;\n name: string;\n}\n\nexport interface RefObjectFunction {\n current: T | null;\n (component?: T): number;\n}\n","import { useCallback } from 'react';\nimport { DependencyList } from './commonTypes';\nimport { useAnimatedStyle } from './useAnimatedStyle';\n\n// TODO: we should make sure that when useAP is used we are not assigning styles\n// when you need styles to animated you should always use useAS\nexport const useAnimatedProps = useAnimatedStyle;\n\nexport function useWorkletCallback(\n fun: (...args: A) => R,\n deps?: DependencyList\n): (...args: Parameters) => R {\n return useCallback(fun, deps ?? []);\n}\n\nexport { useEvent, useHandler } from './utils';\n","/* global _frameTimestamp */\nimport { MutableRefObject, useEffect, useRef } from 'react';\n\nimport {\n startMapper,\n stopMapper,\n makeRemote,\n requestFrame,\n getTimestamp,\n makeMutable,\n} from '../core';\nimport updateProps, { updatePropsJestWrapper } from '../UpdateProps';\nimport { initialUpdaterRun } from '../animation';\nimport NativeReanimatedModule from '../NativeReanimated';\nimport { useSharedValue } from './useSharedValue';\nimport {\n buildWorkletsHash,\n canApplyOptimalisation,\n getStyleWithoutAnimations,\n hasColorProps,\n isAnimated,\n parseColors,\n styleDiff,\n validateAnimatedStyles,\n} from './utils';\nimport { DependencyList, Descriptor } from './commonTypes';\nimport {\n makeViewDescriptorsSet,\n makeViewsRefSet,\n ViewDescriptorsSet,\n ViewRefSet,\n} from '../ViewDescriptorsSet';\nimport { isJest, shouldBeUseWeb } from '../PlatformChecker';\nimport {\n AnimationObject,\n Timestamp,\n AdapterWorkletFunction,\n AnimatedStyle,\n BasicWorkletFunction,\n BasicWorkletFunctionOptional,\n NestedObjectValues,\n SharedValue,\n} from '../commonTypes';\nexport interface AnimatedStyleResult {\n viewDescriptors: ViewDescriptorsSet;\n initial: AnimatedStyle;\n viewsRef: ViewRefSet;\n animatedStyle?: MutableRefObject;\n}\n\ninterface AnimatedState {\n last: AnimatedStyle;\n animations: AnimatedStyle;\n isAnimationRunning: boolean;\n isAnimationCancelled: boolean;\n}\n\ninterface AnimationRef {\n initial: {\n value: AnimatedStyle;\n updater: () => AnimatedStyle;\n };\n remoteState: AnimatedState;\n sharableViewDescriptors: SharedValue;\n}\n\nfunction prepareAnimation(\n animatedProp: AnimatedStyle,\n lastAnimation: AnimatedStyle,\n lastValue: AnimatedStyle\n): void {\n 'worklet';\n if (Array.isArray(animatedProp)) {\n animatedProp.forEach((prop, index) =>\n prepareAnimation(\n prop,\n lastAnimation && lastAnimation[index],\n lastValue && lastValue[index]\n )\n );\n // return animatedProp;\n }\n if (typeof animatedProp === 'object' && animatedProp.onFrame) {\n const animation = animatedProp;\n\n let value = animation.current;\n if (lastValue !== undefined) {\n if (typeof lastValue === 'object') {\n if (lastValue.value !== undefined) {\n // previously it was a shared value\n value = lastValue.value;\n } else if (lastValue.onFrame !== undefined) {\n if (lastAnimation?.current !== undefined) {\n // it was an animation before, copy its state\n value = lastAnimation.current;\n } else if (lastValue?.current !== undefined) {\n // it was initialized\n value = lastValue.current;\n }\n }\n } else {\n // previously it was a plain value, just set it as starting point\n value = lastValue;\n }\n }\n\n animation.callStart = (timestamp: Timestamp) => {\n animation.onStart(animation, value, timestamp, lastAnimation);\n };\n animation.callStart(getTimestamp());\n animation.callStart = null;\n } else if (typeof animatedProp === 'object') {\n // it is an object\n Object.keys(animatedProp).forEach((key) =>\n prepareAnimation(\n animatedProp[key],\n lastAnimation && lastAnimation[key],\n lastValue && lastValue[key]\n )\n );\n }\n}\n\nfunction runAnimations(\n animation: AnimatedStyle,\n timestamp: Timestamp,\n key: number | string,\n result: AnimatedStyle,\n animationsActive: SharedValue\n): boolean {\n 'worklet';\n if (!animationsActive.value) {\n return true;\n }\n if (Array.isArray(animation)) {\n result[key] = [];\n let allFinished = true;\n animation.forEach((entry, index) => {\n if (\n !runAnimations(entry, timestamp, index, result[key], animationsActive)\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else if (typeof animation === 'object' && animation.onFrame) {\n let finished = true;\n if (!animation.finished) {\n if (animation.callStart) {\n animation.callStart(timestamp);\n animation.callStart = null;\n }\n finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n if (finished) {\n animation.finished = true;\n animation.callback && animation.callback(true /* finished */);\n }\n }\n result[key] = animation.current;\n return finished;\n } else if (typeof animation === 'object') {\n result[key] = {};\n let allFinished = true;\n Object.keys(animation).forEach((k) => {\n if (\n !runAnimations(\n animation[k],\n timestamp,\n k,\n result[key],\n animationsActive\n )\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else {\n result[key] = animation;\n return true;\n }\n}\n\nfunction styleUpdater(\n viewDescriptors: SharedValue,\n updater: BasicWorkletFunction,\n state: AnimatedState,\n maybeViewRef: ViewRefSet | undefined,\n animationsActive: SharedValue\n): void {\n 'worklet';\n const animations = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n let hasAnimations = false;\n for (const key in newValues) {\n const value = newValues[key];\n if (isAnimated(value)) {\n prepareAnimation(value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n } else {\n delete animations[key];\n }\n }\n\n if (hasAnimations) {\n const frame = (timestamp: Timestamp) => {\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n for (const propName in animations) {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n }\n\n if (updates) {\n updateProps(viewDescriptors, updates, maybeViewRef);\n }\n\n if (!allFinished) {\n requestFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n };\n\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n if (_frameTimestamp) {\n frame(_frameTimestamp);\n } else {\n requestFrame(frame);\n }\n }\n state.last = Object.assign({}, oldValues, newValues);\n const style = getStyleWithoutAnimations(state.last);\n if (style) {\n updateProps(viewDescriptors, style, maybeViewRef);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n\n const diff = styleDiff(oldValues, newValues);\n state.last = Object.assign({}, oldValues, newValues);\n if (diff) {\n updateProps(viewDescriptors, newValues, maybeViewRef);\n }\n }\n}\n\nfunction jestStyleUpdater(\n viewDescriptors: SharedValue,\n updater: BasicWorkletFunction,\n state: AnimatedState,\n maybeViewRef: ViewRefSet | undefined,\n animationsActive: SharedValue,\n animatedStyle: MutableRefObject,\n adapters: AdapterWorkletFunction[] = []\n): void {\n 'worklet';\n const animations: AnimatedStyle = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n // extract animated props\n let hasAnimations = false;\n Object.keys(animations).forEach((key) => {\n const value = newValues[key];\n if (!isAnimated(value)) {\n delete animations[key];\n }\n });\n Object.keys(newValues).forEach((key) => {\n const value = newValues[key];\n if (isAnimated(value)) {\n prepareAnimation(value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n }\n });\n\n function frame(timestamp: Timestamp) {\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n Object.keys(animations).forEach((propName) => {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n });\n\n if (Object.keys(updates).length) {\n updatePropsJestWrapper(\n viewDescriptors,\n updates,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n\n if (!allFinished) {\n requestFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n }\n\n if (hasAnimations) {\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n if (_frameTimestamp) {\n frame(_frameTimestamp);\n } else {\n requestFrame(frame);\n }\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n }\n\n // calculate diff\n const diff = styleDiff(oldValues, newValues);\n state.last = Object.assign({}, oldValues, newValues);\n\n if (Object.keys(diff).length !== 0) {\n updatePropsJestWrapper(\n viewDescriptors,\n diff,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n}\n\n// check for invalid usage of shared values in returned object\nfunction checkSharedValueUsage(\n prop: NestedObjectValues,\n currentKey?: string\n): void {\n if (Array.isArray(prop)) {\n // if it's an array (i.ex. transform) validate all its elements\n for (const element of prop) {\n checkSharedValueUsage(element, currentKey);\n }\n } else if (typeof prop === 'object' && prop.value === undefined) {\n // if it's a nested object, run validation for all its props\n for (const key of Object.keys(prop)) {\n checkSharedValueUsage(prop[key], key);\n }\n } else if (\n currentKey !== undefined &&\n typeof prop === 'object' &&\n prop.value !== undefined\n ) {\n // if shared value is passed insted of its value, throw an error\n throw new Error(\n `invalid value passed to \\`${currentKey}\\`, maybe you forgot to use \\`.value\\`?`\n );\n }\n}\n\nexport function useAnimatedStyle(\n updater: BasicWorkletFunction,\n dependencies?: DependencyList,\n adapters?: AdapterWorkletFunction | AdapterWorkletFunction[]\n): AnimatedStyleResult {\n const viewsRef: ViewRefSet = makeViewsRefSet();\n const viewDescriptors: ViewDescriptorsSet = makeViewDescriptorsSet();\n const initRef = useRef();\n const inputs = Object.values(updater._closure ?? {});\n const adaptersArray: AdapterWorkletFunction[] = adapters\n ? Array.isArray(adapters)\n ? adapters\n : [adapters]\n : [];\n const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;\n const animationsActive = useSharedValue(true);\n const animatedStyle: MutableRefObject = useRef(\n {}\n );\n\n // build dependencies\n if (!dependencies) {\n dependencies = [...inputs, updater.__workletHash];\n } else {\n dependencies.push(updater.__workletHash);\n }\n adaptersHash && dependencies.push(adaptersHash);\n\n if (!initRef.current) {\n const initialStyle: AnimatedStyle = initialUpdaterRun(updater);\n validateAnimatedStyles(initialStyle);\n initRef.current = {\n initial: {\n value: initialStyle,\n updater: updater,\n },\n remoteState: makeRemote({ last: initialStyle }),\n sharableViewDescriptors: makeMutable([]),\n };\n viewDescriptors.rebuildsharableViewDescriptors(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n initRef.current!.sharableViewDescriptors\n );\n }\n dependencies.push(initRef.current?.sharableViewDescriptors.value);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { initial, remoteState, sharableViewDescriptors } = initRef.current!;\n const maybeViewRef = NativeReanimatedModule.native ? undefined : viewsRef;\n\n useEffect(() => {\n let fun;\n let updaterFn = updater as BasicWorkletFunctionOptional;\n let optimalization = updater.__optimalization;\n if (adapters) {\n updaterFn = () => {\n 'worklet';\n const newValues = updater();\n adaptersArray.forEach((adapter) => {\n adapter(newValues);\n });\n return newValues;\n };\n }\n\n if (canApplyOptimalisation(updaterFn) && !shouldBeUseWeb()) {\n if (hasColorProps(updaterFn())) {\n updaterFn = () => {\n 'worklet';\n const newValues = updaterFn();\n const oldValues = remoteState.last;\n const diff = styleDiff(oldValues, newValues);\n remoteState.last = Object.assign({}, oldValues, newValues);\n parseColors(diff);\n return diff;\n };\n } else {\n updaterFn = () => {\n 'worklet';\n const newValues = updaterFn();\n const oldValues = remoteState.last;\n const diff = styleDiff(oldValues, newValues);\n remoteState.last = Object.assign({}, oldValues, newValues);\n return diff;\n };\n }\n } else if (!shouldBeUseWeb()) {\n optimalization = 0;\n updaterFn = () => {\n 'worklet';\n const style = updaterFn();\n parseColors(style);\n return style;\n };\n }\n if (typeof updater.__optimalization !== undefined) {\n updaterFn.__optimalization = optimalization;\n }\n\n if (isJest()) {\n fun = () => {\n 'worklet';\n jestStyleUpdater(\n sharableViewDescriptors,\n updater,\n remoteState,\n maybeViewRef,\n animationsActive,\n animatedStyle,\n adaptersArray\n );\n };\n } else {\n fun = () => {\n 'worklet';\n styleUpdater(\n sharableViewDescriptors,\n updaterFn,\n remoteState,\n maybeViewRef,\n animationsActive\n );\n };\n }\n const mapperId = startMapper(\n fun,\n inputs,\n [],\n updaterFn,\n // TODO fix this\n sharableViewDescriptors\n );\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n animationsActive.value = true;\n return () => {\n // initRef.current = null;\n // viewsRef = null;\n animationsActive.value = false;\n };\n }, []);\n\n checkSharedValueUsage(initial.value);\n\n if (process.env.JEST_WORKER_ID) {\n return { viewDescriptors, initial: initial, viewsRef, animatedStyle };\n } else {\n return { viewDescriptors, initial: initial, viewsRef };\n }\n}\n","import { useEffect, useRef } from 'react';\nimport { cancelAnimation } from '../animation';\nimport { SharedValue } from '../commonTypes';\nimport { makeMutable } from '../core';\n\nexport function useSharedValue(init: T): SharedValue {\n const ref = useRef>(makeMutable(init));\n\n if (ref.current === null) {\n ref.current = makeMutable(init);\n }\n\n useEffect(() => {\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n cancelAnimation(ref.current!);\n };\n }, []);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return ref.current!;\n}\n","import { MutableRefObject, useEffect, useRef } from 'react';\nimport { processColor } from '../Colors';\nimport {\n AnimatedStyle,\n NativeEvent,\n NestedObjectValues,\n StyleProps,\n WorkletFunction,\n AnimationObject,\n} from '../commonTypes';\nimport { makeRemote } from '../core';\nimport { isWeb, isJest } from '../PlatformChecker';\nimport { colorProps } from '../UpdateProps';\nimport WorkletEventHandler from '../WorkletEventHandler';\nimport {\n Context,\n ContextWithDependencies,\n DependencyList,\n} from './commonTypes';\n\ninterface Handler extends WorkletFunction {\n (event: T, context: TContext): void;\n}\n\ninterface Handlers {\n [key: string]: Handler | undefined;\n}\n\nexport interface UseHandlerContext {\n context: TContext;\n doDependenciesDiffer: boolean;\n useWeb: boolean;\n}\n\nexport function useEvent>(\n handler: (event: T) => void,\n eventNames: string[] = [],\n rebuild = false\n): MutableRefObject | null> {\n const initRef = useRef | null>(null);\n if (initRef.current === null) {\n initRef.current = new WorkletEventHandler(handler, eventNames);\n } else if (rebuild) {\n initRef.current.updateWorklet(handler);\n }\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n return initRef;\n}\n\nexport function useHandler(\n handlers: Handlers,\n dependencies?: DependencyList\n): UseHandlerContext {\n const initRef = useRef | null>(null);\n if (initRef.current === null) {\n initRef.current = {\n context: makeRemote({}),\n savedDependencies: [],\n };\n }\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n const { context, savedDependencies } = initRef.current;\n\n dependencies = buildDependencies(dependencies, handlers);\n\n const doDependenciesDiffer = !areDependenciesEqual(\n dependencies,\n savedDependencies\n );\n initRef.current.savedDependencies = dependencies;\n const useWeb = isWeb() || isJest();\n\n return { context, doDependenciesDiffer, useWeb };\n}\n\n// builds one big hash from multiple worklets' hashes\nexport function buildWorkletsHash(\n handlers: Record | Array\n): string {\n return Object.values(handlers).reduce(\n (acc: string, worklet: WorkletFunction) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n acc + worklet.__workletHash!.toString(),\n ''\n );\n}\n\n// builds dependencies array for gesture handlers\nexport function buildDependencies(\n dependencies: DependencyList,\n handlers: Record\n): Array {\n const handlersList: WorkletFunction[] = Object.values(handlers).filter(\n (handler) => handler !== undefined\n ) as WorkletFunction[];\n if (!dependencies) {\n dependencies = handlersList.map((handler) => {\n return {\n workletHash: handler.__workletHash,\n closure: handler._closure,\n };\n });\n } else {\n dependencies.push(buildWorkletsHash(handlersList));\n }\n return dependencies;\n}\n\n// this is supposed to work as useEffect comparison\nexport function areDependenciesEqual(\n nextDeps: DependencyList,\n prevDeps: DependencyList\n): boolean {\n function is(x: number, y: number) {\n /* eslint-disable no-self-compare */\n return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n /* eslint-enable no-self-compare */\n }\n const objectIs: (nextDeps: unknown, prevDeps: unknown) => boolean =\n typeof Object.is === 'function' ? Object.is : is;\n\n function areHookInputsEqual(\n nextDeps: DependencyList,\n prevDeps: DependencyList\n ): boolean {\n if (!nextDeps || !prevDeps || prevDeps.length !== nextDeps.length) {\n return false;\n }\n for (let i = 0; i < prevDeps.length; ++i) {\n if (!objectIs(nextDeps[i], prevDeps[i])) {\n return false;\n }\n }\n return true;\n }\n\n return areHookInputsEqual(nextDeps, prevDeps);\n}\n\nexport function hasColorProps(updates: AnimatedStyle): boolean {\n const colorPropsSet = new Set(colorProps);\n for (const key in updates) {\n if (colorPropsSet.has(key)) {\n return true;\n }\n }\n return false;\n}\n\nexport function parseColors(updates: AnimatedStyle): void {\n 'worklet';\n for (const key in updates) {\n if (colorProps.indexOf(key) !== -1) {\n // value could be an animation in which case processColor will recognize it and will return undefined\n // -> in such a case we don't want to override style of that key\n const processedColor = processColor(updates[key]);\n if (processedColor !== undefined) {\n updates[key] = processedColor;\n }\n }\n }\n}\n\nexport function canApplyOptimalisation(upadterFn: WorkletFunction): number {\n const FUNCTIONLESS_FLAG = 0b00000001;\n const STATEMENTLESS_FLAG = 0b00000010;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const optimalization = upadterFn.__optimalization!;\n return (\n optimalization & FUNCTIONLESS_FLAG && optimalization & STATEMENTLESS_FLAG\n );\n}\n\nexport function isAnimated(prop: NestedObjectValues): boolean {\n 'worklet';\n const propsToCheck: NestedObjectValues[] = [prop];\n while (propsToCheck.length > 0) {\n const currentProp: NestedObjectValues = propsToCheck.pop() as NestedObjectValues;\n if (Array.isArray(currentProp)) {\n for (const item of currentProp) {\n propsToCheck.push(item);\n }\n } else if (currentProp?.onFrame !== undefined) {\n return true;\n } else if (typeof currentProp === 'object') {\n for (const item of Object.values(currentProp)) {\n propsToCheck.push(item);\n }\n }\n // if none of the above, it's not the animated prop, check next one\n }\n\n // when none of the props were animated return false\n return false;\n}\n\nexport function styleDiff(\n oldStyle: AnimatedStyle,\n newStyle: AnimatedStyle\n): Partial {\n 'worklet';\n const diff: any = {};\n for (const key in oldStyle) {\n if (newStyle[key] === undefined) {\n diff[key] = null;\n }\n }\n for (const key in newStyle) {\n const value = newStyle[key];\n const oldValue = oldStyle[key];\n\n if (isAnimated(value)) {\n // do nothing\n continue;\n }\n if (oldValue !== value) {\n diff[key] = value;\n }\n }\n return diff;\n}\n\nexport function getStyleWithoutAnimations(newStyle: AnimatedStyle): StyleProps {\n 'worklet';\n const diff: StyleProps = {};\n\n for (const key in newStyle) {\n const value = newStyle[key];\n if (isAnimated(value)) {\n continue;\n }\n diff[key] = value;\n }\n return diff;\n}\n\nexport const validateAnimatedStyles = (styles: AnimatedStyle): void => {\n 'worklet';\n if (typeof styles !== 'object') {\n throw new Error(\n `useAnimatedStyle has to return an object, found ${typeof styles} instead`\n );\n } else if (Array.isArray(styles)) {\n throw new Error(\n 'useAnimatedStyle has to return an object and cannot return static styles combined with dynamic ones. Please do merging where a component receives props.'\n );\n }\n};\n","import { useRef } from 'react';\nimport { makeMutable } from './core';\nimport { SharedValue } from './commonTypes';\nimport { Descriptor } from './hook/commonTypes';\nimport { Platform } from 'react-native';\n\nexport interface ViewRefSet {\n items: Set;\n add: (item: T) => void;\n remove: (item: T) => void;\n}\n\nexport interface ViewDescriptorsSet {\n batchToRemove: Set;\n tags: Set;\n waitForInsertSync: boolean;\n waitForRemoveSync: boolean;\n sharableViewDescriptors: SharedValue;\n items: Descriptor[];\n add: (item: Descriptor) => void;\n remove: (viewTag: number) => void;\n rebuildsharableViewDescriptors: (\n sharableViewDescriptor: SharedValue\n ) => void;\n}\n\nconst scheduleUpdates =\n Platform.OS === 'web' ? requestAnimationFrame : setImmediate;\n\nexport function makeViewDescriptorsSet(): ViewDescriptorsSet {\n const ref = useRef(null);\n if (ref.current === null) {\n const data: ViewDescriptorsSet = {\n batchToRemove: new Set(),\n tags: new Set(),\n waitForInsertSync: false,\n waitForRemoveSync: false,\n sharableViewDescriptors: makeMutable([]),\n items: [],\n\n add: (item: Descriptor) => {\n if (data.tags.has(item.tag)) {\n return;\n }\n data.tags.add(item.tag);\n data.items.push(item);\n\n if (!data.waitForInsertSync) {\n data.waitForInsertSync = true;\n\n scheduleUpdates(() => {\n data.sharableViewDescriptors.value = data.items;\n data.waitForInsertSync = false;\n });\n }\n },\n\n remove: (viewTag: number) => {\n data.batchToRemove.add(viewTag);\n\n if (!data.waitForRemoveSync) {\n data.waitForRemoveSync = true;\n\n scheduleUpdates(() => {\n const items = [];\n for (const item of data.items) {\n if (data.batchToRemove.has(item.tag)) {\n data.tags.delete(item.tag);\n } else {\n items.push(item);\n }\n }\n data.items = items;\n data.sharableViewDescriptors.value = items;\n data.batchToRemove = new Set();\n data.waitForRemoveSync = false;\n });\n }\n },\n\n rebuildsharableViewDescriptors: (\n sharableViewDescriptors: SharedValue\n ) => {\n data.sharableViewDescriptors = sharableViewDescriptors;\n },\n };\n ref.current = data;\n }\n\n return ref.current;\n}\n\nexport function makeViewsRefSet(): ViewRefSet {\n const ref = useRef | null>(null);\n if (ref.current === null) {\n const data: ViewRefSet = {\n items: new Set(),\n\n add: (item: T) => {\n if (data.items.has(item)) return;\n data.items.add(item);\n },\n\n remove: (item: T) => {\n data.items.delete(item);\n },\n };\n ref.current = data;\n }\n\n return ref.current;\n}\n","import { MutableRefObject } from 'react';\nimport { WorkletFunction } from '../commonTypes';\nimport WorkletEventHandler from '../WorkletEventHandler';\nimport { Context, DependencyList } from './commonTypes';\nimport { useEvent, useHandler } from './Hooks';\n\ninterface Handler extends WorkletFunction {\n (event: T, context: TContext, isCanceledOrFailed?: boolean): void;\n}\n\nexport interface GestureHandlers {\n [key: string]: Handler | undefined;\n onStart?: Handler;\n onActive?: Handler;\n onEnd?: Handler;\n onFail?: Handler;\n onCancel?: Handler;\n onFinish?: Handler;\n}\n\nexport enum EventType {\n UNDETERMINED = 0,\n FAILED,\n BEGAN,\n CANCELLED,\n ACTIVE,\n END,\n}\n\nexport interface GestureHandlerStateChangeNativeEvent {\n handlerTag: number;\n numberOfPointers: number;\n state: EventType;\n oldState: EventType;\n}\n\nexport interface GestureHandlerEvent\n extends GestureHandlerStateChangeNativeEvent {\n nativeEvent: T;\n}\n\nexport function useAnimatedGestureHandler<\n T extends GestureHandlerEvent,\n TContext extends Context\n>(\n handlers: GestureHandlers,\n dependencies?: DependencyList\n): MutableRefObject | null> | ((e: T) => void) {\n const { context, doDependenciesDiffer, useWeb } = useHandler(\n handlers,\n dependencies\n );\n\n const handler = (e: T) => {\n 'worklet';\n const event = useWeb ? e.nativeEvent : e;\n\n if (event.state === EventType.BEGAN && handlers.onStart) {\n handlers.onStart(event, context);\n }\n if (event.state === EventType.ACTIVE && handlers.onActive) {\n handlers.onActive(event, context);\n }\n if (\n event.oldState === EventType.ACTIVE &&\n event.state === EventType.END &&\n handlers.onEnd\n ) {\n handlers.onEnd(event, context);\n }\n if (\n event.oldState === EventType.BEGAN &&\n event.state === EventType.FAILED &&\n handlers.onFail\n ) {\n handlers.onFail(event, context);\n }\n if (\n event.oldState === EventType.ACTIVE &&\n event.state === EventType.CANCELLED &&\n handlers.onCancel\n ) {\n handlers.onCancel(event, context);\n }\n if (\n (event.oldState === EventType.BEGAN ||\n event.oldState === EventType.ACTIVE) &&\n event.state !== EventType.BEGAN &&\n event.state !== EventType.ACTIVE &&\n handlers.onFinish\n ) {\n handlers.onFinish(\n event,\n context,\n event.state === EventType.CANCELLED || event.state === EventType.FAILED\n );\n }\n };\n\n if (useWeb) {\n return handler;\n }\n\n return useEvent(\n handler,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n doDependenciesDiffer\n );\n}\n","import { useEffect } from 'react';\nimport { BasicWorkletFunction, WorkletFunction } from '../commonTypes';\nimport { startMapper, stopMapper } from '../core';\nimport { DependencyList } from './commonTypes';\nimport { useSharedValue } from './useSharedValue';\n\nexport interface AnimatedReactionWorkletFunction extends WorkletFunction {\n (prepared: T, previous: T | null): void;\n}\n/**\n * @param prepare - worklet used for data preparation for the second parameter\n * @param react - worklet which takes data prepared by the one in the first parameter and performs certain actions\n * the first worklet defines the inputs, in other words on which shared values change will it be called.\n * the second one can modify any shared values but those which are mentioned in the first worklet. Beware of that, because this may result in endless loop and high cpu usage.\n */\nexport function useAnimatedReaction(\n prepare: BasicWorkletFunction,\n react: AnimatedReactionWorkletFunction,\n dependencies: DependencyList\n): void {\n const previous = useSharedValue(null);\n if (dependencies === undefined) {\n dependencies = [\n Object.values(prepare._closure ?? {}),\n Object.values(react._closure ?? {}),\n prepare.__workletHash,\n react.__workletHash,\n ];\n } else {\n dependencies.push(prepare.__workletHash, react.__workletHash);\n }\n\n useEffect(() => {\n const fun = () => {\n 'worklet';\n const input = prepare();\n react(input, previous.value);\n previous.value = input;\n };\n const mapperId = startMapper(\n fun,\n Object.values(prepare._closure ?? {}),\n []\n );\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n}\n","import { Component, useRef } from 'react';\nimport { getTag } from '../NativeMethods';\nimport { useSharedValue } from './useSharedValue';\nimport { RefObjectFunction } from './commonTypes';\n\nexport function useAnimatedRef(): RefObjectFunction {\n const tag = useSharedValue(-1);\n const ref = useRef>();\n\n if (!ref.current) {\n const fun: RefObjectFunction = >((component) => {\n 'worklet';\n // enters when ref is set by attaching to a component\n if (component) {\n tag.value = getTag(component);\n fun.current = component;\n }\n return tag.value;\n });\n\n Object.defineProperty(fun, 'current', {\n value: null,\n writable: true,\n enumerable: false,\n });\n ref.current = fun;\n }\n\n return ref.current;\n}\n","/* global _WORKLET _measure _scrollTo _setGestureState */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { Component } from 'react';\nimport { findNodeHandle } from 'react-native';\nimport { RefObjectFunction } from './commonTypes';\nimport { shouldBeUseWeb } from './PlatformChecker';\n\nexport function getTag(\n view: null | number | React.Component | React.ComponentClass\n): null | number {\n return findNodeHandle(view);\n}\n\nexport interface MeasuredDimensions {\n x: number;\n y: number;\n width: number;\n height: number;\n pageX: number;\n pageY: number;\n}\n\nconst isNativeIndefined = shouldBeUseWeb();\n\nexport function measure(\n animatedRef: RefObjectFunction\n): MeasuredDimensions {\n 'worklet';\n if (!_WORKLET || isNativeIndefined) {\n console.warn(\n '[reanimated.measure] method cannot be used for web or Chrome Debugger'\n );\n return {\n x: NaN,\n y: NaN,\n width: NaN,\n height: NaN,\n pageX: NaN,\n pageY: NaN,\n };\n }\n const viewTag = animatedRef();\n const result = _measure(viewTag);\n if (result.x === -1234567) {\n throw new Error(`The view with tag ${viewTag} could not be measured`);\n }\n return result;\n}\n\nexport function scrollTo(\n animatedRef: RefObjectFunction,\n x: number,\n y: number,\n animated: boolean\n): void {\n 'worklet';\n if (!_WORKLET || isNativeIndefined) {\n return;\n }\n const viewTag = animatedRef();\n _scrollTo(viewTag, x, y, animated);\n}\n\nexport function setGestureState(handlerTag: number, newState: number): void {\n 'worklet';\n if (!_WORKLET || isNativeIndefined) {\n console.warn(\n '[Reanimated] You can not use setGestureState in non-worklet function.'\n );\n return;\n }\n _setGestureState(handlerTag, newState);\n}\n","import { RefObject } from 'react';\nimport { NativeScrollEvent } from 'react-native';\nimport { NativeEvent, WorkletFunction } from '../commonTypes';\nimport WorkletEventHandler from '../WorkletEventHandler';\nimport { Context, DependencyList } from './commonTypes';\nimport { useEvent, useHandler } from './Hooks';\n\nexport interface ScrollHandler\n extends WorkletFunction {\n (event: NativeScrollEvent, context?: TContext): void;\n}\n\ninterface ScrollEvent extends NativeScrollEvent, NativeEvent {\n eventName: string;\n}\nexport interface ScrollHandlers {\n [key: string]: ScrollHandler | undefined;\n onScroll?: ScrollHandler;\n onBeginDrag?: ScrollHandler;\n onEndDrag?: ScrollHandler;\n onMomentumBegin?: ScrollHandler;\n onMomentumEnd?: ScrollHandler;\n}\n\nexport function useAnimatedScrollHandler(\n handlers: ScrollHandlers | ScrollHandler,\n dependencies?: DependencyList\n): RefObject> {\n // case when handlers is a function\n const scrollHandlers: ScrollHandlers =\n typeof handlers === 'function' ? { onScroll: handlers } : handlers;\n const { context, doDependenciesDiffer } = useHandler(\n scrollHandlers,\n dependencies\n );\n\n // build event subscription array\n const subscribeForEvents = ['onScroll'];\n if (scrollHandlers.onBeginDrag !== undefined) {\n subscribeForEvents.push('onScrollBeginDrag');\n }\n if (scrollHandlers.onEndDrag !== undefined) {\n subscribeForEvents.push('onScrollEndDrag');\n }\n if (scrollHandlers.onMomentumBegin !== undefined) {\n subscribeForEvents.push('onMomentumScrollBegin');\n }\n if (scrollHandlers.onMomentumEnd !== undefined) {\n subscribeForEvents.push('onMomentumScrollEnd');\n }\n\n return useEvent(\n (event: ScrollEvent) => {\n 'worklet';\n const {\n onScroll,\n onBeginDrag,\n onEndDrag,\n onMomentumBegin,\n onMomentumEnd,\n } = scrollHandlers;\n if (onScroll && event.eventName.endsWith('onScroll')) {\n onScroll(event, context);\n } else if (onBeginDrag && event.eventName.endsWith('onScrollBeginDrag')) {\n onBeginDrag(event, context);\n } else if (onEndDrag && event.eventName.endsWith('onScrollEndDrag')) {\n onEndDrag(event, context);\n } else if (\n onMomentumBegin &&\n event.eventName.endsWith('onMomentumScrollBegin')\n ) {\n onMomentumBegin(event, context);\n } else if (\n onMomentumEnd &&\n event.eventName.endsWith('onMomentumScrollEnd')\n ) {\n onMomentumEnd(event, context);\n }\n },\n subscribeForEvents,\n doDependenciesDiffer\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { initialUpdaterRun } from '../animation';\nimport { BasicWorkletFunction, SharedValue } from '../commonTypes';\nimport { makeMutable, startMapper, stopMapper } from '../core';\nimport { DependencyList } from './commonTypes';\n\nexport type DerivedValue = Readonly>;\n\nexport function useDerivedValue(\n processor: BasicWorkletFunction,\n dependencies: DependencyList\n): DerivedValue {\n const initRef = useRef | null>(null);\n const inputs = Object.values(processor._closure ?? {});\n\n // build dependencies\n if (dependencies === undefined) {\n dependencies = [...inputs, processor.__workletHash];\n } else {\n dependencies.push(processor.__workletHash);\n }\n\n if (initRef.current === null) {\n initRef.current = makeMutable(initialUpdaterRun(processor));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const sharedValue: SharedValue = initRef.current!;\n\n useEffect(() => {\n const fun = () => {\n 'worklet';\n sharedValue.value = processor();\n };\n const mapperId = startMapper(fun, inputs, [sharedValue]);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n return sharedValue;\n}\n","// @ts-ignore JS file\nimport interpolateNode from '../reanimated1/derived/interpolate';\n\nexport enum Extrapolation {\n IDENTITY = 'identity',\n CLAMP = 'clamp',\n EXTEND = 'extend',\n}\n\nexport interface InterpolatedNode {\n __nodeId: number;\n}\n\ninterface InterpolationNarrowedInput {\n leftEdgeInput: number;\n rightEdgeInput: number;\n leftEdgeOutput: number;\n rightEdgeOutput: number;\n}\n\nexport interface ExtrapolationConfig {\n extrapolateLeft?: Extrapolation | string;\n extrapolateRight?: Extrapolation | string;\n}\n\ninterface RequiredExtrapolationConfig {\n extrapolateLeft: Extrapolation;\n extrapolateRight: Extrapolation;\n}\n\nexport type ExtrapolationType =\n | ExtrapolationConfig\n | Extrapolation\n | string\n | undefined;\n\nfunction isNode(x: number | InterpolatedNode): x is InterpolatedNode {\n 'worklet';\n return (x as InterpolatedNode).__nodeId !== undefined;\n}\n\nfunction getVal(\n type: Extrapolation,\n coef: number,\n val: number,\n leftEdgeOutput: number,\n rightEdgeOutput: number,\n x: number\n): number {\n 'worklet';\n\n switch (type) {\n case Extrapolation.IDENTITY:\n return x;\n case Extrapolation.CLAMP:\n if (coef * val < coef * leftEdgeOutput) {\n return leftEdgeOutput;\n }\n return rightEdgeOutput;\n case Extrapolation.EXTEND:\n default:\n return val;\n }\n}\n\nfunction isExtrapolate(value: string): value is Extrapolation {\n 'worklet';\n\n return (\n value === Extrapolation.EXTEND ||\n value === Extrapolation.CLAMP ||\n value === Extrapolation.IDENTITY\n );\n}\n\n// validates extrapolations type\n// if type is correct, converts it to ExtrapolationConfig\nfunction validateType(type: ExtrapolationType): RequiredExtrapolationConfig {\n 'worklet';\n // initialize extrapolationConfig with default extrapolation\n const extrapolationConfig: RequiredExtrapolationConfig = {\n extrapolateLeft: Extrapolation.EXTEND,\n extrapolateRight: Extrapolation.EXTEND,\n };\n\n if (!type) {\n return extrapolationConfig;\n }\n\n if (typeof type === 'string') {\n if (!isExtrapolate(type)) {\n throw new Error(\n `Reanimated: not supported value for \"interpolate\" \\nSupported values: [\"extend\", \"clamp\", \"identity\", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\\n Valid example:\n interpolate(value, [inputRange], [outputRange], \"clamp\")`\n );\n }\n extrapolationConfig.extrapolateLeft = type;\n extrapolationConfig.extrapolateRight = type;\n return extrapolationConfig;\n }\n\n // otherwise type is extrapolation config object\n if (\n (type.extrapolateLeft && !isExtrapolate(type.extrapolateLeft)) ||\n (type.extrapolateRight && !isExtrapolate(type.extrapolateRight))\n ) {\n throw new Error(\n `Reanimated: not supported value for \"interpolate\" \\nSupported values: [\"extend\", \"clamp\", \"identity\", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\\n Valid example:\n interpolate(value, [inputRange], [outputRange], {\n extrapolateLeft: Extrapolation.CLAMP,\n extrapolateRight: Extrapolation.IDENTITY\n }})`\n );\n }\n\n Object.assign(extrapolationConfig, type);\n return extrapolationConfig;\n}\n\nfunction internalInterpolate(\n x: number,\n narrowedInput: InterpolationNarrowedInput,\n extrapolationConfig: RequiredExtrapolationConfig\n) {\n 'worklet';\n const {\n leftEdgeInput,\n rightEdgeInput,\n leftEdgeOutput,\n rightEdgeOutput,\n } = narrowedInput;\n if (rightEdgeInput - leftEdgeInput === 0) return leftEdgeOutput;\n const progress = (x - leftEdgeInput) / (rightEdgeInput - leftEdgeInput);\n const val = leftEdgeOutput + progress * (rightEdgeOutput - leftEdgeOutput);\n const coef = rightEdgeOutput >= leftEdgeOutput ? 1 : -1;\n\n if (coef * val < coef * leftEdgeOutput) {\n return getVal(\n extrapolationConfig.extrapolateLeft,\n coef,\n val,\n leftEdgeOutput,\n rightEdgeOutput,\n x\n );\n } else if (coef * val > coef * rightEdgeOutput) {\n return getVal(\n extrapolationConfig.extrapolateRight,\n coef,\n val,\n leftEdgeOutput,\n rightEdgeOutput,\n x\n );\n }\n\n return val;\n}\n\n// TODO: support default values in worklets:\n// e.g. function interpolate(x, input, output, type = Extrapolatation.CLAMP)\nexport function interpolate(\n x: number | InterpolatedNode,\n input: readonly number[],\n output: readonly number[],\n type?: ExtrapolationType\n): number {\n 'worklet';\n if (input.length < 2 || output.length < 2) {\n throw Error(\n 'Interpolation input and output should contain at least two values.'\n );\n }\n\n const extrapolationConfig = validateType(type);\n\n if (isNode(x)) {\n console.warn(\n `interpolate() was renamed to interpolateNode() in Reanimated 2. Please use interpolateNode() instead`\n );\n return interpolateNode(x, {\n inputRange: input,\n outputRange: output,\n extrapolateLeft: extrapolationConfig.extrapolateLeft,\n extrapolateRight: extrapolationConfig.extrapolateRight,\n });\n }\n\n const length = input.length;\n const narrowedInput: InterpolationNarrowedInput = {\n leftEdgeInput: input[0],\n rightEdgeInput: input[1],\n leftEdgeOutput: output[0],\n rightEdgeOutput: output[1],\n };\n if (length > 2) {\n if (x > input[length - 1]) {\n narrowedInput.leftEdgeInput = input[length - 2];\n narrowedInput.rightEdgeInput = input[length - 1];\n narrowedInput.leftEdgeOutput = output[length - 2];\n narrowedInput.rightEdgeOutput = output[length - 1];\n } else {\n for (let i = 1; i < length; ++i) {\n if (x <= input[i]) {\n narrowedInput.leftEdgeInput = input[i - 1];\n narrowedInput.rightEdgeInput = input[i];\n narrowedInput.leftEdgeOutput = output[i - 1];\n narrowedInput.rightEdgeOutput = output[i];\n break;\n }\n }\n }\n }\n\n return internalInterpolate(x, narrowedInput, extrapolationConfig);\n}\n","import {\n hsvToColor,\n RGBtoHSV,\n rgbaColor,\n processColor,\n red,\n green,\n blue,\n opacity,\n} from './Colors';\nimport { makeMutable } from './core';\nimport { interpolate } from './interpolation';\n// @ts-ignore JS file\nimport { Extrapolate } from '../reanimated1/derived';\nimport { SharedValue } from './commonTypes';\nimport { useSharedValue } from './hook/useSharedValue';\n\nconst interpolateColorsHSV = (\n value: number,\n inputRange: readonly number[],\n colors: InterpolateHSV\n) => {\n 'worklet';\n const h = interpolate(value, inputRange, colors.h, Extrapolate.CLAMP);\n const s = interpolate(value, inputRange, colors.s, Extrapolate.CLAMP);\n const v = interpolate(value, inputRange, colors.v, Extrapolate.CLAMP);\n return hsvToColor(h, s, v);\n};\n\nconst interpolateColorsRGB = (\n value: number,\n inputRange: readonly number[],\n colors: InterpolateRGB\n) => {\n 'worklet';\n const r = interpolate(value, inputRange, colors.r, Extrapolate.CLAMP);\n const g = interpolate(value, inputRange, colors.g, Extrapolate.CLAMP);\n const b = interpolate(value, inputRange, colors.b, Extrapolate.CLAMP);\n const a = interpolate(value, inputRange, colors.a, Extrapolate.CLAMP);\n return rgbaColor(r, g, b, a);\n};\n\ninterface InterpolateRGB {\n r: number[];\n g: number[];\n b: number[];\n a: number[];\n}\n\nconst getInterpolateRGB = (\n colors: readonly (string | number)[]\n): InterpolateRGB => {\n 'worklet';\n\n const r = [];\n const g = [];\n const b = [];\n const a = [];\n for (let i = 0; i < colors.length; ++i) {\n const color = colors[i];\n const proocessedColor = processColor(color);\n // explicit check in case if processedColor is 0\n if (proocessedColor !== null && proocessedColor !== undefined) {\n r.push(red(proocessedColor));\n g.push(green(proocessedColor));\n b.push(blue(proocessedColor));\n a.push(opacity(proocessedColor));\n }\n }\n return { r, g, b, a };\n};\n\ninterface InterpolateHSV {\n h: number[];\n s: number[];\n v: number[];\n}\n\nconst getInterpolateHSV = (\n colors: readonly (string | number)[]\n): InterpolateHSV => {\n 'worklet';\n const h = [];\n const s = [];\n const v = [];\n for (let i = 0; i < colors.length; ++i) {\n const color = colors[i];\n const proocessedColor = RGBtoHSV(processColor(color) as any);\n if (proocessedColor) {\n h.push(proocessedColor.h);\n s.push(proocessedColor.s);\n v.push(proocessedColor.v);\n }\n }\n return { h, s, v };\n};\n\nexport const interpolateColor = (\n value: number,\n inputRange: readonly number[],\n outputRange: readonly (string | number)[],\n colorSpace: 'RGB' | 'HSV' = 'RGB'\n): string | number => {\n 'worklet';\n if (colorSpace === 'HSV') {\n return interpolateColorsHSV(\n value,\n inputRange,\n getInterpolateHSV(outputRange)\n );\n } else if (colorSpace === 'RGB') {\n return interpolateColorsRGB(\n value,\n inputRange,\n getInterpolateRGB(outputRange)\n );\n }\n throw new Error(\n `Invalid color space provided: ${colorSpace}. Supported values are: ['RGB', 'HSV']`\n );\n};\n\nexport enum ColorSpace {\n RGB = 0,\n HSV = 1,\n}\n\nexport interface InterpolateConfig {\n inputRange: readonly number[];\n outputRange: readonly (string | number)[];\n colorSpace: ColorSpace;\n cache: SharedValue;\n}\n\nexport function useInterpolateConfig(\n inputRange: readonly number[],\n outputRange: readonly (string | number)[],\n colorSpace = ColorSpace.RGB\n): SharedValue {\n return useSharedValue({\n inputRange,\n outputRange,\n colorSpace,\n cache: makeMutable(null),\n });\n}\n\nexport const interpolateSharableColor = (\n value: number,\n interpolateConfig: SharedValue\n): string | number => {\n 'worklet';\n let colors = interpolateConfig.value.cache.value;\n if (interpolateConfig.value.colorSpace === ColorSpace.RGB) {\n if (!colors) {\n colors = getInterpolateRGB(interpolateConfig.value.outputRange);\n interpolateConfig.value.cache.value = colors;\n }\n return interpolateColorsRGB(\n value,\n interpolateConfig.value.inputRange,\n colors as InterpolateRGB\n );\n } else if (interpolateConfig.value.colorSpace === ColorSpace.HSV) {\n if (!colors) {\n colors = getInterpolateHSV(interpolateConfig.value.outputRange);\n interpolateConfig.value.cache.value = colors;\n }\n return interpolateColorsHSV(\n value,\n interpolateConfig.value.inputRange,\n colors as InterpolateHSV\n );\n }\n throw new Error(\n `Invalid color space provided: ${interpolateConfig.value.colorSpace}. Supported values are: ['RGB', 'HSV']`\n );\n};\n","import { addWhitelistedNativeProps } from '../ConfigHelper';\nimport { AdapterWorkletFunction } from './commonTypes';\n\nexport function createAnimatedPropAdapter(\n adapter: AdapterWorkletFunction,\n nativeProps?: string[]\n): AdapterWorkletFunction {\n const nativePropsToAdd: { [key: string]: boolean } = {};\n // eslint-disable-next-line no-unused-expressions\n nativeProps?.forEach((prop) => {\n nativePropsToAdd[prop] = true;\n });\n addWhitelistedNativeProps(nativePropsToAdd);\n return adapter;\n}\n\n// ADAPTERS\n\nexport const SVGAdapter: AdapterWorkletFunction = createAnimatedPropAdapter(\n (props) => {\n 'worklet';\n const keys = Object.keys(props);\n // transform\n if (keys.includes('transform')) {\n if (Array.isArray(props.transform)) {\n // case of array with 6 values => https://github.com/react-native-svg/react-native-svg/blob/b2e2c355204ff4b10973d3afce1495f7e4167ff7/src/elements/Shape.tsx#L200\n if (props.transform.length !== 6) {\n throw new Error(\n `invalid transform length of ${props.transform.length}, should be 6`\n );\n }\n const transform: number[] = props.transform as number[];\n const x: number = (props.x as number) ?? 0;\n const y: number = (props.y as number) ?? 0;\n props.transform = [\n { translateX: transform[0] * x + transform[2] * y + transform[4] },\n { translateY: transform[1] * x + transform[3] * y + transform[5] },\n ];\n } else if (typeof props.transform === 'string') {\n // case of string 'translate(translateX translateY)'\n // todo: handle other cases of transform string like here https://github.com/react-native-svg/react-native-svg/blob/b2e2c355204ff4b10973d3afce1495f7e4167ff7/src/lib/extract/extractTransform.ts#L184\n const transform: string = props.transform as string;\n const arr = transform\n .replace('translate(', '')\n .replace(')', '')\n .split(' ');\n props.transform = [\n { translateX: parseFloat(arr[0]) },\n { translateY: parseFloat(arr[1]) },\n ];\n }\n }\n // todo: other props\n }\n);\n\nexport const TextInputAdapter = createAnimatedPropAdapter(\n (props) => {\n 'worklet';\n const keys = Object.keys(props);\n // convert text to value like RN does here: https://github.com/facebook/react-native/blob/f2c6279ca497b34d5a2bfbb6f2d33dc7a7bea02a/Libraries/Components/TextInput/TextInput.js#L878\n if (keys.includes('value')) {\n props.text = props.value;\n delete props.value;\n }\n },\n ['text']\n);\n","import './LayoutAnimationRepository';\nexport * from './animationBuilder';\nexport * from './defaultAnimations';\nexport * from './defaultTransitions';\n","export { BaseAnimationBuilder } from './BaseAnimationBuilder';\nexport { ComplexAnimationBuilder } from './ComplexAnimationBuilder';\nexport { Keyframe } from './Keyframe';\nexport {\n LayoutAnimation,\n AnimationFunction,\n EntryAnimationsValues,\n ExitAnimationsValues,\n EntryExitAnimationFunction,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n LayoutAnimationsValues,\n LayoutAnimationFunction,\n ILayoutAnimationBuilder,\n BaseLayoutAnimationConfig,\n BaseBuilderAnimationConfig,\n LayoutAnimationAndConfig,\n IEntryExitAnimationBuilder,\n} from './commonTypes';\n","import { withDelay } from '../../animation';\nimport {\n EntryExitAnimationFunction,\n AnimationFunction,\n LayoutAnimationFunction,\n} from './commonTypes';\n\nexport class BaseAnimationBuilder {\n durationV?: number;\n delayV?: number;\n randomizeDelay = false;\n callbackV?: (finished: boolean) => void;\n\n static createInstance: () => BaseAnimationBuilder;\n build = (): EntryExitAnimationFunction | LayoutAnimationFunction => {\n throw Error('Unimplemented method in child class.');\n };\n\n static duration(durationMs: number): BaseAnimationBuilder {\n const instance = this.createInstance();\n return instance.duration(durationMs);\n }\n\n duration(durationMs: number): BaseAnimationBuilder {\n this.durationV = durationMs;\n return this;\n }\n\n static delay(delayMs: number): BaseAnimationBuilder {\n const instance = this.createInstance();\n return instance.delay(delayMs);\n }\n\n delay(delayMs: number): BaseAnimationBuilder {\n this.delayV = delayMs;\n return this;\n }\n\n static withCallback(\n callback: (finished: boolean) => void\n ): BaseAnimationBuilder {\n const instance = this.createInstance();\n return instance.withCallback(callback);\n }\n\n withCallback(callback: (finsihed: boolean) => void): BaseAnimationBuilder {\n this.callbackV = callback;\n return this;\n }\n\n // 300ms is the default animation duration. If any animation has different default has to override this method.\n static getDuration(): number {\n return 300;\n }\n\n getDuration(): number {\n return this.durationV ?? 300;\n }\n\n static randomDelay(): BaseAnimationBuilder {\n const instance = this.createInstance();\n return instance.randomDelay();\n }\n\n randomDelay(): BaseAnimationBuilder {\n this.randomizeDelay = true;\n return this;\n }\n\n // when randomizeDelay is set to true, randomize delay between 0 and provided value (or 1000ms if delay is not provided)\n getDelay(): number {\n return this.randomizeDelay\n ? Math.random() * (this.delayV ?? 1000)\n : this.delayV ?? 0;\n }\n\n getDelayFunction(): AnimationFunction {\n const isDelayProvided = this.randomizeDelay || this.delayV;\n return isDelayProvided\n ? withDelay\n : (_, animation) => {\n 'worklet';\n return animation;\n };\n }\n\n static build(): EntryExitAnimationFunction | LayoutAnimationFunction {\n const instance = this.createInstance();\n return instance.build();\n }\n}\n","import { withTiming, withSpring } from '../../animation';\nimport {\n AnimationFunction,\n BaseBuilderAnimationConfig,\n LayoutAnimationAndConfig,\n} from './commonTypes';\nimport { EasingFn } from '../../Easing';\nimport { BaseAnimationBuilder } from './BaseAnimationBuilder';\nexport class ComplexAnimationBuilder extends BaseAnimationBuilder {\n easingV?: EasingFn;\n rotateV?: string;\n type?: AnimationFunction;\n dampingV?: number;\n massV?: number;\n stiffnessV?: number;\n overshootClampingV?: number;\n restDisplacementThresholdV?: number;\n restSpeedThresholdV?: number;\n\n static createInstance: () => ComplexAnimationBuilder;\n\n static easing(easingFunction: EasingFn): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.easing(easingFunction);\n }\n\n easing(easingFunction: EasingFn): ComplexAnimationBuilder {\n this.easingV = easingFunction;\n return this;\n }\n\n static rotate(degree: string): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.rotate(degree);\n }\n\n rotate(degree: string): ComplexAnimationBuilder {\n this.rotateV = degree;\n return this;\n }\n\n static springify(): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.springify();\n }\n\n springify(): ComplexAnimationBuilder {\n this.type = withSpring as AnimationFunction;\n return this;\n }\n\n static damping(damping: number): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.damping(damping);\n }\n\n damping(damping: number): ComplexAnimationBuilder {\n this.dampingV = damping;\n return this;\n }\n\n static mass(mass: number): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.mass(mass);\n }\n\n mass(mass: number): ComplexAnimationBuilder {\n this.massV = mass;\n return this;\n }\n\n static stiffness(stiffness: number): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.stiffness(stiffness);\n }\n\n stiffness(stiffness: number): ComplexAnimationBuilder {\n this.stiffnessV = stiffness;\n return this;\n }\n\n static overshootClamping(overshootClamping: number): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.overshootClamping(overshootClamping);\n }\n\n overshootClamping(overshootClamping: number): ComplexAnimationBuilder {\n this.overshootClampingV = overshootClamping;\n return this;\n }\n\n static restDisplacementThreshold(\n restDisplacementThreshold: number\n ): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.restDisplacementThreshold(restDisplacementThreshold);\n }\n\n restDisplacementThreshold(\n restDisplacementThreshold: number\n ): ComplexAnimationBuilder {\n this.restDisplacementThresholdV = restDisplacementThreshold;\n return this;\n }\n\n static restSpeedThreshold(\n restSpeedThreshold: number\n ): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.restSpeedThreshold(restSpeedThreshold);\n }\n\n restSpeedThreshold(restSpeedThreshold: number): ComplexAnimationBuilder {\n this.restSpeedThresholdV = restSpeedThreshold;\n return this;\n }\n\n getAnimationAndConfig(): LayoutAnimationAndConfig {\n const duration = this.durationV;\n const easing = this.easingV;\n const rotate = this.rotateV;\n const type = this.type ? this.type : (withTiming as AnimationFunction);\n const damping = this.dampingV;\n const mass = this.massV;\n const stiffness = this.stiffnessV;\n const overshootClamping = this.overshootClampingV;\n const restDisplacementThreshold = this.restDisplacementThresholdV;\n const restSpeedThreshold = this.restSpeedThresholdV;\n\n const animation = type;\n\n const config: BaseBuilderAnimationConfig = {};\n\n if (type === withTiming) {\n if (easing) {\n config.easing = easing;\n }\n if (duration) {\n config.duration = duration;\n }\n if (rotate) {\n config.rotate = rotate;\n }\n } else {\n if (damping) {\n config.damping = damping;\n }\n if (mass) {\n config.mass = mass;\n }\n if (stiffness) {\n config.stiffness = stiffness;\n }\n if (overshootClamping) {\n config.overshootClamping = overshootClamping;\n }\n if (restDisplacementThreshold) {\n config.restDisplacementThreshold = restDisplacementThreshold;\n }\n if (restSpeedThreshold) {\n config.restSpeedThreshold = restSpeedThreshold;\n }\n if (rotate) {\n config.rotate = rotate;\n }\n }\n return [animation, config];\n }\n}\n","import { Easing, EasingFn } from '../../Easing';\nimport { withDelay, withSequence, withTiming } from '../../animation';\nimport {\n AnimationFunction,\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n KeyframeProps,\n} from './commonTypes';\nimport { TransformProperty, StyleProps } from '../../commonTypes';\nexport interface KeyframePoint {\n duration: number;\n value: number | string;\n easing?: EasingFn;\n}\nexport interface ParsedKeyframesDefinition {\n initialValues: StyleProps;\n keyframes: Record;\n}\nexport class Keyframe implements IEntryExitAnimationBuilder {\n durationV?: number;\n delayV?: number;\n callbackV?: (finished: boolean) => void;\n definitions: Record;\n\n /*\n Keyframe definition should be passed in the constructor as the map\n which keys are between range 0 - 100 (%) and correspond to the point in the animation progress.\n */\n constructor(definitions: Record) {\n this.definitions = definitions;\n }\n\n private parseDefinitions(): ParsedKeyframesDefinition {\n /* \n Each style property contain an array with all their key points: \n value, duration of transition to that value, and optional easing function (defaults to Linear)\n */\n const parsedKeyframes: Record = {};\n /*\n Parsing keyframes 'from' and 'to'.\n */\n if (this.definitions.from) {\n if (this.definitions['0']) {\n throw Error(\n \"You cannot provide both keyframe 0 and 'from' as they both specified initial values\"\n );\n }\n this.definitions['0'] = this.definitions.from;\n delete this.definitions.from;\n }\n if (this.definitions.to) {\n if (this.definitions['100']) {\n throw Error(\n \"You cannot provide both keyframe 100 and 'to' as they both specified values at the end of the animation.\"\n );\n }\n this.definitions['100'] = this.definitions.to;\n delete this.definitions.to;\n }\n /* \n One of the assumptions is that keyframe 0 is required to properly set initial values.\n Every other keyframe should contain properties from the set provided as initial values.\n */\n if (!this.definitions['0']) {\n throw Error(\n \"Please provide 0, or 'from' keyframe with initial state of your object.\"\n );\n }\n const initialValues: StyleProps = this.definitions['0'] as StyleProps;\n /*\n Initialize parsedKeyframes for properties provided in initial keyframe\n */\n Object.keys(initialValues).forEach((styleProp: string) => {\n if (styleProp === 'transform') {\n initialValues[styleProp]?.forEach((transformStyle, index) => {\n Object.keys(transformStyle).forEach((transformProp: string) => {\n parsedKeyframes[\n index.toString() + '_transform:' + transformProp\n ] = [];\n });\n });\n } else {\n parsedKeyframes[styleProp] = [];\n }\n });\n\n const duration: number = this.durationV ? this.durationV : 500;\n const animationKeyPoints: Array = Array.from(\n Object.keys(this.definitions)\n );\n\n const getAnimationDuration = (\n key: string,\n currentKeyPoint: number\n ): number => {\n const maxDuration = (currentKeyPoint / 100) * duration;\n const currentDuration = parsedKeyframes[key].reduce(\n (acc: number, value: KeyframePoint) => acc + value.duration,\n 0\n );\n return maxDuration - currentDuration;\n };\n\n /* \n Other keyframes can't contain properties that were not specified in initial keyframe.\n */\n const addKeyPoint = ({\n key,\n value,\n currentKeyPoint,\n easing,\n }: {\n key: string;\n value: string | number;\n currentKeyPoint: number;\n easing?: EasingFn;\n }): void => {\n if (!(key in parsedKeyframes)) {\n throw Error(\n \"Keyframe can contain only that set of properties that were provide with initial values (keyframe 0 or 'from')\"\n );\n }\n parsedKeyframes[key].push({\n duration: getAnimationDuration(key, currentKeyPoint),\n value: value,\n easing: easing,\n });\n };\n animationKeyPoints\n .filter((value: string) => parseInt(value) !== 0)\n .sort((a: string, b: string) => parseInt(a) - parseInt(b))\n .forEach((keyPoint: string) => {\n if (parseInt(keyPoint) < 0 || parseInt(keyPoint) > 100) {\n throw Error('Keyframe should be in between range 0 - 100.');\n }\n const keyframe: KeyframeProps = this.definitions[keyPoint];\n const easing = keyframe.easing;\n delete keyframe.easing;\n const addKeyPointWith = (key: string, value: string | number) =>\n addKeyPoint({\n key,\n value,\n currentKeyPoint: parseInt(keyPoint),\n easing,\n });\n Object.keys(keyframe).forEach((key: string) => {\n if (key === 'transform') {\n keyframe[key]?.forEach(\n (transformStyle: { [key: string]: any }, index) => {\n Object.keys(transformStyle).forEach((transformProp: string) => {\n addKeyPointWith(\n index.toString() + '_transform:' + transformProp,\n transformStyle[transformProp]\n );\n });\n }\n );\n } else {\n addKeyPointWith(key, keyframe[key]);\n }\n });\n });\n return { initialValues: initialValues, keyframes: parsedKeyframes };\n }\n\n duration(durationMs: number): Keyframe {\n this.durationV = durationMs;\n return this;\n }\n\n delay(delayMs: number): Keyframe {\n this.delayV = delayMs;\n return this;\n }\n\n withCallback(callback: (finsihed: boolean) => void): Keyframe {\n this.callbackV = callback;\n return this;\n }\n\n private getDelayFunction(): AnimationFunction {\n const delay = this.delayV;\n return delay\n ? withDelay\n : (_, animation) => {\n 'worklet';\n return animation;\n };\n }\n\n build = (): EntryExitAnimationFunction => {\n const delay = this.delayV;\n const delayFunction = this.getDelayFunction();\n const { keyframes, initialValues } = this.parseDefinitions();\n const callback = this.callbackV;\n\n return (_targetValues) => {\n 'worklet';\n const animations: StyleProps = {};\n\n /* \n For each style property, an animations sequence is created that corresponds with its key points.\n Transform style properties require special handling because of their nested structure.\n */\n const addAnimation = (key: string) => {\n const keyframePoints = keyframes[key];\n // in case if property was only passed as initial value\n if (keyframePoints.length === 0) return;\n const animation = delayFunction(\n delay,\n keyframePoints.length === 1\n ? withTiming(keyframePoints[0].value, {\n duration: keyframePoints[0].duration,\n easing: keyframePoints[0].easing\n ? keyframePoints[0].easing\n : Easing.linear,\n })\n : withSequence.apply(\n this,\n keyframePoints.map((keyframePoint: KeyframePoint) =>\n withTiming(keyframePoint.value, {\n duration: keyframePoint.duration,\n easing: keyframePoint.easing\n ? keyframePoint.easing\n : Easing.linear,\n })\n )\n )\n );\n if (key.includes('transform')) {\n if (!('transform' in animations)) {\n animations.transform = [];\n }\n animations.transform?.push({\n [key.split(':')[1]]: animation,\n });\n } else {\n animations[key] = animation;\n }\n };\n Object.keys(initialValues).forEach((key: string) => {\n if (key.includes('transform')) {\n initialValues[key].forEach(\n (transformProp: Record, index: number) => {\n Object.keys(transformProp).forEach((transformPropKey: string) => {\n addAnimation(\n index.toString() + '_transform:' + transformPropKey\n );\n });\n }\n );\n } else {\n addAnimation(key);\n }\n });\n return {\n animations: animations,\n initialValues: initialValues,\n callback: callback,\n };\n };\n };\n}\n","import { EasingFn } from '../../Easing';\nimport { StyleProps } from '../../commonTypes';\n\nexport interface KeyframeProps extends StyleProps {\n easing?: EasingFn;\n [key: string]: any;\n}\n\nexport type LayoutAnimation = {\n initialValues: StyleProps;\n animations: StyleProps;\n callback?: (finished: boolean) => void;\n};\n\nexport type AnimationFunction = (a?: any, b?: any, c?: any) => any; // this is just a temporary mock\n\nexport interface EntryAnimationsValues {\n targetOriginX: number;\n targetOriginY: number;\n targetWidth: number;\n targetHeight: number;\n targetGlobalOriginX: number;\n targetGlobalOriginY: number;\n}\n\nexport interface ExitAnimationsValues {\n currentOriginX: number;\n currentOriginY: number;\n currentWidth: number;\n currentHeight: number;\n currentGlobalOriginX: number;\n currentGlobalOriginY: number;\n}\n\nexport type EntryExitAnimationFunction = (\n targetValues: EntryAnimationsValues | ExitAnimationsValues\n) => LayoutAnimation;\n\nexport type AnimationConfigFunction = (targetValues: T) => LayoutAnimation;\n\nexport interface LayoutAnimationsValues {\n currentOriginX: number;\n currentOriginY: number;\n currentWidth: number;\n currentHeight: number;\n currentGlobalOriginX: number;\n currentGlobalOriginY: number;\n targetOriginX: number;\n targetOriginY: number;\n targetWidth: number;\n targetHeight: number;\n targetGlobalOriginX: number;\n targetGlobalOriginY: number;\n windowWidth: number;\n windowHeight: number;\n}\n\nexport type LayoutAnimationFunction = (\n targetValues: LayoutAnimationsValues\n) => LayoutAnimation;\n\nexport interface ILayoutAnimationBuilder {\n build: () => LayoutAnimationFunction;\n}\n\nexport interface BaseLayoutAnimationConfig {\n duration?: number;\n easing?: EasingFn;\n type?: AnimationFunction;\n damping?: number;\n mass?: number;\n stiffness?: number;\n overshootClamping?: number;\n restDisplacementThreshold?: number;\n restSpeedThreshold?: number;\n}\n\nexport interface BaseBuilderAnimationConfig extends BaseLayoutAnimationConfig {\n rotate?: number | string;\n}\n\nexport type LayoutAnimationAndConfig = [\n AnimationFunction,\n BaseBuilderAnimationConfig\n];\n\nexport interface IEntryExitAnimationBuilder {\n build: () => EntryExitAnimationFunction;\n}\n\nexport interface IEntryAnimationBuilder {\n build: () => AnimationConfigFunction;\n}\n\nexport interface IExitAnimationBuilder {\n build: () => AnimationConfigFunction;\n}\n","export * from './Flip';\nexport * from './Stretch';\nexport * from './Fade';\nexport * from './Slide';\nexport * from './Zoom';\nexport * from './Bounce';\nexport * from './Lightspeed';\nexport * from './Pinwheel';\nexport * from './Rotate';\nexport * from './Roll';\n","import {\n IEntryExitAnimationBuilder,\n EntryExitAnimationFunction,\n EntryAnimationsValues,\n ExitAnimationsValues,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nexport class FlipInXUp\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): FlipInXUp {\n return new FlipInXUp();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateX: '90deg' },\n { translateY: -targetValues.targetHeight },\n ],\n },\n animations: {\n transform: [\n { perspective: 500 },\n { rotateX: delayFunction(delay, animation('0deg', config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInYLeft\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): FlipInYLeft {\n return new FlipInYLeft();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateY: '-90deg' },\n { translateX: -targetValues.targetWidth },\n ],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInXDown\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): FlipInXDown {\n return new FlipInXDown();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateX: '-90deg' },\n { translateY: targetValues.targetHeight },\n ],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('0deg', config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInYRight\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): FlipInYRight {\n return new FlipInYRight();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateY: '90deg' },\n { translateX: targetValues.targetWidth },\n ],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInEasyX\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FlipInEasyX {\n return new FlipInEasyX();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n initialValues: {\n transform: [{ perspective: 500 }, { rotateX: '90deg' }],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('0deg', config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInEasyY\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FlipInEasyY {\n return new FlipInEasyY();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n initialValues: {\n transform: [{ perspective: 500 }, { rotateY: '90deg' }],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('0deg', config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutXUp\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): FlipOutXUp {\n return new FlipOutXUp();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateX: '0deg' },\n { translateY: 0 },\n ],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('90deg', config)) },\n {\n translateY: delayFunction(\n delay,\n animation(-targetValues.currentHeight, config)\n ),\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutYLeft\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): FlipOutYLeft {\n return new FlipOutYLeft();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateY: '0deg' },\n { translateX: 0 },\n ],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('-90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(-targetValues.currentWidth, config)\n ),\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutXDown\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): FlipOutXDown {\n return new FlipOutXDown();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateX: '0deg' },\n { translateY: 0 },\n ],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('-90deg', config)) },\n {\n translateY: delayFunction(\n delay,\n animation(targetValues.currentHeight, config)\n ),\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutYRight\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): FlipOutYRight {\n return new FlipOutYRight();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateY: '0deg' },\n { translateX: 0 },\n ],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(targetValues.currentWidth, config)\n ),\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutEasyX\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FlipOutEasyX {\n return new FlipOutEasyX();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n initialValues: {\n transform: [{ perspective: 500 }, { rotateX: '0deg' }],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('90deg', config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutEasyY\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FlipOutEasyY {\n return new FlipOutEasyY();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n initialValues: {\n transform: [{ perspective: 500 }, { rotateY: '0deg' }],\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('90deg', config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n","import {\n IEntryExitAnimationBuilder,\n EntryExitAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nexport class StretchInX\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): StretchInX {\n return new StretchInX();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scaleX: delayFunction(delay, animation(1, config)) }],\n },\n initialValues: {\n transform: [{ scaleX: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class StretchInY\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): StretchInY {\n return new StretchInY();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scaleY: delayFunction(delay, animation(1, config)) }],\n },\n initialValues: {\n transform: [{ scaleY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class StretchOutX\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): StretchOutX {\n return new StretchOutX();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scaleX: delayFunction(delay, animation(0, config)) }],\n },\n initialValues: {\n transform: [{ scaleX: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class StretchOutY\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): StretchOutY {\n return new StretchOutY();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scaleY: delayFunction(delay, animation(0, config)) }],\n },\n initialValues: {\n transform: [{ scaleY: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n","import {\n IEntryExitAnimationBuilder,\n EntryExitAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nexport class FadeIn\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeIn {\n return new FadeIn();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return (_) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n },\n initialValues: {\n opacity: 0,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeInRight {\n return new FadeInRight();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateX: 25 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeInLeft {\n return new FadeInLeft();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateX: -25 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeInUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeInUp {\n return new FadeInUp();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateY: -25 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeInDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeInDown {\n return new FadeInDown();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateY: 25 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOut\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeOut {\n return new FadeOut();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return (_) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n },\n initialValues: {\n opacity: 1,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeOutRight {\n return new FadeOutRight();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { translateX: delayFunction(delay, animation(25, config)) },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateX: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeOutLeft {\n return new FadeOutLeft();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { translateX: delayFunction(delay, animation(-25, config)) },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateX: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOutUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeOutUp {\n return new FadeOutUp();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { translateY: delayFunction(delay, animation(-25, config)) },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOutDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): FadeOutDown {\n return new FadeOutDown();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { translateY: delayFunction(delay, animation(25, config)) },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n","import {\n EntryAnimationsValues,\n ExitAnimationsValues,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\nimport { Dimensions } from 'react-native';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nconst { width, height } = Dimensions.get('window');\n\nexport class SlideInRight\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): SlideInRight {\n return new SlideInRight();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originX: delayFunction(\n delay,\n animation(values.targetOriginX, config)\n ),\n },\n initialValues: {\n originX: values.targetOriginX + width,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideInLeft\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): SlideInLeft {\n return new SlideInLeft();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originX: delayFunction(\n delay,\n animation(values.targetOriginX, config)\n ),\n },\n initialValues: {\n originX: values.targetOriginX - width,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideOutRight\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): SlideOutRight {\n return new SlideOutRight();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originX: delayFunction(\n delay,\n animation(Math.max(values.currentOriginX + width, width), config)\n ),\n },\n initialValues: {\n originX: values.currentOriginX,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideOutLeft\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): SlideOutLeft {\n return new SlideOutLeft();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originX: delayFunction(\n delay,\n animation(Math.min(values.currentOriginX - width, -width), config)\n ),\n },\n initialValues: {\n originX: values.currentOriginX,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideInUp\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): SlideInUp {\n return new SlideInUp();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originY: delayFunction(\n delay,\n animation(values.targetOriginY, config)\n ),\n },\n initialValues: {\n originY: -height,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideInDown\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): SlideInDown {\n return new SlideInDown();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originY: delayFunction(\n delay,\n animation(values.targetOriginY, config)\n ),\n },\n initialValues: {\n originY: values.targetOriginY + height,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideOutUp\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): SlideOutUp {\n return new SlideOutUp();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originY: delayFunction(\n delay,\n animation(Math.min(values.currentOriginY - height, -height), config)\n ),\n },\n initialValues: { originY: values.currentOriginY },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideOutDown\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): SlideOutDown {\n return new SlideOutDown();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originY: delayFunction(\n delay,\n animation(Math.max(values.currentOriginY + height, height), config)\n ),\n },\n initialValues: { originY: values.currentOriginY },\n callback: callback,\n };\n };\n };\n}\n","import {\n IEntryExitAnimationBuilder,\n EntryExitAnimationFunction,\n EntryAnimationsValues,\n ExitAnimationsValues,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\nimport { Dimensions } from 'react-native';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nconst { width, height } = Dimensions.get('window');\n\nexport class ZoomIn\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomIn {\n return new ZoomIn();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scale: delayFunction(delay, animation(1, config)) }],\n },\n initialValues: {\n transform: [{ scale: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInRotate\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomInRotate {\n return new ZoomInRotate();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const rotate = this.rotateV ? this.rotateV : '0.3';\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { scale: delayFunction(delay, animation(1, config)) },\n { rotate: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ scale: 0 }, { rotate: rotate }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomInLeft {\n return new ZoomInLeft();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: -width }, { scale: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomInRight {\n return new ZoomInRight();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: width }, { scale: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomInUp {\n return new ZoomInUp();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: -height }, { scale: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomInDown {\n return new ZoomInDown();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: height }, { scale: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInEasyUp\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): ZoomInEasyUp {\n return new ZoomInEasyUp();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: -values.targetHeight }, { scale: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInEasyDown\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): ZoomInEasyDown {\n return new ZoomInEasyDown();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: values.targetHeight }, { scale: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOut\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomOut {\n return new ZoomOut();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scale: delayFunction(delay, animation(0, config)) }],\n },\n initialValues: {\n transform: [{ scale: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutRotate\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomOutRotate {\n return new ZoomOutRotate();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const rotate = this.rotateV ? this.rotateV : '0.3';\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { scale: delayFunction(delay, animation(0, config)) },\n { rotate: delayFunction(delay, animation(rotate, config)) },\n ],\n },\n initialValues: {\n transform: [{ scale: 1 }, { rotate: '0' }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomOutLeft {\n return new ZoomOutLeft();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(-width, config)) },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }, { scale: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomOutRight {\n return new ZoomOutRight();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(width, config)) },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }, { scale: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomOutUp {\n return new ZoomOutUp();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(-height, config)) },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }, { scale: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): ZoomOutDown {\n return new ZoomOutDown();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(height, config)) },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }, { scale: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutEasyUp\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): ZoomOutEasyUp {\n return new ZoomOutEasyUp();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n animation(-values.currentHeight, config)\n ),\n },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }, { scale: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutEasyDown\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): ZoomOutEasyDown {\n return new ZoomOutEasyDown();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n animation(values.currentHeight, config)\n ),\n },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }, { scale: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n","import {\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\nimport { withSequence, withTiming } from '../../animation';\nimport { Dimensions } from 'react-native';\nimport { BaseAnimationBuilder } from '../animationBuilder/BaseAnimationBuilder';\n\nconst { width, height } = Dimensions.get('window');\n\nexport class BounceIn\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceIn {\n return new BounceIn();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n scale: delayFunction(\n delay,\n withSequence(\n withTiming(1.2, { duration: duration * 0.55 }),\n withTiming(0.9, { duration: duration * 0.15 }),\n withTiming(1.1, { duration: duration * 0.15 }),\n withTiming(1, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ scale: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceInDown\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceInDown {\n return new BounceInDown();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n withSequence(\n withTiming(-20, { duration: duration * 0.55 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [\n {\n translateY: height,\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceInUp\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceInUp {\n return new BounceInUp();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n withSequence(\n withTiming(20, { duration: duration * 0.55 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateY: -height }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceInLeft\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceInLeft {\n return new BounceInLeft();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n withSequence(\n withTiming(20, { duration: duration * 0.55 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateX: -width }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceInRight\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceInRight {\n return new BounceInRight();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n withSequence(\n withTiming(-20, { duration: duration * 0.55 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateX: width }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOut\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceOut {\n return new BounceOut();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n scale: delayFunction(\n delay,\n withSequence(\n withTiming(1.1, { duration: duration * 0.15 }),\n withTiming(0.9, { duration: duration * 0.15 }),\n withTiming(1.2, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.55 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ scale: 1 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOutDown\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceOutDown {\n return new BounceOutDown();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n withSequence(\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-20, { duration: duration * 0.15 }),\n withTiming(height, {\n duration: duration * 0.55,\n })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOutUp\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceOutUp {\n return new BounceOutUp();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n withSequence(\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(20, { duration: duration * 0.15 }),\n withTiming(-height, {\n duration: duration * 0.55,\n })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOutLeft\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceOutRight {\n return new BounceOutLeft();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n withSequence(\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(20, { duration: duration * 0.15 }),\n withTiming(-width, {\n duration: duration * 0.55,\n })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOutRight\n extends BaseAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): BounceOutRight {\n return new BounceOutRight();\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n withSequence(\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-20, { duration: duration * 0.15 }),\n withTiming(width, {\n duration: duration * 0.55,\n })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n","import { Dimensions } from 'react-native';\nimport { withSequence, withTiming } from '../../animation';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\nimport {\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\n\nconst { width } = Dimensions.get('window');\n\nexport class LightSpeedInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): LightSpeedInRight {\n return new LightSpeedInRight();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, withTiming(1, { duration: duration })),\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(0, { ...config, duration: duration * 0.7 })\n ),\n },\n {\n skewX: delayFunction(\n delay,\n withSequence(\n withTiming('10deg', { duration: duration * 0.7 }),\n withTiming('-5deg', { duration: duration * 0.15 }),\n withTiming('0deg', { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateX: width }, { skewX: '-45deg' }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class LightSpeedInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): LightSpeedInLeft {\n return new LightSpeedInLeft();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, withTiming(1, { duration: duration })),\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(0, { ...config, duration: duration * 0.7 })\n ),\n },\n {\n skewX: delayFunction(\n delay,\n withSequence(\n withTiming('-10deg', { duration: duration * 0.7 }),\n withTiming('5deg', { duration: duration * 0.15 }),\n withTiming('0deg', { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateX: -width }, { skewX: '45deg' }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class LightSpeedOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): LightSpeedOutRight {\n return new LightSpeedOutRight();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n {\n translateX: delayFunction(delay, animation(width, config)),\n },\n {\n skewX: delayFunction(delay, animation('-45deg', config)),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateX: 0 }, { skewX: '0deg' }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class LightSpeedOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): LightSpeedOutLeft {\n return new LightSpeedOutLeft();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n {\n translateX: delayFunction(delay, animation(-width, config)),\n },\n {\n skewX: delayFunction(delay, animation('45deg', config)),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateX: 0 }, { skewX: '0deg' }],\n },\n callback: callback,\n };\n };\n };\n}\n","import { ComplexAnimationBuilder } from '../animationBuilder';\nimport {\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\n\nexport class PinwheelIn\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): PinwheelIn {\n return new PinwheelIn();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (_values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n {\n scale: delayFunction(delay, animation(1, config)),\n },\n {\n rotate: delayFunction(delay, animation('0', config)),\n },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n {\n scale: 0,\n },\n {\n rotate: '5',\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class PinwheelOut\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): PinwheelOut {\n return new PinwheelOut();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (_values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n {\n scale: delayFunction(delay, animation(0, config)),\n },\n {\n rotate: delayFunction(delay, animation('5', config)),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [\n {\n scale: 1,\n },\n {\n rotate: '0',\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n","import { ComplexAnimationBuilder } from '../animationBuilder';\nimport {\n EntryAnimationsValues,\n ExitAnimationsValues,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\n\nexport class RotateInDownLeft\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): RotateInDownLeft {\n return new RotateInDownLeft();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { rotate: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n { rotate: '-90deg' },\n { translateX: values.targetWidth / 2 - values.targetHeight / 2 },\n { translateY: -(values.targetWidth / 2 - values.targetHeight / 2) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateInDownRight\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): RotateInDownRight {\n return new RotateInDownRight();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { rotate: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n { rotate: '90deg' },\n { translateX: -(values.targetWidth / 2 - values.targetHeight / 2) },\n { translateY: -(values.targetWidth / 2 - values.targetHeight / 2) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateInUpLeft\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): RotateInUpLeft {\n return new RotateInUpLeft();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { rotate: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n { rotate: '90deg' },\n { translateX: values.targetWidth / 2 - values.targetHeight / 2 },\n { translateY: values.targetWidth / 2 - values.targetHeight / 2 },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateInUpRight\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder {\n static createInstance(): RotateInUpRight {\n return new RotateInUpRight();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { rotate: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n { rotate: '-90deg' },\n { translateX: -(values.targetWidth / 2 - values.targetHeight / 2) },\n { translateY: values.targetWidth / 2 - values.targetHeight / 2 },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateOutDownLeft\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): RotateOutDownLeft {\n return new RotateOutDownLeft();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { rotate: delayFunction(delay, animation('90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(\n values.currentWidth / 2 - values.currentHeight / 2,\n config\n )\n ),\n },\n {\n translateY: delayFunction(\n delay,\n animation(\n values.currentWidth / 2 - values.currentHeight / 2,\n config\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ rotate: '0deg' }, { translateX: 0 }, { translateY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateOutDownRight\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): RotateOutDownRight {\n return new RotateOutDownRight();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { rotate: delayFunction(delay, animation('-90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(\n -(values.currentWidth / 2 - values.currentHeight / 2),\n config\n )\n ),\n },\n {\n translateY: delayFunction(\n delay,\n animation(\n values.currentWidth / 2 - values.currentHeight / 2,\n config\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ rotate: '0deg' }, { translateX: 0 }, { translateY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateOutUpLeft\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): RotateOutUpLeft {\n return new RotateOutUpLeft();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { rotate: delayFunction(delay, animation('-90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(\n values.currentWidth / 2 - values.currentHeight / 2,\n config\n )\n ),\n },\n {\n translateY: delayFunction(\n delay,\n animation(\n -(values.currentWidth / 2 - values.currentHeight / 2),\n config\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ rotate: '0deg' }, { translateX: 0 }, { translateY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateOutUpRight\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder {\n static createInstance(): RotateOutUpRight {\n return new RotateOutUpRight();\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { rotate: delayFunction(delay, animation('90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(\n -(values.currentWidth / 2 - values.currentHeight / 2),\n config\n )\n ),\n },\n {\n translateY: delayFunction(\n delay,\n animation(\n -(values.currentWidth / 2 - values.currentHeight / 2),\n config\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ rotate: '0deg' }, { translateX: 0 }, { translateY: 0 }],\n },\n callback: callback,\n };\n };\n };\n}\n","import { Dimensions } from 'react-native';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\nimport {\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\n\nconst { width } = Dimensions.get('window');\n\nexport class RollInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): RollInLeft {\n return new RollInLeft();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(0), config) },\n { rotate: delayFunction(delay, animation('0deg', config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: -width }, { rotate: '-180deg' }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RollInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): RollInRight {\n return new RollInRight();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n { rotate: delayFunction(delay, animation('0deg', config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: width }, { rotate: '180deg' }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RollOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): RollOutLeft {\n return new RollOutLeft();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(-width, config)) },\n { rotate: delayFunction(delay, animation('-180deg', config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }, { rotate: '0deg' }],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RollOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder {\n static createInstance(): RollOutRight {\n return new RollOutRight();\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(width, config)) },\n { rotate: delayFunction(delay, animation('180deg', config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }, { rotate: '0deg' }],\n },\n callback: callback,\n };\n };\n };\n}\n","export * from './LinearTransition';\nexport * from './FadingTransition';\nexport * from './SequencedTransition';\nexport * from './JumpingTransition';\nexport * from './CurvedTransition';\nexport * from './EntryExitTransition';\n","import { ComplexAnimationBuilder } from '../animationBuilder/ComplexAnimationBuilder';\nimport {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\n\nexport class LinearTransition\n extends ComplexAnimationBuilder\n implements ILayoutAnimationBuilder {\n static createInstance(): LinearTransition {\n return new LinearTransition();\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return (values) => {\n 'worklet';\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n originX: delayFunction(\n delay,\n animation(values.targetOriginX, config)\n ),\n originY: delayFunction(\n delay,\n animation(values.targetOriginY, config)\n ),\n width: delayFunction(delay, animation(values.targetWidth, config)),\n height: delayFunction(delay, animation(values.targetHeight, config)),\n },\n callback: callback,\n };\n };\n };\n}\n\nexport const Layout = LinearTransition;\n","import { withSequence, withTiming } from '../../animation';\nimport {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { BaseAnimationBuilder } from '../animationBuilder';\n\nexport class FadingTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder {\n static createInstance(): FadingTransition {\n return new FadingTransition();\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const duration = this.durationV ?? 500;\n\n return (values) => {\n 'worklet';\n return {\n initialValues: {\n opacity: 1,\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n opacity: delayFunction(\n delay,\n withSequence(\n withTiming(0, { duration: duration }),\n withTiming(1, { duration: duration })\n )\n ),\n originX: delayFunction(\n delay + duration,\n withTiming(values.targetOriginX, { duration: 50 })\n ),\n originY: delayFunction(\n delay + duration,\n withTiming(values.targetOriginY, { duration: 50 })\n ),\n width: delayFunction(\n delay + duration,\n withTiming(values.targetWidth, { duration: 50 })\n ),\n height: delayFunction(\n delay + duration,\n withTiming(values.targetHeight, { duration: 50 })\n ),\n },\n callback: callback,\n };\n };\n };\n}\n","import { withSequence, withTiming } from '../../animation';\nimport {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { BaseAnimationBuilder } from '../animationBuilder';\n\nexport class SequencedTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder {\n reversed = false;\n\n static createInstance(): SequencedTransition {\n return new SequencedTransition();\n }\n\n static reverse(): SequencedTransition {\n const instance = SequencedTransition.createInstance();\n return instance.reverse();\n }\n\n reverse(): SequencedTransition {\n this.reversed = !this.reversed;\n return this;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const sequenceDuration = (this.durationV ?? 500) / 2;\n const config = { duration: sequenceDuration };\n const reverse = this.reversed;\n\n return (values) => {\n 'worklet';\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n originX: delayFunction(\n delay,\n withSequence(\n withTiming(\n reverse ? values.currentOriginX : values.targetOriginX,\n config\n ),\n withTiming(values.targetOriginX, config)\n )\n ),\n originY: delayFunction(\n delay,\n withSequence(\n withTiming(\n reverse ? values.targetOriginY : values.currentOriginY,\n config\n ),\n withTiming(values.targetOriginY, config)\n )\n ),\n width: delayFunction(\n delay,\n withSequence(\n withTiming(\n reverse ? values.currentWidth : values.targetWidth,\n config\n ),\n withTiming(values.targetWidth, config)\n )\n ),\n height: delayFunction(\n delay,\n withSequence(\n withTiming(\n reverse ? values.targetHeight : values.currentHeight,\n config\n ),\n withTiming(values.targetHeight, config)\n )\n ),\n },\n callback: callback,\n };\n };\n };\n}\n","import {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { withSequence, withTiming } from '../../animation';\nimport { Easing } from '../../Easing';\nimport { BaseAnimationBuilder } from '../animationBuilder';\nexport class JumpingTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder {\n static createInstance(): JumpingTransition {\n return new JumpingTransition();\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const duration = (this.durationV ?? 300) / 2;\n const config = { duration: duration * 2 };\n\n return (values) => {\n 'worklet';\n const d = Math.max(\n Math.abs(values.targetOriginX - values.currentOriginX),\n Math.abs(values.targetOriginY - values.currentOriginY)\n );\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n originX: delayFunction(\n delay,\n withTiming(values.targetOriginX, config)\n ),\n originY: delayFunction(\n delay,\n withSequence(\n withTiming(\n Math.min(values.targetOriginY, values.currentOriginY) - d,\n {\n duration,\n easing: Easing.out(Easing.exp),\n }\n ),\n withTiming(values.targetOriginY, {\n ...config,\n duration,\n easing: Easing.bounce,\n })\n )\n ),\n width: delayFunction(delay, withTiming(values.targetWidth, config)),\n height: delayFunction(delay, withTiming(values.targetHeight, config)),\n },\n callback: callback,\n };\n };\n };\n}\n","import {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { BaseAnimationBuilder } from '../animationBuilder';\nimport { EasingFn, Easing } from '../../Easing';\nimport { withTiming } from '../../animation';\n\nexport class CurvedTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder {\n easingXV: EasingFn = Easing.in(Easing.ease);\n easingYV: EasingFn = Easing.out(Easing.ease);\n easingWidthV: EasingFn = Easing.in(Easing.exp);\n easingHeightV: EasingFn = Easing.out(Easing.exp);\n static createInstance(): CurvedTransition {\n return new CurvedTransition();\n }\n\n static easingX(easing: EasingFn): CurvedTransition {\n const instance = this.createInstance();\n return instance.easingX(easing);\n }\n\n easingX(easing: EasingFn): CurvedTransition {\n this.easingXV = easing;\n return this;\n }\n\n static easingY(easing: EasingFn): CurvedTransition {\n const instance = this.createInstance();\n return instance.easingY(easing);\n }\n\n easingY(easing: EasingFn): CurvedTransition {\n this.easingYV = easing;\n return this;\n }\n\n static easingWidth(easing: EasingFn): CurvedTransition {\n const instance = this.createInstance();\n return instance.easingWidth(easing);\n }\n\n easingWidth(easing: EasingFn): CurvedTransition {\n this.easingWidthV = easing;\n return this;\n }\n\n static easingHeight(easing: EasingFn): CurvedTransition {\n const instance = this.createInstance();\n return instance.easingHeight(easing);\n }\n\n easingHeight(easing: EasingFn): CurvedTransition {\n this.easingHeightV = easing;\n return this;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const duration = this.durationV ?? 300;\n const easing = {\n easingX: this.easingXV,\n easingY: this.easingYV,\n easingWidth: this.easingWidthV,\n easingHeight: this.easingHeightV,\n };\n\n return (values) => {\n 'worklet';\n\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n originX: delayFunction(\n delay,\n withTiming(values.targetOriginX, {\n duration,\n easing: easing.easingX,\n })\n ),\n originY: delayFunction(\n delay,\n withTiming(values.targetOriginY, {\n duration,\n easing: easing.easingY,\n })\n ),\n width: delayFunction(\n delay,\n withTiming(values.targetWidth, {\n duration,\n easing: easing.easingWidth,\n })\n ),\n height: delayFunction(\n delay,\n withTiming(values.targetHeight, {\n duration,\n easing: easing.easingHeight,\n })\n ),\n },\n callback: callback,\n };\n };\n };\n}\n","import {\n ILayoutAnimationBuilder,\n LayoutAnimationsValues,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { BaseAnimationBuilder } from '../animationBuilder';\nimport { withSequence, withTiming } from '../../animation';\nimport { FadeIn, FadeOut } from '../defaultAnimations/Fade';\nimport {\n StyleProps,\n TransformProperty,\n AnimationObject,\n} from '../../commonTypes';\n\nexport class EntryExitTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder {\n enteringV: BaseAnimationBuilder | typeof BaseAnimationBuilder = FadeIn;\n\n exitingV: BaseAnimationBuilder | typeof BaseAnimationBuilder = FadeOut;\n\n static createInstance(): EntryExitTransition {\n return new EntryExitTransition();\n }\n\n static entering(\n animation: BaseAnimationBuilder | typeof BaseAnimationBuilder\n ): EntryExitTransition {\n const instance = this.createInstance();\n return instance.entering(animation);\n }\n\n entering(\n animation: BaseAnimationBuilder | typeof BaseAnimationBuilder\n ): EntryExitTransition {\n this.enteringV = animation;\n return this;\n }\n\n static exiting(\n animation: BaseAnimationBuilder | typeof BaseAnimationBuilder\n ): EntryExitTransition {\n const instance = this.createInstance();\n return instance.exiting(animation);\n }\n\n exiting(\n animation: BaseAnimationBuilder | typeof BaseAnimationBuilder\n ): EntryExitTransition {\n this.exitingV = animation;\n return this;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const enteringAnimation = this.enteringV.build();\n const exitingAnimation = this.exitingV.build();\n const exitingDuration = this.exitingV.getDuration();\n\n return (values) => {\n 'worklet';\n const enteringValues = enteringAnimation(values);\n const exitingValues = exitingAnimation(values);\n const animations: StyleProps = {\n transform: [],\n };\n\n for (const prop of Object.keys(exitingValues.animations)) {\n if (prop === 'transform') {\n exitingValues.animations[prop]?.forEach((value, index) => {\n for (const transformProp of Object.keys(value)) {\n animations.transform?.push({\n [transformProp]: delayFunction(\n delay,\n withSequence(\n value[transformProp as keyof TransformProperty],\n withTiming(\n exitingValues.initialValues.transform\n ? exitingValues.initialValues.transform[index][\n transformProp as keyof TransformProperty\n ]\n : 0,\n { duration: 0 }\n )\n )\n ),\n } as TransformProperty);\n }\n });\n } else {\n const sequence =\n enteringValues.animations[prop] !== undefined\n ? [\n exitingValues.animations[prop],\n withTiming(enteringValues.initialValues[prop], {\n duration: 0,\n }),\n enteringValues.animations[prop],\n ]\n : [\n exitingValues.animations[prop],\n withTiming(\n Object.keys(values).includes(prop)\n ? values[prop as keyof LayoutAnimationsValues]\n : exitingValues.initialValues[prop],\n { duration: 0 }\n ),\n ];\n\n animations[prop] = delayFunction(delay, withSequence(...sequence));\n }\n }\n for (const prop of Object.keys(enteringValues.animations)) {\n if (prop === 'transform') {\n enteringValues.animations[prop]?.forEach((value, index) => {\n for (const transformProp of Object.keys(value)) {\n animations.transform?.push({\n [transformProp]: delayFunction(\n delay + exitingDuration,\n withSequence(\n withTiming(\n enteringValues.initialValues.transform\n ? enteringValues.initialValues.transform[index][\n transformProp as keyof TransformProperty\n ]\n : 0,\n { duration: exitingDuration }\n ),\n value[transformProp as keyof TransformProperty]\n )\n ),\n } as TransformProperty);\n }\n });\n } else if (animations[prop] !== undefined) {\n // it was already added in the previous loop\n continue;\n } else {\n animations[prop] = delayFunction(\n delay,\n withSequence(\n withTiming(enteringValues.initialValues[prop], { duration: 0 }),\n enteringValues.animations[prop]\n )\n );\n }\n }\n\n const mergedTransform = (\n exitingValues.initialValues.transform ?? []\n ).concat(\n (enteringValues.animations.transform ?? []).map((value) => {\n for (const transformProp of Object.keys(value)) {\n const current = (value[\n transformProp as keyof TransformProperty\n ] as AnimationObject).current;\n if (typeof current === 'string') {\n if (current.includes('deg'))\n return ({\n [transformProp]: '0deg',\n } as unknown) as TransformProperty;\n else\n return ({\n [transformProp]: '0',\n } as unknown) as TransformProperty;\n } else if (transformProp.includes('translate')) {\n return ({ [transformProp]: 0 } as unknown) as TransformProperty;\n } else {\n return ({ [transformProp]: 1 } as unknown) as TransformProperty;\n }\n }\n return value;\n })\n );\n\n return {\n initialValues: {\n ...exitingValues.initialValues,\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n transform: mergedTransform,\n },\n animations: {\n originX: delayFunction(\n delay + exitingDuration,\n withTiming(values.targetOriginX, { duration: exitingDuration })\n ),\n originY: delayFunction(\n delay + exitingDuration,\n withTiming(values.targetOriginY, { duration: exitingDuration })\n ),\n width: delayFunction(\n delay + exitingDuration,\n withTiming(values.targetWidth, { duration: exitingDuration })\n ),\n height: delayFunction(\n delay + exitingDuration,\n withTiming(values.targetHeight, { duration: exitingDuration })\n ),\n ...animations,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport function combineTransition(\n exiting: BaseAnimationBuilder | typeof BaseAnimationBuilder,\n entering: BaseAnimationBuilder | typeof BaseAnimationBuilder\n): EntryExitTransition {\n return EntryExitTransition.entering(entering).exiting(exiting);\n}\n","import { Component } from 'react';\nimport { measure } from './NativeMethods';\nimport { RefObjectFunction } from './hook/commonTypes';\n\nexport interface ComponentCoords {\n x: number;\n y: number;\n}\n\nexport function getRelativeCoords(\n parentRef: RefObjectFunction,\n x: number,\n y: number\n): ComponentCoords {\n 'worklet';\n const parentCoords = measure(parentRef);\n return {\n x: x - parentCoords.x,\n y: y - parentCoords.y,\n };\n}\n","import {\n PerpectiveTransform,\n RotateTransform,\n RotateXTransform,\n RotateYTransform,\n RotateZTransform,\n ScaleTransform,\n ScaleXTransform,\n ScaleYTransform,\n TranslateXTransform,\n TranslateYTransform,\n SkewXTransform,\n SkewYTransform,\n MatrixTransform,\n ViewStyle,\n TextStyle,\n} from 'react-native';\nimport { Context } from './hook/commonTypes';\n\nexport type TransformProperty =\n | PerpectiveTransform\n | RotateTransform\n | RotateXTransform\n | RotateYTransform\n | RotateZTransform\n | ScaleTransform\n | ScaleXTransform\n | ScaleYTransform\n | TranslateXTransform\n | TranslateYTransform\n | SkewXTransform\n | SkewYTransform\n | MatrixTransform;\n\nexport interface StyleProps extends ViewStyle, TextStyle {\n originX?: number;\n originY?: number;\n [key: string]: any;\n}\n\nexport interface AnimatedStyle\n extends Record> {\n [key: string]: any;\n transform?: Array>>;\n}\nexport interface SharedValue {\n value: T;\n}\n\nexport interface WorkletFunction {\n _closure?: Context;\n __workletHash?: number;\n __optimalization?: number;\n __worklet?: boolean;\n}\n\nexport interface BasicWorkletFunction extends WorkletFunction {\n (): T;\n}\n\nexport interface BasicWorkletFunctionOptional extends WorkletFunction {\n (): Partial;\n}\n\nexport interface NativeEvent {\n nativeEvent: T;\n}\nexport interface ComplexWorkletFunction\n extends WorkletFunction {\n (...args: A): R;\n}\n\nexport interface NestedObject {\n [key: string]: NestedObjectValues;\n}\n\nexport type NestedObjectValues =\n | T\n | Array>\n | NestedObject;\n\nexport interface AdapterWorkletFunction extends WorkletFunction {\n (value: NestedObject): void;\n}\n\nexport type AnimatableValue = number | string | Array;\n\nexport interface AnimationObject {\n [key: string]: any;\n callback: AnimationCallback;\n current?: AnimatableValue;\n toValue?: AnimationObject['current'];\n startValue?: AnimationObject['current'];\n finished?: boolean;\n strippedCurrent?: number;\n cancelled?: boolean;\n\n __prefix?: string;\n __suffix?: string;\n onFrame: (animation: any, timestamp: Timestamp) => boolean;\n onStart: (\n nextAnimation: any,\n current: any,\n timestamp: Timestamp,\n previousAnimation: any\n ) => void;\n}\n\nexport interface Animation extends AnimationObject {\n onFrame: (animation: T, timestamp: Timestamp) => boolean;\n onStart: (\n nextAnimation: T,\n current: T extends NumericAnimation ? number : AnimatableValue,\n timestamp: Timestamp,\n previousAnimation: T\n ) => void;\n}\n\nexport interface NumericAnimation {\n current?: number;\n}\n\nexport type AnimationCallback = (\n finished?: boolean,\n current?: AnimatableValue\n) => void;\n\nexport type Timestamp = number;\n","import { Reanimated } from './reanimatedWrapper';\nimport { State } from '../../State';\nimport { tagMessage } from '../../utils';\n\nexport interface GestureStateManagerType {\n begin: () => void;\n activate: () => void;\n fail: () => void;\n end: () => void;\n}\n\nconst warningMessage = tagMessage(\n 'react-native-reanimated is required in order to use synchronous state management'\n);\n\nexport const GestureStateManager = {\n create(handlerTag: number): GestureStateManagerType {\n 'worklet';\n return {\n begin: () => {\n 'worklet';\n if (Reanimated) {\n Reanimated.setGestureState(handlerTag, State.BEGAN);\n } else {\n console.warn(warningMessage);\n }\n },\n\n activate: () => {\n 'worklet';\n if (Reanimated) {\n Reanimated.setGestureState(handlerTag, State.ACTIVE);\n } else {\n console.warn(warningMessage);\n }\n },\n\n fail: () => {\n 'worklet';\n if (Reanimated) {\n Reanimated.setGestureState(handlerTag, State.FAILED);\n } else {\n console.warn(warningMessage);\n }\n },\n\n end: () => {\n 'worklet';\n if (Reanimated) {\n Reanimated.setGestureState(handlerTag, State.END);\n } else {\n console.warn(warningMessage);\n }\n },\n };\n },\n};\n","// Used by GestureDetector (unsupported on web at the moment) to check whether the\n// attached view may get flattened on Fabric. This implementation causes errors\n// on web due to the static resolution of `require` statements by webpack breaking\n// the conditional importing. Solved by making .web file.\nlet findHostInstance_DEPRECATED = (_ref: any) => null;\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n findHostInstance_DEPRECATED = require('react-native/Libraries/Renderer/shims/ReactFabric')\n .findHostInstance_DEPRECATED;\n} catch (e) {\n // do nothing\n}\n\nexport function getShadowNodeFromRef(ref: any) {\n // @ts-ignore Fabric\n return findHostInstance_DEPRECATED(ref)._internalInstanceHandle.stateNode\n .node;\n}\n","import { FlingGesture } from './flingGesture';\nimport { ForceTouchGesture } from './forceTouchGesture';\nimport { Gesture } from './gesture';\nimport {\n ComposedGesture,\n ExclusiveGesture,\n SimultaneousGesture,\n} from './gestureComposition';\nimport { LongPressGesture } from './longPressGesture';\nimport { PanGesture } from './panGesture';\nimport { PinchGesture } from './pinchGesture';\nimport { RotationGesture } from './rotationGesture';\nimport { TapGesture } from './tapGesture';\nimport { NativeGesture } from './nativeGesture';\nimport { ManualGesture } from './manualGesture';\n\nexport const GestureObjects = {\n Tap: () => {\n return new TapGesture();\n },\n\n Pan: () => {\n return new PanGesture();\n },\n\n Pinch: () => {\n return new PinchGesture();\n },\n\n Rotation: () => {\n return new RotationGesture();\n },\n\n Fling: () => {\n return new FlingGesture();\n },\n\n LongPress: () => {\n return new LongPressGesture();\n },\n\n ForceTouch: () => {\n return new ForceTouchGesture();\n },\n\n Native: () => {\n return new NativeGesture();\n },\n\n Manual: () => {\n return new ManualGesture();\n },\n\n /**\n * Builds a composed gesture consisting of gestures provided as parameters.\n * The first one that becomes active cancels the rest of gestures.\n */\n Race: (...gestures: Gesture[]) => {\n return new ComposedGesture(...gestures);\n },\n\n /**\n * Builds a composed gesture that allows all base gestures to run simultaneously.\n */\n Simultaneous(...gestures: Gesture[]) {\n return new SimultaneousGesture(...gestures);\n },\n\n /**\n * Builds a composed gesture where only one of the provided gestures can become active.\n * Priority is decided through the order of gestures: the first one has higher priority\n * than the second one, second one has higher priority than the third one, and so on.\n * For example, to make a gesture that recognizes both single and double tap you need\n * to call Exclusive(doubleTap, singleTap).\n */\n Exclusive(...gestures: Gesture[]) {\n return new ExclusiveGesture(...gestures);\n },\n};\n","import { BaseGesture, BaseGestureConfig } from './gesture';\nimport {\n FlingGestureConfig,\n FlingGestureHandlerEventPayload,\n} from '../FlingGestureHandler';\n\nexport class FlingGesture extends BaseGesture {\n public config: BaseGestureConfig & FlingGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'FlingGestureHandler';\n }\n\n numberOfPointers(pointers: number) {\n this.config.numberOfPointers = pointers;\n return this;\n }\n\n direction(direction: number) {\n this.config.direction = direction;\n return this;\n }\n}\n\nexport type FlingGestureType = InstanceType;\n","import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport {\n ForceTouchGestureConfig,\n ForceTouchGestureHandlerEventPayload,\n} from '../ForceTouchGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\nexport type ForceTouchGestureChangeEventPayload = {\n forceChange: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent,\n previous?: GestureUpdateEvent\n) {\n 'worklet';\n let changePayload: ForceTouchGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n forceChange: current.force,\n };\n } else {\n changePayload = {\n forceChange: current.force - previous.force,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class ForceTouchGesture extends ContinousBaseGesture<\n ForceTouchGestureHandlerEventPayload,\n ForceTouchGestureChangeEventPayload\n> {\n public config: BaseGestureConfig & ForceTouchGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'ForceTouchGestureHandler';\n }\n\n minForce(force: number) {\n this.config.minForce = force;\n return this;\n }\n\n maxForce(force: number) {\n this.config.maxForce = force;\n return this;\n }\n\n feedbackOnActivation(value: boolean) {\n this.config.feedbackOnActivation = value;\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n GestureUpdateEvent<\n ForceTouchGestureHandlerEventPayload &\n ForceTouchGestureChangeEventPayload\n >\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, ForceTouchGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type ForceTouchGestureType = InstanceType;\n","import { BaseGesture, Gesture, GestureRef, GestureType } from './gesture';\n\nfunction extendRelation(\n currentRelation: GestureRef[] | undefined,\n extendWith: GestureType[]\n) {\n if (currentRelation === undefined) {\n return [...extendWith];\n } else {\n return [...currentRelation, ...extendWith];\n }\n}\n\nexport class ComposedGesture extends Gesture {\n protected gestures: Gesture[] = [];\n protected simultaneousGestures: GestureType[] = [];\n protected requireGesturesToFail: GestureType[] = [];\n\n constructor(...gestures: Gesture[]) {\n super();\n this.gestures = gestures;\n }\n\n protected prepareSingleGesture(\n gesture: Gesture,\n simultaneousGestures: GestureType[],\n requireGesturesToFail: GestureType[]\n ) {\n if (gesture instanceof BaseGesture) {\n const newConfig = { ...gesture.config };\n\n newConfig.simultaneousWith = extendRelation(\n newConfig.simultaneousWith,\n simultaneousGestures\n );\n newConfig.requireToFail = extendRelation(\n newConfig.requireToFail,\n requireGesturesToFail\n );\n\n gesture.config = newConfig;\n } else if (gesture instanceof ComposedGesture) {\n gesture.simultaneousGestures = simultaneousGestures;\n gesture.requireGesturesToFail = requireGesturesToFail;\n gesture.prepare();\n }\n }\n\n prepare() {\n for (const gesture of this.gestures) {\n this.prepareSingleGesture(\n gesture,\n this.simultaneousGestures,\n this.requireGesturesToFail\n );\n }\n }\n\n initialize() {\n for (const gesture of this.gestures) {\n gesture.initialize();\n }\n }\n\n toGestureArray(): GestureType[] {\n return this.gestures.flatMap((gesture) => gesture.toGestureArray());\n }\n}\n\nexport class SimultaneousGesture extends ComposedGesture {\n prepare() {\n const simultaneousArray = this.gestures\n .flatMap((gesture) => gesture.toGestureArray())\n .concat(this.simultaneousGestures);\n\n for (const gesture of this.gestures) {\n this.prepareSingleGesture(\n gesture,\n simultaneousArray,\n this.requireGesturesToFail\n );\n }\n }\n}\n\nexport class ExclusiveGesture extends ComposedGesture {\n prepare() {\n const gestureArrays = this.gestures.map((gesture) =>\n gesture.toGestureArray()\n );\n\n let requireToFail: GestureType[] = [];\n\n for (let i = 0; i < this.gestures.length; i++) {\n this.prepareSingleGesture(\n this.gestures[i],\n this.simultaneousGestures,\n this.requireGesturesToFail.concat(requireToFail)\n );\n\n requireToFail = requireToFail.concat(gestureArrays[i]);\n }\n }\n}\n\nexport type ComposedGestureType = InstanceType;\nexport type RaceGestureType = ComposedGestureType;\nexport type SimultaneousGestureType = InstanceType;\nexport type ExclusiveGestureType = InstanceType;\n","import { BaseGesture, BaseGestureConfig } from './gesture';\nimport {\n LongPressGestureConfig,\n LongPressGestureHandlerEventPayload,\n} from '../LongPressGestureHandler';\n\nexport class LongPressGesture extends BaseGesture {\n public config: BaseGestureConfig & LongPressGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'LongPressGestureHandler';\n }\n\n minDuration(duration: number) {\n this.config.minDurationMs = duration;\n return this;\n }\n\n maxDistance(distance: number) {\n this.config.maxDist = distance;\n return this;\n }\n}\n\nexport type LongPressGestureType = InstanceType;\n","import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\nimport {\n PanGestureConfig,\n PanGestureHandlerEventPayload,\n} from '../PanGestureHandler';\n\nexport type PanGestureChangeEventPayload = {\n changeX: number;\n changeY: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent,\n previous?: GestureUpdateEvent\n) {\n 'worklet';\n let changePayload: PanGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n changeX: current.translationX,\n changeY: current.translationY,\n };\n } else {\n changePayload = {\n changeX: current.translationX - previous.translationX,\n changeY: current.translationY - previous.translationY,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class PanGesture extends ContinousBaseGesture<\n PanGestureHandlerEventPayload,\n PanGestureChangeEventPayload\n> {\n public config: BaseGestureConfig & PanGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'PanGestureHandler';\n }\n\n activeOffsetY(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.activeOffsetYStart = offset[0];\n this.config.activeOffsetYEnd = offset[1];\n } else if (offset < 0) {\n this.config.activeOffsetYStart = offset;\n } else {\n this.config.activeOffsetYEnd = offset;\n }\n return this;\n }\n\n activeOffsetX(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.activeOffsetXStart = offset[0];\n this.config.activeOffsetXEnd = offset[1];\n } else if (offset < 0) {\n this.config.activeOffsetXStart = offset;\n } else {\n this.config.activeOffsetXEnd = offset;\n }\n return this;\n }\n\n failOffsetY(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.failOffsetYStart = offset[0];\n this.config.failOffsetYEnd = offset[1];\n } else if (offset < 0) {\n this.config.failOffsetYStart = offset;\n } else {\n this.config.failOffsetYEnd = offset;\n }\n return this;\n }\n\n failOffsetX(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.failOffsetXStart = offset[0];\n this.config.failOffsetXEnd = offset[1];\n } else if (offset < 0) {\n this.config.failOffsetXStart = offset;\n } else {\n this.config.failOffsetXEnd = offset;\n }\n return this;\n }\n\n minPointers(minPointers: number) {\n this.config.minPointers = minPointers;\n return this;\n }\n\n maxPointers(maxPointers: number) {\n this.config.maxPointers = maxPointers;\n return this;\n }\n\n minDistance(distance: number) {\n this.config.minDist = distance;\n return this;\n }\n\n minVelocity(velocity: number) {\n this.config.minVelocity = velocity;\n return this;\n }\n\n minVelocityX(velocity: number) {\n this.config.minVelocityX = velocity;\n return this;\n }\n\n minVelocityY(velocity: number) {\n this.config.minVelocityY = velocity;\n return this;\n }\n\n averageTouches(value: boolean) {\n this.config.avgTouches = value;\n return this;\n }\n\n enableTrackpadTwoFingerGesture(value: boolean) {\n this.config.enableTrackpadTwoFingerGesture = value;\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n PanGestureHandlerEventPayload & PanGestureChangeEventPayload\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, PanGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type PanGestureType = InstanceType;\n","import { ContinousBaseGesture } from './gesture';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\nexport type PinchGestureChangeEventPayload = {\n scaleChange: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent,\n previous?: GestureUpdateEvent\n) {\n 'worklet';\n let changePayload: PinchGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n scaleChange: current.scale,\n };\n } else {\n changePayload = {\n scaleChange: current.scale / previous.scale,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class PinchGesture extends ContinousBaseGesture<\n PinchGestureHandlerEventPayload,\n PinchGestureChangeEventPayload\n> {\n constructor() {\n super();\n\n this.handlerName = 'PinchGestureHandler';\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n PinchGestureHandlerEventPayload & PinchGestureChangeEventPayload\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, PinchGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type PinchGestureType = InstanceType;\n","import { ContinousBaseGesture } from './gesture';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\ntype RotationGestureChangeEventPayload = {\n rotationChange: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent,\n previous?: GestureUpdateEvent\n) {\n 'worklet';\n let changePayload: RotationGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n rotationChange: current.rotation,\n };\n } else {\n changePayload = {\n rotationChange: current.rotation - previous.rotation,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class RotationGesture extends ContinousBaseGesture<\n RotationGestureHandlerEventPayload,\n RotationGestureChangeEventPayload\n> {\n constructor() {\n super();\n\n this.handlerName = 'RotationGestureHandler';\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n RotationGestureHandlerEventPayload & RotationGestureChangeEventPayload\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, RotationGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type RotationGestureType = InstanceType;\n","import { BaseGestureConfig, BaseGesture } from './gesture';\nimport {\n TapGestureConfig,\n TapGestureHandlerEventPayload,\n} from '../TapGestureHandler';\n\nexport class TapGesture extends BaseGesture {\n public config: BaseGestureConfig & TapGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'TapGestureHandler';\n }\n\n minPointers(minPointers: number) {\n this.config.minPointers = minPointers;\n return this;\n }\n\n numberOfTaps(count: number) {\n this.config.numberOfTaps = count;\n return this;\n }\n\n maxDistance(maxDist: number) {\n this.config.maxDist = maxDist;\n return this;\n }\n\n maxDuration(duration: number) {\n this.config.maxDurationMs = duration;\n return this;\n }\n\n maxDelay(delay: number) {\n this.config.maxDelayMs = delay;\n return this;\n }\n\n maxDeltaX(delta: number) {\n this.config.maxDeltaX = delta;\n return this;\n }\n\n maxDeltaY(delta: number) {\n this.config.maxDeltaY = delta;\n return this;\n }\n}\n\nexport type TapGestureType = InstanceType;\n","import { BaseGestureConfig, BaseGesture } from './gesture';\nimport {\n NativeViewGestureConfig,\n NativeViewGestureHandlerPayload,\n} from '../NativeViewGestureHandler';\n\nexport class NativeGesture extends BaseGesture {\n public config: BaseGestureConfig & NativeViewGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'NativeViewGestureHandler';\n }\n\n shouldActivateOnStart(value: boolean) {\n this.config.shouldActivateOnStart = value;\n return this;\n }\n\n disallowInterruption(value: boolean) {\n this.config.disallowInterruption = value;\n return this;\n }\n}\n\nexport type NativeGestureType = InstanceType;\n","import { GestureUpdateEvent } from '../gestureHandlerCommon';\nimport { ContinousBaseGesture } from './gesture';\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent>,\n _previous?: GestureUpdateEvent>\n) {\n 'worklet';\n return current;\n}\n\nexport class ManualGesture extends ContinousBaseGesture<\n Record,\n Record\n> {\n constructor() {\n super();\n\n this.handlerName = 'ManualGestureHandler';\n }\n\n onChange(\n callback: (event: GestureUpdateEvent>) => void\n ) {\n // @ts-ignore TS being overprotective, Record is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type ManualGestureType = InstanceType;\n","import * as React from 'react';\nimport {\n Animated,\n Platform,\n processColor,\n StyleSheet,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nimport createNativeWrapper from '../handlers/createNativeWrapper';\nimport GestureHandlerButton from './GestureHandlerButton';\nimport { State } from '../State';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n NativeViewGestureHandlerPayload,\n NativeViewGestureHandlerProps,\n} from '../handlers/NativeViewGestureHandler';\n\nexport interface RawButtonProps extends NativeViewGestureHandlerProps {\n /**\n * Defines if more than one button could be pressed simultaneously. By default\n * set true.\n */\n exclusive?: boolean;\n // TODO: we should transform props in `createNativeWrapper`\n\n /**\n * Android only.\n *\n * Defines color of native ripple animation used since API level 21.\n */\n rippleColor?: any; // it was present in BaseButtonProps before but is used here in code\n}\n\nexport interface BaseButtonProps extends RawButtonProps {\n /**\n * Called when the button gets pressed (analogous to `onPress` in\n * `TouchableHighlight` from RN core).\n */\n onPress?: (pointerInside: boolean) => void;\n\n /**\n * Called when button changes from inactive to active and vice versa. It\n * passes active state as a boolean variable as a first parameter for that\n * method.\n */\n onActiveStateChange?: (active: boolean) => void;\n style?: StyleProp;\n testID?: string;\n}\n\nexport interface RectButtonProps extends BaseButtonProps {\n /**\n * Background color that will be dimmed when button is in active state.\n */\n underlayColor?: string;\n\n /**\n * iOS only.\n *\n * Opacity applied to the underlay when button is in active state.\n */\n activeOpacity?: number;\n}\n\nexport interface BorderlessButtonProps extends BaseButtonProps {\n /**\n * Android only.\n *\n * Set this to false if you want the ripple animation to render only within view bounds.\n */\n borderless?: boolean;\n\n /**\n * iOS only.\n *\n * Opacity applied to the button when it is in an active state.\n */\n activeOpacity?: number;\n}\n\nexport const RawButton = createNativeWrapper(GestureHandlerButton, {\n shouldCancelWhenOutside: false,\n shouldActivateOnStart: false,\n});\n\nexport class BaseButton extends React.Component {\n private lastActive: boolean;\n\n constructor(props: BaseButtonProps) {\n super(props);\n this.lastActive = false;\n }\n\n private handleEvent = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n const { state, oldState, pointerInside } = nativeEvent;\n const active = pointerInside && state === State.ACTIVE;\n\n if (active !== this.lastActive && this.props.onActiveStateChange) {\n this.props.onActiveStateChange(active);\n }\n\n if (\n oldState === State.ACTIVE &&\n state !== State.CANCELLED &&\n this.lastActive &&\n this.props.onPress\n ) {\n this.props.onPress(active);\n }\n\n this.lastActive = active;\n };\n\n // Normally, the parent would execute it's handler first, then forward the\n // event to listeners. However, here our handler is virtually only forwarding\n // events to listeners, so we reverse the order to keep the proper order of\n // the callbacks (from \"raw\" ones to \"processed\").\n private onHandlerStateChange = (\n e: HandlerStateChangeEvent\n ) => {\n this.props.onHandlerStateChange?.(e);\n this.handleEvent(e);\n };\n\n private onGestureEvent = (\n e: GestureEvent\n ) => {\n this.props.onGestureEvent?.(e);\n this.handleEvent(\n e as HandlerStateChangeEvent\n ); // TODO: maybe it is not correct\n };\n\n render() {\n const { rippleColor, ...rest } = this.props;\n\n return (\n \n );\n }\n}\n\nconst AnimatedBaseButton = Animated.createAnimatedComponent(BaseButton);\n\nconst btnStyles = StyleSheet.create({\n underlay: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n top: 0,\n },\n});\n\nexport class RectButton extends React.Component {\n static defaultProps = {\n activeOpacity: 0.105,\n underlayColor: 'black',\n };\n\n private opacity: Animated.Value;\n\n constructor(props: RectButtonProps) {\n super(props);\n this.opacity = new Animated.Value(0);\n }\n\n private onActiveStateChange = (active: boolean) => {\n if (Platform.OS !== 'android') {\n this.opacity.setValue(active ? this.props.activeOpacity! : 0);\n }\n\n this.props.onActiveStateChange?.(active);\n };\n\n render() {\n const { children, style, ...rest } = this.props;\n\n const resolvedStyle = StyleSheet.flatten(style ?? {});\n\n return (\n \n \n {children}\n \n );\n }\n}\n\nexport class BorderlessButton extends React.Component {\n static defaultProps = {\n activeOpacity: 0.3,\n borderless: true,\n };\n\n private opacity: Animated.Value;\n\n constructor(props: BorderlessButtonProps) {\n super(props);\n this.opacity = new Animated.Value(1);\n }\n\n private onActiveStateChange = (active: boolean) => {\n if (Platform.OS !== 'android') {\n this.opacity.setValue(active ? this.props.activeOpacity! : 1);\n }\n\n this.props.onActiveStateChange?.(active);\n };\n\n render() {\n const { children, style, ...rest } = this.props;\n\n return (\n \n {children}\n \n );\n }\n}\n\nexport { default as PureNativeButton } from './GestureHandlerButton';\n","/* eslint-disable @typescript-eslint/no-var-requires */\nimport { HostComponent, requireNativeComponent } from 'react-native';\nimport { RawButtonProps } from './GestureButtons';\nimport { isFabric } from '../utils';\n\nconst RNGestureHandlerButtonNativeComponent = isFabric()\n ? require('../fabric/RNGestureHandlerButtonNativeComponent').default\n : requireNativeComponent('RNGestureHandlerButton');\n\nexport default RNGestureHandlerButtonNativeComponent as HostComponent;\n","/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { HostComponent } from 'react-native';\nimport type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { Int32 } from 'react-native/Libraries/Types/CodegenTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps, // This is required.\n exclusive: boolean,\n foreground: boolean,\n borderless: boolean,\n enabled: boolean,\n rippleColor: ColorValue,\n rippleRadius: Int32,\n|}>;\n\ntype ComponentType = HostComponent;\n\nexport default (codegenNativeComponent(\n 'RNGestureHandlerButton',\n {}\n): ComponentType);\n","export { default as TouchableNativeFeedback } from './TouchableNativeFeedback';\nexport { default as TouchableWithoutFeedback } from './TouchableWithoutFeedback';\nexport { default as TouchableOpacity } from './TouchableOpacity';\nexport { default as TouchableHighlight } from './TouchableHighlight';\n","import { TouchableNativeFeedback } from 'react-native';\n\nexport default TouchableNativeFeedback;\n","import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nconst TouchableWithoutFeedback = React.forwardRef<\n GenericTouchable,\n PropsWithChildren\n>((props, ref) => );\n\nTouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;\n\nexport default TouchableWithoutFeedback;\n","import * as React from 'react';\nimport { Component } from 'react';\nimport {\n Animated,\n Platform,\n StyleProp,\n ViewStyle,\n TouchableWithoutFeedbackProps,\n} from 'react-native';\n\nimport { State } from '../../State';\nimport { BaseButton } from '../GestureButtons';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../../handlers/gestureHandlerCommon';\nimport { NativeViewGestureHandlerPayload } from '../../handlers/NativeViewGestureHandler';\nimport { TouchableNativeFeedbackExtraProps } from './TouchableNativeFeedback.android';\n\n/**\n * Each touchable is a states' machine which preforms transitions.\n * On very beginning (and on the very end or recognition) touchable is\n * UNDETERMINED. Then it moves to BEGAN. If touchable recognizes that finger\n * travel outside it transits to special MOVED_OUTSIDE state. Gesture recognition\n * finishes in UNDETERMINED state.\n */\nexport const TOUCHABLE_STATE = {\n UNDETERMINED: 0,\n BEGAN: 1,\n MOVED_OUTSIDE: 2,\n} as const;\n\ntype TouchableState = typeof TOUCHABLE_STATE[keyof typeof TOUCHABLE_STATE];\n\nexport interface GenericTouchableProps extends TouchableWithoutFeedbackProps {\n // Decided to drop not used fields from RN's implementation.\n // e.g. onBlur and onFocus as well as deprecated props. - TODO: this comment may be unuseful in this moment\n\n // TODO: in RN these events get native event parameter, which prolly could be used in our implementation too\n onPress?: () => void;\n onPressIn?: () => void;\n onPressOut?: () => void;\n onLongPress?: () => void;\n\n nativeID?: string;\n shouldActivateOnStart?: boolean;\n disallowInterruption?: boolean;\n\n containerStyle?: StyleProp;\n}\n\ninterface InternalProps {\n extraButtonProps: TouchableNativeFeedbackExtraProps;\n onStateChange?: (oldState: TouchableState, newState: TouchableState) => void;\n}\n\n// TODO: maybe can be better\n// TODO: all clearTimeout have ! added, maybe they shouldn't ?\ntype Timeout = ReturnType | null | undefined;\n\n/**\n * GenericTouchable is not intented to be used as it is.\n * Should be treated as a source for the rest of touchables\n */\n\nexport default class GenericTouchable extends Component<\n GenericTouchableProps & InternalProps\n> {\n static defaultProps = {\n delayLongPress: 600,\n extraButtonProps: {\n rippleColor: 'transparent',\n exclusive: true,\n },\n };\n\n // timeout handlers\n pressInTimeout: Timeout;\n pressOutTimeout: Timeout;\n longPressTimeout: Timeout;\n\n // This flag is required since recognition of longPress implies not-invoking onPress\n longPressDetected = false;\n\n pointerInside = true;\n\n // State of touchable\n STATE: TouchableState = TOUCHABLE_STATE.UNDETERMINED;\n\n // handlePressIn in called on first touch on traveling inside component.\n // Handles state transition with delay.\n handlePressIn() {\n if (this.props.delayPressIn) {\n this.pressInTimeout = setTimeout(() => {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n this.pressInTimeout = null;\n }, this.props.delayPressIn);\n } else {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n if (this.props.onLongPress) {\n const time =\n (this.props.delayPressIn || 0) + (this.props.delayLongPress || 0);\n this.longPressTimeout = setTimeout(this.onLongPressDetected, time);\n }\n }\n // handleMoveOutside in called on traveling outside component.\n // Handles state transition with delay.\n handleMoveOutside() {\n if (this.props.delayPressOut) {\n this.pressOutTimeout =\n this.pressOutTimeout ||\n setTimeout(() => {\n this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);\n this.pressOutTimeout = null;\n }, this.props.delayPressOut);\n } else {\n this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);\n }\n }\n\n // handleGoToUndetermined transits to UNDETERMINED state with proper delay\n handleGoToUndetermined() {\n clearTimeout(this.pressOutTimeout!); // TODO: maybe it can be undefined\n if (this.props.delayPressOut) {\n this.pressOutTimeout = setTimeout(() => {\n if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n this.pressOutTimeout = null;\n }, this.props.delayPressOut);\n } else {\n if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n }\n }\n\n componentDidMount() {\n this.reset();\n }\n // reset timeout to prevent memory leaks.\n reset() {\n this.longPressDetected = false;\n this.pointerInside = true;\n clearTimeout(this.pressInTimeout!);\n clearTimeout(this.pressOutTimeout!);\n clearTimeout(this.longPressTimeout!);\n this.pressOutTimeout = null;\n this.longPressTimeout = null;\n this.pressInTimeout = null;\n }\n\n // All states' transitions are defined here.\n moveToState(newState: TouchableState) {\n if (newState === this.STATE) {\n // Ignore dummy transitions\n return;\n }\n if (newState === TOUCHABLE_STATE.BEGAN) {\n // First touch and moving inside\n this.props.onPressIn?.();\n } else if (newState === TOUCHABLE_STATE.MOVED_OUTSIDE) {\n // Moving outside\n this.props.onPressOut?.();\n } else if (newState === TOUCHABLE_STATE.UNDETERMINED) {\n // Need to reset each time on transition to UNDETERMINED\n this.reset();\n if (this.STATE === TOUCHABLE_STATE.BEGAN) {\n // ... and if it happens inside button.\n this.props.onPressOut?.();\n }\n }\n // Finally call lister (used by subclasses)\n this.props.onStateChange?.(this.STATE, newState);\n // ... and make transition.\n this.STATE = newState;\n }\n\n onGestureEvent = ({\n nativeEvent: { pointerInside },\n }: GestureEvent) => {\n if (this.pointerInside !== pointerInside) {\n if (pointerInside) {\n this.onMoveIn();\n } else {\n this.onMoveOut();\n }\n }\n this.pointerInside = pointerInside;\n };\n\n onHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n const { state } = nativeEvent;\n if (state === State.CANCELLED || state === State.FAILED) {\n // Need to handle case with external cancellation (e.g. by ScrollView)\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n } else if (\n // This platform check is an implication of slightly different behavior of handlers on different platform.\n // And Android \"Active\" state is achieving on first move of a finger, not on press in.\n // On iOS event on \"Began\" is not delivered.\n state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&\n this.STATE === TOUCHABLE_STATE.UNDETERMINED\n ) {\n // Moving inside requires\n this.handlePressIn();\n } else if (state === State.END) {\n const shouldCallOnPress =\n !this.longPressDetected &&\n this.STATE !== TOUCHABLE_STATE.MOVED_OUTSIDE &&\n this.pressOutTimeout === null;\n this.handleGoToUndetermined();\n if (shouldCallOnPress) {\n // Calls only inside component whether no long press was called previously\n this.props.onPress?.();\n }\n }\n };\n\n onLongPressDetected = () => {\n this.longPressDetected = true;\n // checked for in the caller of `onLongPressDetected`, but better to check twice\n this.props.onLongPress?.();\n };\n\n componentWillUnmount() {\n // to prevent memory leaks\n this.reset();\n }\n\n onMoveIn() {\n if (this.STATE === TOUCHABLE_STATE.MOVED_OUTSIDE) {\n // This call is not throttled with delays (like in RN's implementation).\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n }\n\n onMoveOut() {\n // long press should no longer be detected\n clearTimeout(this.longPressTimeout!);\n this.longPressTimeout = null;\n if (this.STATE === TOUCHABLE_STATE.BEGAN) {\n this.handleMoveOutside();\n }\n }\n\n render() {\n const coreProps = {\n accessible: this.props.accessible !== false,\n accessibilityLabel: this.props.accessibilityLabel,\n accessibilityHint: this.props.accessibilityHint,\n accessibilityRole: this.props.accessibilityRole,\n // TODO: check if changed to no 's' correctly, also removed 2 props that are no longer available: `accessibilityComponentType` and `accessibilityTraits`,\n // would be good to check if it is ok for sure, see: https://github.com/facebook/react-native/issues/24016\n accessibilityState: this.props.accessibilityState,\n nativeID: this.props.nativeID,\n onLayout: this.props.onLayout,\n hitSlop: this.props.hitSlop,\n };\n\n return (\n \n \n {this.props.children}\n \n \n );\n }\n}\n","import {\n Animated,\n Easing,\n StyleSheet,\n View,\n TouchableOpacityProps,\n} from 'react-native';\nimport GenericTouchable, {\n TOUCHABLE_STATE,\n GenericTouchableProps,\n} from './GenericTouchable';\nimport * as React from 'react';\nimport { Component } from 'react';\n\ninterface GHTouchableOpacityProps {\n useNativeAnimations?: boolean;\n}\n\n/**\n * TouchableOpacity bases on timing animation which has been used in RN's core\n */\nexport default class TouchableOpacity extends Component<\n TouchableOpacityProps & GenericTouchableProps & GHTouchableOpacityProps\n> {\n static defaultProps = {\n ...GenericTouchable.defaultProps,\n activeOpacity: 0.2,\n };\n\n // opacity is 1 one by default but could be overwritten\n getChildStyleOpacityWithDefault = () => {\n const childStyle = StyleSheet.flatten(this.props.style) || {};\n return childStyle.opacity == null ? 1 : childStyle.opacity;\n };\n\n opacity = new Animated.Value(this.getChildStyleOpacityWithDefault());\n\n setOpacityTo = (value: number, duration: number) => {\n Animated.timing(this.opacity, {\n toValue: value,\n duration: duration,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: this.props.useNativeAnimations ?? true,\n }).start();\n };\n\n onStateChange = (_from: number, to: number) => {\n if (to === TOUCHABLE_STATE.BEGAN) {\n this.setOpacityTo(this.props.activeOpacity!, 0);\n } else if (\n to === TOUCHABLE_STATE.UNDETERMINED ||\n to === TOUCHABLE_STATE.MOVED_OUTSIDE\n ) {\n this.setOpacityTo(this.getChildStyleOpacityWithDefault(), 150);\n }\n };\n\n render() {\n const { style = {}, ...rest } = this.props;\n return (\n \n {this.props.children ? this.props.children : }\n \n );\n }\n}\n","import * as React from 'react';\nimport { Component } from 'react';\nimport GenericTouchable, {\n GenericTouchableProps,\n TOUCHABLE_STATE,\n} from './GenericTouchable';\nimport {\n StyleSheet,\n View,\n TouchableHighlightProps,\n ColorValue,\n ViewProps,\n} from 'react-native';\n\ninterface State {\n extraChildStyle: null | {\n opacity?: number;\n };\n extraUnderlayStyle: null | {\n backgroundColor?: ColorValue;\n };\n}\n\n/**\n * TouchableHighlight follows RN's implementation\n */\nexport default class TouchableHighlight extends Component<\n TouchableHighlightProps & GenericTouchableProps,\n State\n> {\n static defaultProps = {\n ...GenericTouchable.defaultProps,\n activeOpacity: 0.85,\n delayPressOut: 100,\n underlayColor: 'black',\n };\n\n constructor(props: TouchableHighlightProps & GenericTouchableProps) {\n super(props);\n this.state = {\n extraChildStyle: null,\n extraUnderlayStyle: null,\n };\n }\n\n // Copied from RN\n showUnderlay = () => {\n if (!this.hasPressHandler()) {\n return;\n }\n this.setState({\n extraChildStyle: {\n opacity: this.props.activeOpacity,\n },\n extraUnderlayStyle: {\n backgroundColor: this.props.underlayColor,\n },\n });\n this.props.onShowUnderlay?.();\n };\n\n hasPressHandler = () =>\n this.props.onPress ||\n this.props.onPressIn ||\n this.props.onPressOut ||\n this.props.onLongPress;\n\n hideUnderlay = () => {\n this.setState({\n extraChildStyle: null,\n extraUnderlayStyle: null,\n });\n this.props.onHideUnderlay?.();\n };\n\n renderChildren() {\n if (!this.props.children) {\n return ;\n }\n\n const child = React.Children.only(\n this.props.children\n ) as React.ReactElement; // TODO: not sure if OK but fixes error\n return React.cloneElement(child, {\n style: StyleSheet.compose(child.props.style, this.state.extraChildStyle),\n });\n }\n\n onStateChange = (_from: number, to: number) => {\n if (to === TOUCHABLE_STATE.BEGAN) {\n this.showUnderlay();\n } else if (\n to === TOUCHABLE_STATE.UNDETERMINED ||\n to === TOUCHABLE_STATE.MOVED_OUTSIDE\n ) {\n this.hideUnderlay();\n }\n };\n\n render() {\n const { style = {}, ...rest } = this.props;\n const { extraUnderlayStyle } = this.state;\n return (\n \n {this.renderChildren()}\n \n );\n }\n}\n","import * as React from 'react';\nimport {\n PropsWithChildren,\n ForwardedRef,\n RefAttributes,\n ReactElement,\n} from 'react';\nimport {\n ScrollView as RNScrollView,\n ScrollViewProps as RNScrollViewProps,\n Switch as RNSwitch,\n SwitchProps as RNSwitchProps,\n TextInput as RNTextInput,\n TextInputProps as RNTextInputProps,\n DrawerLayoutAndroid as RNDrawerLayoutAndroid,\n DrawerLayoutAndroidProps as RNDrawerLayoutAndroidProps,\n FlatList as RNFlatList,\n FlatListProps as RNFlatListProps,\n} from 'react-native';\n\nimport createNativeWrapper from '../handlers/createNativeWrapper';\n\nimport {\n NativeViewGestureHandlerProps,\n nativeViewProps,\n} from '../handlers/NativeViewGestureHandler';\n\nexport const ScrollView = createNativeWrapper<\n PropsWithChildren\n>(RNScrollView, {\n disallowInterruption: true,\n shouldCancelWhenOutside: false,\n});\n// backward type compatibility with https://github.com/software-mansion/react-native-gesture-handler/blob/db78d3ca7d48e8ba57482d3fe9b0a15aa79d9932/react-native-gesture-handler.d.ts#L440-L457\n// include methods of wrapped components by creating an intersection type with the RN component instead of duplicating them.\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type ScrollView = typeof ScrollView & RNScrollView;\n\nexport const Switch = createNativeWrapper(RNSwitch, {\n shouldCancelWhenOutside: false,\n shouldActivateOnStart: true,\n disallowInterruption: true,\n});\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type Switch = typeof Switch & RNSwitch;\n\nexport const TextInput = createNativeWrapper(RNTextInput);\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type TextInput = typeof TextInput & RNTextInput;\n\nexport const DrawerLayoutAndroid = createNativeWrapper<\n PropsWithChildren\n>(RNDrawerLayoutAndroid, { disallowInterruption: true });\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type DrawerLayoutAndroid = typeof DrawerLayoutAndroid &\n RNDrawerLayoutAndroid;\n\nexport const FlatList = React.forwardRef((props, ref) => {\n const flatListProps = {};\n const scrollViewProps = {};\n for (const [propName, value] of Object.entries(props)) {\n // https://github.com/microsoft/TypeScript/issues/26255\n if ((nativeViewProps as readonly string[]).includes(propName)) {\n // @ts-ignore - this function cannot have generic type so we have to ignore this error\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n scrollViewProps[propName] = value;\n } else {\n // @ts-ignore - this function cannot have generic type so we have to ignore this error\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n flatListProps[propName] = value;\n }\n }\n return (\n // @ts-ignore - this function cannot have generic type so we have to ignore this error\n (\n \n )}\n />\n );\n}) as (\n props: PropsWithChildren<\n RNFlatListProps &\n RefAttributes> &\n NativeViewGestureHandlerProps\n >,\n ref: ForwardedRef>\n) => ReactElement | null;\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type FlatList = typeof FlatList & RNFlatList;\n","// Similarily to the DrawerLayout component this deserves to be put in a\n// separate repo. Although, keeping it here for the time being will allow us to\n// move faster and fix possible issues quicker\n\nimport * as React from 'react';\nimport { Component } from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n I18nManager,\n LayoutChangeEvent,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n PanGestureHandler,\n PanGestureHandlerEventPayload,\n PanGestureHandlerProps,\n} from '../handlers/PanGestureHandler';\nimport {\n TapGestureHandler,\n TapGestureHandlerEventPayload,\n} from '../handlers/TapGestureHandler';\nimport { State } from '../State';\n\nconst DRAG_TOSS = 0.05;\n\ntype SwipeableExcludes = Exclude<\n keyof PanGestureHandlerProps,\n 'onGestureEvent' | 'onHandlerStateChange'\n>;\n\nexport interface SwipeableProps\n extends Pick {\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance. e.g. value of 1 will indicate that the swipeable panel\n * should exactly follow the gesture, 2 means it is going to be two times\n * \"slower\".\n */\n friction?: number;\n\n /**\n * Distance from the left edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n leftThreshold?: number;\n\n /**\n * Distance from the right edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n rightThreshold?: number;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the left\n * actions panel's width. It is set to true by default as long as the left\n * panel render method is present.\n */\n overshootLeft?: boolean;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the\n * right actions panel's width. It is set to true by default as long as the\n * right panel render method is present.\n */\n overshootRight?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance at overshoot. Default value is 1, it mean no friction, for\n * a native feel, try 8 or above.\n */\n overshootFriction?: number;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableOpen()\n *\n * Called when left action panel gets open.\n */\n onSwipeableLeftOpen?: () => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableOpen()\n *\n * Called when right action panel gets open.\n */\n onSwipeableRightOpen?: () => void;\n\n /**\n * Called when action panel gets open (either right or left).\n */\n onSwipeableOpen?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel is closed.\n */\n onSwipeableClose?: (direction: 'left' | 'right') => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableWillOpen()\n *\n * Called when left action panel starts animating on open.\n */\n onSwipeableLeftWillOpen?: () => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableWillOpen()\n *\n * Called when right action panel starts animating on open.\n */\n onSwipeableRightWillOpen?: () => void;\n\n /**\n * Called when action panel starts animating on open (either right or left).\n */\n onSwipeableWillOpen?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts animating on close.\n */\n onSwipeableWillClose?: (direction: 'left' | 'right') => void;\n\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, +]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderLeftActions?: (\n progressAnimatedValue: Animated.AnimatedInterpolation,\n dragAnimatedValue: Animated.AnimatedInterpolation\n ) => React.ReactNode;\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, -]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderRightActions?: (\n progressAnimatedValue: Animated.AnimatedInterpolation,\n dragAnimatedValue: Animated.AnimatedInterpolation\n ) => React.ReactNode;\n\n useNativeAnimations?: boolean;\n\n animationOptions?: Record;\n\n /**\n * Style object for the container (`Animated.View`), for example to override\n * `overflow: 'hidden'`.\n */\n containerStyle?: StyleProp;\n\n /**\n * Style object for the children container (`Animated.View`), for example to\n * apply `flex: 1`\n */\n childrenContainerStyle?: StyleProp;\n}\n\ntype SwipeableState = {\n dragX: Animated.Value;\n rowTranslation: Animated.Value;\n rowState: number;\n leftWidth?: number;\n rightOffset?: number;\n rowWidth?: number;\n};\n\nexport default class Swipeable extends Component<\n SwipeableProps,\n SwipeableState\n> {\n static defaultProps = {\n friction: 1,\n overshootFriction: 1,\n useNativeAnimations: true,\n };\n\n constructor(props: SwipeableProps) {\n super(props);\n const dragX = new Animated.Value(0);\n this.state = {\n dragX,\n rowTranslation: new Animated.Value(0),\n rowState: 0,\n leftWidth: undefined,\n rightOffset: undefined,\n rowWidth: undefined,\n };\n this.updateAnimatedEvent(props, this.state);\n\n this.onGestureEvent = Animated.event(\n [{ nativeEvent: { translationX: dragX } }],\n { useNativeDriver: props.useNativeAnimations! }\n );\n }\n\n UNSAFE_componentWillUpdate(props: SwipeableProps, state: SwipeableState) {\n if (\n this.props.friction !== props.friction ||\n this.props.overshootLeft !== props.overshootLeft ||\n this.props.overshootRight !== props.overshootRight ||\n this.props.overshootFriction !== props.overshootFriction ||\n this.state.leftWidth !== state.leftWidth ||\n this.state.rightOffset !== state.rightOffset ||\n this.state.rowWidth !== state.rowWidth\n ) {\n this.updateAnimatedEvent(props, state);\n }\n }\n\n private onGestureEvent?: (\n event: GestureEvent\n ) => void;\n private transX?: Animated.AnimatedInterpolation;\n private showLeftAction?: Animated.AnimatedInterpolation | Animated.Value;\n private leftActionTranslate?: Animated.AnimatedInterpolation;\n private showRightAction?: Animated.AnimatedInterpolation | Animated.Value;\n private rightActionTranslate?: Animated.AnimatedInterpolation;\n\n private updateAnimatedEvent = (\n props: SwipeableProps,\n state: SwipeableState\n ) => {\n const { friction, overshootFriction } = props;\n const { dragX, rowTranslation, leftWidth = 0, rowWidth = 0 } = state;\n const { rightOffset = rowWidth } = state;\n const rightWidth = Math.max(0, rowWidth - rightOffset);\n\n const {\n overshootLeft = leftWidth > 0,\n overshootRight = rightWidth > 0,\n } = props;\n\n const transX = Animated.add(\n rowTranslation,\n dragX.interpolate({\n inputRange: [0, friction!],\n outputRange: [0, 1],\n })\n ).interpolate({\n inputRange: [-rightWidth - 1, -rightWidth, leftWidth, leftWidth + 1],\n outputRange: [\n -rightWidth - (overshootRight ? 1 / overshootFriction! : 0),\n -rightWidth,\n leftWidth,\n leftWidth + (overshootLeft ? 1 / overshootFriction! : 0),\n ],\n });\n this.transX = transX;\n this.showLeftAction =\n leftWidth > 0\n ? transX.interpolate({\n inputRange: [-1, 0, leftWidth],\n outputRange: [0, 0, 1],\n })\n : new Animated.Value(0);\n this.leftActionTranslate = this.showLeftAction.interpolate({\n inputRange: [0, Number.MIN_VALUE],\n outputRange: [-10000, 0],\n extrapolate: 'clamp',\n });\n this.showRightAction =\n rightWidth > 0\n ? transX.interpolate({\n inputRange: [-rightWidth, 0, 1],\n outputRange: [1, 0, 0],\n })\n : new Animated.Value(0);\n this.rightActionTranslate = this.showRightAction.interpolate({\n inputRange: [0, Number.MIN_VALUE],\n outputRange: [-10000, 0],\n extrapolate: 'clamp',\n });\n };\n\n private onTapHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n if (nativeEvent.oldState === State.ACTIVE) {\n this.close();\n }\n };\n\n private onHandlerStateChange = (\n ev: HandlerStateChangeEvent\n ) => {\n if (ev.nativeEvent.oldState === State.ACTIVE) {\n this.handleRelease(ev);\n }\n };\n\n private handleRelease = (\n ev: HandlerStateChangeEvent\n ) => {\n const { velocityX, translationX: dragX } = ev.nativeEvent;\n const { leftWidth = 0, rowWidth = 0, rowState } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n const {\n friction,\n leftThreshold = leftWidth / 2,\n rightThreshold = rightWidth / 2,\n } = this.props;\n\n const startOffsetX = this.currentOffset() + dragX / friction!;\n const translationX = (dragX + DRAG_TOSS * velocityX) / friction!;\n\n let toValue = 0;\n if (rowState === 0) {\n if (translationX > leftThreshold) {\n toValue = leftWidth;\n } else if (translationX < -rightThreshold) {\n toValue = -rightWidth;\n }\n } else if (rowState === 1) {\n // swiped to left\n if (translationX > -leftThreshold) {\n toValue = leftWidth;\n }\n } else {\n // swiped to right\n if (translationX < rightThreshold) {\n toValue = -rightWidth;\n }\n }\n\n this.animateRow(startOffsetX, toValue, velocityX / friction!);\n };\n\n private animateRow = (\n fromValue: number,\n toValue: number,\n velocityX?:\n | number\n | {\n x: number;\n y: number;\n }\n ) => {\n const { dragX, rowTranslation } = this.state;\n dragX.setValue(0);\n rowTranslation.setValue(fromValue);\n\n this.setState({ rowState: Math.sign(toValue) });\n Animated.spring(rowTranslation, {\n restSpeedThreshold: 1.7,\n restDisplacementThreshold: 0.4,\n velocity: velocityX,\n bounciness: 0,\n toValue,\n useNativeDriver: this.props.useNativeAnimations!,\n ...this.props.animationOptions,\n }).start(({ finished }) => {\n if (finished) {\n if (toValue > 0) {\n this.props.onSwipeableLeftOpen?.();\n this.props.onSwipeableOpen?.('left');\n } else if (toValue < 0) {\n this.props.onSwipeableRightOpen?.();\n this.props.onSwipeableOpen?.('right');\n } else {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n this.props.onSwipeableClose?.(closingDirection);\n }\n }\n });\n if (toValue > 0) {\n this.props.onSwipeableLeftWillOpen?.();\n this.props.onSwipeableWillOpen?.('left');\n } else if (toValue < 0) {\n this.props.onSwipeableRightWillOpen?.();\n this.props.onSwipeableWillOpen?.('right');\n } else {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n this.props.onSwipeableWillClose?.(closingDirection);\n }\n };\n\n private onRowLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n this.setState({ rowWidth: nativeEvent.layout.width });\n };\n\n private currentOffset = () => {\n const { leftWidth = 0, rowWidth = 0, rowState } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n if (rowState === 1) {\n return leftWidth;\n } else if (rowState === -1) {\n return -rightWidth;\n }\n return 0;\n };\n\n close = () => {\n this.animateRow(this.currentOffset(), 0);\n };\n\n openLeft = () => {\n const { leftWidth = 0 } = this.state;\n this.animateRow(this.currentOffset(), leftWidth);\n };\n\n openRight = () => {\n const { rowWidth = 0 } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n this.animateRow(this.currentOffset(), -rightWidth);\n };\n\n render() {\n const { rowState } = this.state;\n const { children, renderLeftActions, renderRightActions } = this.props;\n\n const left = renderLeftActions && (\n \n {renderLeftActions(this.showLeftAction!, this.transX!)}\n \n this.setState({ leftWidth: nativeEvent.layout.x })\n }\n />\n \n );\n\n const right = renderRightActions && (\n \n {renderRightActions(this.showRightAction!, this.transX!)}\n \n this.setState({ rightOffset: nativeEvent.layout.x })\n }\n />\n \n );\n\n return (\n \n \n {left}\n {right}\n \n \n {children}\n \n \n \n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n leftActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',\n },\n rightActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',\n },\n});\n","// This component is based on RN's DrawerLayoutAndroid API\n//\n// It perhaps deserves to be put in a separate repo, but since it relies on\n// react-native-gesture-handler library which isn't very popular at the moment I\n// decided to keep it here for the time being. It will allow us to move faster\n// and fix issues that may arise in gesture handler library that could be found\n// when using the drawer component\n\nimport * as React from 'react';\nimport { Component } from 'react';\nimport invariant from 'invariant';\nimport {\n Animated,\n StyleSheet,\n View,\n Keyboard,\n StatusBar,\n I18nManager,\n StatusBarAnimation,\n StyleProp,\n ViewStyle,\n LayoutChangeEvent,\n NativeSyntheticEvent,\n} from 'react-native';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n PanGestureHandler,\n PanGestureHandlerEventPayload,\n} from '../handlers/PanGestureHandler';\nimport {\n TapGestureHandler,\n TapGestureHandlerEventPayload,\n} from '../handlers/TapGestureHandler';\nimport { State } from '../State';\n\nconst DRAG_TOSS = 0.05;\n\nconst IDLE: DrawerState = 'Idle';\nconst DRAGGING: DrawerState = 'Dragging';\nconst SETTLING: DrawerState = 'Settling';\n\nexport type DrawerPosition = 'left' | 'right';\n\nexport type DrawerState = 'Idle' | 'Dragging' | 'Settling';\n\nexport type DrawerType = 'front' | 'back' | 'slide';\n\nexport type DrawerLockMode = 'unlocked' | 'locked-closed' | 'locked-open';\n\nexport type DrawerKeyboardDismissMode = 'none' | 'on-drag';\n\nexport interface DrawerLayoutProps {\n /**\n * This attribute is present in the standard implementation already and is one\n * of the required params. Gesture handler version of DrawerLayout make it\n * possible for the function passed as `renderNavigationView` to take an\n * Animated value as a parameter that indicates the progress of drawer\n * opening/closing animation (progress value is 0 when closed and 1 when\n * opened). This can be used by the drawer component to animated its children\n * while the drawer is opening or closing.\n */\n renderNavigationView: (\n progressAnimatedValue: Animated.Value\n ) => React.ReactNode;\n\n drawerPosition?: DrawerPosition;\n\n drawerWidth?: number;\n\n drawerBackgroundColor?: string;\n\n drawerLockMode?: DrawerLockMode;\n\n keyboardDismissMode?: DrawerKeyboardDismissMode;\n\n /**\n * Called when the drawer is closed.\n */\n onDrawerClose?: () => void;\n\n /**\n * Called when the drawer is opened.\n */\n onDrawerOpen?: () => void;\n\n /**\n * Called when the status of the drawer changes.\n */\n onDrawerStateChanged?: (\n newState: DrawerState,\n drawerWillShow: boolean\n ) => void;\n useNativeAnimations?: boolean;\n\n drawerType?: DrawerType;\n\n /**\n * Defines how far from the edge of the content view the gesture should\n * activate.\n */\n edgeWidth?: number;\n\n minSwipeDistance?: number;\n\n /**\n * When set to true Drawer component will use\n * {@link https://reactnative.dev/docs/statusbar StatusBar} API to hide the OS\n * status bar whenever the drawer is pulled or when its in an \"open\" state.\n */\n hideStatusBar?: boolean;\n\n /**\n * @default 'slide'\n *\n * Can be used when hideStatusBar is set to true and will select the animation\n * used for hiding/showing the status bar. See\n * {@link https://reactnative.dev/docs/statusbar StatusBar} documentation for\n * more details\n */\n statusBarAnimation?: StatusBarAnimation;\n\n /**\n * @default black\n *\n * Color of a semi-transparent overlay to be displayed on top of the content\n * view when drawer gets open. A solid color should be used as the opacity is\n * added by the Drawer itself and the opacity of the overlay is animated (from\n * 0% to 70%).\n */\n overlayColor?: string;\n\n contentContainerStyle?: StyleProp;\n\n drawerContainerStyle?: StyleProp;\n\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n onDrawerSlide?: (position: number) => void;\n\n onGestureRef?: (ref: PanGestureHandler) => void;\n}\n\nexport type DrawerLayoutState = {\n dragX: Animated.Value;\n touchX: Animated.Value;\n drawerTranslation: Animated.Value;\n containerWidth: number;\n};\n\nexport type DrawerMovementOption = {\n velocity?: number;\n speed?: number;\n};\nexport default class DrawerLayout extends Component<\n DrawerLayoutProps,\n DrawerLayoutState\n> {\n static defaultProps = {\n drawerWidth: 200,\n drawerPosition: 'left',\n useNativeAnimations: true,\n drawerType: 'front',\n edgeWidth: 20,\n minSwipeDistance: 3,\n overlayColor: 'rgba(0, 0, 0, 0.7)',\n drawerLockMode: 'unlocked',\n enableTrackpadTwoFingerGesture: false,\n };\n\n constructor(props: DrawerLayoutProps) {\n super(props);\n\n const dragX = new Animated.Value(0);\n const touchX = new Animated.Value(0);\n const drawerTranslation = new Animated.Value(0);\n\n this.state = {\n dragX,\n touchX,\n drawerTranslation,\n containerWidth: 0,\n };\n\n this.updateAnimatedEvent(props, this.state);\n }\n\n UNSAFE_componentWillUpdate(\n props: DrawerLayoutProps,\n state: DrawerLayoutState\n ) {\n if (\n this.props.drawerPosition !== props.drawerPosition ||\n this.props.drawerWidth !== props.drawerWidth ||\n this.props.drawerType !== props.drawerType ||\n this.state.containerWidth !== state.containerWidth\n ) {\n this.updateAnimatedEvent(props, state);\n }\n }\n\n private openValue?: Animated.AnimatedInterpolation;\n private onGestureEvent?: (\n event: GestureEvent\n ) => void;\n private accessibilityIsModalView = React.createRef();\n private pointerEventsView = React.createRef();\n private panGestureHandler = React.createRef();\n private drawerShown = false;\n\n static positions = {\n Left: 'left',\n Right: 'right',\n };\n\n private updateAnimatedEvent = (\n props: DrawerLayoutProps,\n state: DrawerLayoutState\n ) => {\n // Event definition is based on\n const { drawerPosition, drawerWidth, drawerType } = props;\n const {\n dragX: dragXValue,\n touchX: touchXValue,\n drawerTranslation,\n containerWidth,\n } = state;\n\n let dragX = dragXValue;\n let touchX = touchXValue;\n\n if (drawerPosition !== 'left') {\n // Most of the code is written in a way to handle left-side drawer. In\n // order to handle right-side drawer the only thing we need to do is to\n // reverse events coming from gesture handler in a way they emulate\n // left-side drawer gestures. E.g. dragX is simply -dragX, and touchX is\n // calulcated by subtracing real touchX from the width of the container\n // (such that when touch happens at the right edge the value is simply 0)\n dragX = Animated.multiply(\n new Animated.Value(-1),\n dragXValue\n ) as Animated.Value; // TODO(TS): (for all \"as\" in this file) make sure we can map this\n touchX = Animated.add(\n new Animated.Value(containerWidth),\n Animated.multiply(new Animated.Value(-1), touchXValue)\n ) as Animated.Value; // TODO(TS): make sure we can map this;\n touchXValue.setValue(containerWidth);\n } else {\n touchXValue.setValue(0);\n }\n\n // While closing the drawer when user starts gesture outside of its area (in greyed\n // out part of the window), we want the drawer to follow only once finger reaches the\n // edge of the drawer.\n // E.g. on the diagram below drawer is illustrate by X signs and the greyed out area by\n // dots. The touch gesture starts at '*' and moves left, touch path is indicated by\n // an arrow pointing left\n // 1) +---------------+ 2) +---------------+ 3) +---------------+ 4) +---------------+\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|.<-*..| |XXXXXXXX|<--*..| |XXXXX|<-----*..|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // +---------------+ +---------------+ +---------------+ +---------------+\n //\n // For the above to work properly we define animated value that will keep\n // start position of the gesture. Then we use that value to calculate how\n // much we need to subtract from the dragX. If the gesture started on the\n // greyed out area we take the distance from the edge of the drawer to the\n // start position. Otherwise we don't subtract at all and the drawer be\n // pulled back as soon as you start the pan.\n //\n // This is used only when drawerType is \"front\"\n //\n let translationX = dragX;\n if (drawerType === 'front') {\n const startPositionX = Animated.add(\n touchX,\n Animated.multiply(new Animated.Value(-1), dragX)\n );\n\n const dragOffsetFromOnStartPosition = startPositionX.interpolate({\n inputRange: [drawerWidth! - 1, drawerWidth!, drawerWidth! + 1],\n outputRange: [0, 0, 1],\n });\n translationX = Animated.add(\n dragX,\n dragOffsetFromOnStartPosition\n ) as Animated.Value; // TODO: as above\n }\n\n this.openValue = Animated.add(translationX, drawerTranslation).interpolate({\n inputRange: [0, drawerWidth!],\n outputRange: [0, 1],\n extrapolate: 'clamp',\n });\n\n const gestureOptions: {\n useNativeDriver: boolean;\n // TODO: make sure it is correct\n listener?: (\n ev: NativeSyntheticEvent\n ) => void;\n } = {\n useNativeDriver: props.useNativeAnimations!,\n };\n\n if (this.props.onDrawerSlide) {\n gestureOptions.listener = (ev) => {\n const translationX = Math.floor(Math.abs(ev.nativeEvent.translationX));\n const position = translationX / this.state.containerWidth;\n\n this.props.onDrawerSlide?.(position);\n };\n }\n\n this.onGestureEvent = Animated.event(\n [{ nativeEvent: { translationX: dragXValue, x: touchXValue } }],\n gestureOptions\n );\n };\n\n private handleContainerLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n this.setState({ containerWidth: nativeEvent.layout.width });\n };\n\n private emitStateChanged = (\n newState: DrawerState,\n drawerWillShow: boolean\n ) => {\n this.props.onDrawerStateChanged?.(newState, drawerWillShow);\n };\n\n private openingHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n if (nativeEvent.oldState === State.ACTIVE) {\n this.handleRelease({ nativeEvent });\n } else if (nativeEvent.state === State.ACTIVE) {\n this.emitStateChanged(DRAGGING, false);\n if (this.props.keyboardDismissMode === 'on-drag') {\n Keyboard.dismiss();\n }\n if (this.props.hideStatusBar) {\n StatusBar.setHidden(true, this.props.statusBarAnimation || 'slide');\n }\n }\n };\n\n private onTapHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n if (\n this.drawerShown &&\n nativeEvent.oldState === State.ACTIVE &&\n this.props.drawerLockMode !== 'locked-open'\n ) {\n this.closeDrawer();\n }\n };\n\n private handleRelease = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n const { drawerWidth, drawerPosition, drawerType } = this.props;\n const { containerWidth } = this.state;\n let { translationX: dragX, velocityX, x: touchX } = nativeEvent;\n\n if (drawerPosition !== 'left') {\n // See description in _updateAnimatedEvent about why events are flipped\n // for right-side drawer\n dragX = -dragX;\n touchX = containerWidth - touchX;\n velocityX = -velocityX;\n }\n\n const gestureStartX = touchX - dragX;\n let dragOffsetBasedOnStart = 0;\n\n if (drawerType === 'front') {\n dragOffsetBasedOnStart =\n gestureStartX > drawerWidth! ? gestureStartX - drawerWidth! : 0;\n }\n\n const startOffsetX =\n dragX + dragOffsetBasedOnStart + (this.drawerShown ? drawerWidth! : 0);\n const projOffsetX = startOffsetX + DRAG_TOSS * velocityX;\n\n const shouldOpen = projOffsetX > drawerWidth! / 2;\n\n if (shouldOpen) {\n this.animateDrawer(startOffsetX, drawerWidth!, velocityX);\n } else {\n this.animateDrawer(startOffsetX, 0, velocityX);\n }\n };\n\n private updateShowing = (showing: boolean) => {\n this.drawerShown = showing;\n this.accessibilityIsModalView.current?.setNativeProps({\n accessibilityViewIsModal: showing,\n });\n this.pointerEventsView.current?.setNativeProps({\n pointerEvents: showing ? 'auto' : 'none',\n });\n const { drawerPosition, minSwipeDistance, edgeWidth } = this.props;\n const fromLeft = drawerPosition === 'left';\n // gestureOrientation is 1 if the expected gesture is from left to right and\n // -1 otherwise e.g. when drawer is on the left and is closed we expect left\n // to right gesture, thus orientation will be 1.\n const gestureOrientation =\n (fromLeft ? 1 : -1) * (this.drawerShown ? -1 : 1);\n // When drawer is closed we want the hitSlop to be horizontally shorter than\n // the container size by the value of SLOP. This will make it only activate\n // when gesture happens not further than SLOP away from the edge\n const hitSlop = fromLeft\n ? { left: 0, width: showing ? undefined : edgeWidth }\n : { right: 0, width: showing ? undefined : edgeWidth };\n // @ts-ignore internal API, maybe could be fixed in handler types\n this.panGestureHandler.current?.setNativeProps({\n hitSlop,\n activeOffsetX: gestureOrientation * minSwipeDistance!,\n });\n };\n\n private animateDrawer = (\n fromValue: number | null | undefined,\n toValue: number,\n velocity: number,\n speed?: number\n ) => {\n this.state.dragX.setValue(0);\n this.state.touchX.setValue(\n this.props.drawerPosition === 'left' ? 0 : this.state.containerWidth\n );\n\n if (fromValue != null) {\n let nextFramePosition = fromValue;\n if (this.props.useNativeAnimations) {\n // When using native driver, we predict the next position of the\n // animation because it takes one frame of a roundtrip to pass RELEASE\n // event from native driver to JS before we can start animating. Without\n // it, it is more noticable that the frame is dropped.\n if (fromValue < toValue && velocity > 0) {\n nextFramePosition = Math.min(fromValue + velocity / 60.0, toValue);\n } else if (fromValue > toValue && velocity < 0) {\n nextFramePosition = Math.max(fromValue + velocity / 60.0, toValue);\n }\n }\n this.state.drawerTranslation.setValue(nextFramePosition);\n }\n\n const willShow = toValue !== 0;\n this.updateShowing(willShow);\n this.emitStateChanged(SETTLING, willShow);\n if (this.props.hideStatusBar) {\n StatusBar.setHidden(willShow, this.props.statusBarAnimation || 'slide');\n }\n Animated.spring(this.state.drawerTranslation, {\n velocity,\n bounciness: 0,\n toValue,\n useNativeDriver: this.props.useNativeAnimations!,\n speed: speed ?? undefined,\n }).start(({ finished }) => {\n if (finished) {\n this.emitStateChanged(IDLE, willShow);\n if (willShow) {\n this.props.onDrawerOpen?.();\n } else {\n this.props.onDrawerClose?.();\n }\n }\n });\n };\n\n openDrawer = (options: DrawerMovementOption = {}) => {\n this.animateDrawer(\n // TODO: decide if it should be null or undefined is the proper value\n undefined,\n this.props.drawerWidth!,\n options.velocity ? options.velocity : 0,\n options.speed\n );\n\n // We need to force the update, otherwise the overlay is not rerendered and\n // it would not be clickable\n this.forceUpdate();\n };\n\n closeDrawer = (options: DrawerMovementOption = {}) => {\n // TODO: decide if it should be null or undefined is the proper value\n this.animateDrawer(\n undefined,\n 0,\n options.velocity ? options.velocity : 0,\n options.speed\n );\n\n // We need to force the update, otherwise the overlay is not rerendered and\n // it would be still clickable\n this.forceUpdate();\n };\n\n private renderOverlay = () => {\n /* Overlay styles */\n invariant(this.openValue, 'should be set');\n const overlayOpacity = this.openValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, 1],\n extrapolate: 'clamp',\n });\n const dynamicOverlayStyles = {\n opacity: overlayOpacity,\n backgroundColor: this.props.overlayColor,\n };\n\n return (\n \n \n \n );\n };\n\n private renderDrawer = () => {\n const {\n drawerBackgroundColor,\n drawerWidth,\n drawerPosition,\n drawerType,\n drawerContainerStyle,\n contentContainerStyle,\n } = this.props;\n\n const fromLeft = drawerPosition === 'left';\n const drawerSlide = drawerType !== 'back';\n const containerSlide = drawerType !== 'front';\n\n // we rely on row and row-reverse flex directions to position the drawer\n // properly. Apparently for RTL these are flipped which requires us to use\n // the opposite setting for the drawer to appear from left or right\n // according to the drawerPosition prop\n const reverseContentDirection = I18nManager.isRTL ? fromLeft : !fromLeft;\n\n const dynamicDrawerStyles = {\n backgroundColor: drawerBackgroundColor,\n width: drawerWidth,\n };\n const openValue = this.openValue;\n invariant(openValue, 'should be set');\n\n let containerStyles;\n if (containerSlide) {\n const containerTranslateX = openValue.interpolate({\n inputRange: [0, 1],\n outputRange: fromLeft ? [0, drawerWidth!] : [0, -drawerWidth!],\n extrapolate: 'clamp',\n });\n containerStyles = {\n transform: [{ translateX: containerTranslateX }],\n };\n }\n\n let drawerTranslateX: number | Animated.AnimatedInterpolation = 0;\n if (drawerSlide) {\n const closedDrawerOffset = fromLeft ? -drawerWidth! : drawerWidth!;\n drawerTranslateX = openValue.interpolate({\n inputRange: [0, 1],\n outputRange: [closedDrawerOffset, 0],\n extrapolate: 'clamp',\n });\n }\n const drawerStyles: {\n transform: { translateX: number | Animated.AnimatedInterpolation }[];\n flexDirection: 'row-reverse' | 'row';\n } = {\n transform: [{ translateX: drawerTranslateX }],\n flexDirection: reverseContentDirection ? 'row-reverse' : 'row',\n };\n\n return (\n \n \n {typeof this.props.children === 'function'\n ? this.props.children(this.openValue)\n : this.props.children}\n {this.renderOverlay()}\n \n \n \n {this.props.renderNavigationView(this.openValue as Animated.Value)}\n \n \n \n );\n };\n\n private setPanGestureRef = (ref: PanGestureHandler) => {\n // TODO(TS): make sure it is OK taken from\n // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065#issuecomment-596081842\n (this\n .panGestureHandler as React.MutableRefObject).current = ref;\n this.props.onGestureRef?.(ref);\n };\n\n render() {\n const {\n drawerPosition,\n drawerLockMode,\n edgeWidth,\n minSwipeDistance,\n } = this.props;\n\n const fromLeft = drawerPosition === 'left';\n\n // gestureOrientation is 1 if the expected gesture is from left to right and\n // -1 otherwise e.g. when drawer is on the left and is closed we expect left\n // to right gesture, thus orientation will be 1.\n const gestureOrientation =\n (fromLeft ? 1 : -1) * (this.drawerShown ? -1 : 1);\n\n // When drawer is closed we want the hitSlop to be horizontally shorter than\n // the container size by the value of SLOP. This will make it only activate\n // when gesture happens not further than SLOP away from the edge\n const hitSlop = fromLeft\n ? { left: 0, width: this.drawerShown ? undefined : edgeWidth }\n : { right: 0, width: this.drawerShown ? undefined : edgeWidth };\n\n return (\n \n {this.renderDrawer()}\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n drawerContainer: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1001,\n flexDirection: 'row',\n },\n containerInFront: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1002,\n },\n containerOnBack: {\n ...StyleSheet.absoluteFillObject,\n },\n main: {\n flex: 1,\n zIndex: 0,\n overflow: 'hidden',\n },\n overlay: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1000,\n },\n});\n","/**\n * Internal dependencies\n */\nimport createHooks from './createHooks';\n\n/** @typedef {(...args: any[])=>any} Callback */\n\n/**\n * @typedef Handler\n * @property {Callback} callback The callback\n * @property {string} namespace The namespace\n * @property {number} priority The namespace\n */\n\n/**\n * @typedef Hook\n * @property {Handler[]} handlers Array of handlers\n * @property {number} runs Run counter\n */\n\n/**\n * @typedef Current\n * @property {string} name Hook name\n * @property {number} currentIndex The index\n */\n\n/**\n * @typedef {Record & {__current: Current[]}} Store\n */\n\n/**\n * @typedef {'actions' | 'filters'} StoreKey\n */\n\n/**\n * @typedef {import('./createHooks').Hooks} Hooks\n */\n\nexport const defaultHooks = createHooks();\n\nconst {\n\taddAction,\n\taddFilter,\n\tremoveAction,\n\tremoveFilter,\n\thasAction,\n\thasFilter,\n\tremoveAllActions,\n\tremoveAllFilters,\n\tdoAction,\n\tapplyFilters,\n\tcurrentAction,\n\tcurrentFilter,\n\tdoingAction,\n\tdoingFilter,\n\tdidAction,\n\tdidFilter,\n\tactions,\n\tfilters,\n} = defaultHooks;\n\nexport {\n\tcreateHooks,\n\taddAction,\n\taddFilter,\n\tremoveAction,\n\tremoveFilter,\n\thasAction,\n\thasFilter,\n\tremoveAllActions,\n\tremoveAllFilters,\n\tdoAction,\n\tapplyFilters,\n\tcurrentAction,\n\tcurrentFilter,\n\tdoingAction,\n\tdoingFilter,\n\tdidAction,\n\tdidFilter,\n\tactions,\n\tfilters,\n};\n","/**\n * Internal dependencies\n */\nimport createAddHook from './createAddHook';\nimport createRemoveHook from './createRemoveHook';\nimport createHasHook from './createHasHook';\nimport createRunHook from './createRunHook';\nimport createCurrentHook from './createCurrentHook';\nimport createDoingHook from './createDoingHook';\nimport createDidHook from './createDidHook';\n\n/**\n * Internal class for constructing hooks. Use `createHooks()` function\n *\n * Note, it is necessary to expose this class to make its type public.\n *\n * @private\n */\nexport class _Hooks {\n\tconstructor() {\n\t\t/** @type {import('.').Store} actions */\n\t\tthis.actions = Object.create( null );\n\t\tthis.actions.__current = [];\n\n\t\t/** @type {import('.').Store} filters */\n\t\tthis.filters = Object.create( null );\n\t\tthis.filters.__current = [];\n\n\t\tthis.addAction = createAddHook( this, 'actions' );\n\t\tthis.addFilter = createAddHook( this, 'filters' );\n\t\tthis.removeAction = createRemoveHook( this, 'actions' );\n\t\tthis.removeFilter = createRemoveHook( this, 'filters' );\n\t\tthis.hasAction = createHasHook( this, 'actions' );\n\t\tthis.hasFilter = createHasHook( this, 'filters' );\n\t\tthis.removeAllActions = createRemoveHook( this, 'actions', true );\n\t\tthis.removeAllFilters = createRemoveHook( this, 'filters', true );\n\t\tthis.doAction = createRunHook( this, 'actions' );\n\t\tthis.applyFilters = createRunHook( this, 'filters', true );\n\t\tthis.currentAction = createCurrentHook( this, 'actions' );\n\t\tthis.currentFilter = createCurrentHook( this, 'filters' );\n\t\tthis.doingAction = createDoingHook( this, 'actions' );\n\t\tthis.doingFilter = createDoingHook( this, 'filters' );\n\t\tthis.didAction = createDidHook( this, 'actions' );\n\t\tthis.didFilter = createDidHook( this, 'filters' );\n\t}\n}\n\n/** @typedef {_Hooks} Hooks */\n\n/**\n * Returns an instance of the hooks object.\n *\n * @return {Hooks} A Hooks instance.\n */\nfunction createHooks() {\n\treturn new _Hooks();\n}\n\nexport default createHooks;\n","/**\n * Internal dependencies\n */\nimport validateNamespace from './validateNamespace.js';\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback AddHook\n *\n * Adds the hook to the appropriate hooks container.\n *\n * @param {string} hookName Name of hook to add\n * @param {string} namespace The unique namespace identifying the callback in the form `vendor/plugin/function`.\n * @param {import('.').Callback} callback Function to call when the hook is run\n * @param {number} [priority=10] Priority of this hook\n */\n\n/**\n * Returns a function which, when invoked, will add a hook.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {AddHook} Function that adds a new hook.\n */\nfunction createAddHook( hooks, storeKey ) {\n\treturn function addHook( hookName, namespace, callback, priority = 10 ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! validateNamespace( namespace ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( 'function' !== typeof callback ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( 'The hook callback must be a function.' );\n\t\t\treturn;\n\t\t}\n\n\t\t// Validate numeric priority\n\t\tif ( 'number' !== typeof priority ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(\n\t\t\t\t'If specified, the hook priority must be a number.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = { callback, priority, namespace };\n\n\t\tif ( hooksStore[ hookName ] ) {\n\t\t\t// Find the correct insert index of the new hook.\n\t\t\tconst handlers = hooksStore[ hookName ].handlers;\n\n\t\t\t/** @type {number} */\n\t\t\tlet i;\n\t\t\tfor ( i = handlers.length; i > 0; i-- ) {\n\t\t\t\tif ( priority >= handlers[ i - 1 ].priority ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( i === handlers.length ) {\n\t\t\t\t// If append, operate via direct assignment.\n\t\t\t\thandlers[ i ] = handler;\n\t\t\t} else {\n\t\t\t\t// Otherwise, insert before index via splice.\n\t\t\t\thandlers.splice( i, 0, handler );\n\t\t\t}\n\n\t\t\t// We may also be currently executing this hook. If the callback\n\t\t\t// we're adding would come after the current callback, there's no\n\t\t\t// problem; otherwise we need to increase the execution index of\n\t\t\t// any other runs by 1 to account for the added element.\n\t\t\thooksStore.__current.forEach( ( hookInfo ) => {\n\t\t\t\tif (\n\t\t\t\t\thookInfo.name === hookName &&\n\t\t\t\t\thookInfo.currentIndex >= i\n\t\t\t\t) {\n\t\t\t\t\thookInfo.currentIndex++;\n\t\t\t\t}\n\t\t\t} );\n\t\t} else {\n\t\t\t// This is the first hook of its type.\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\thandlers: [ handler ],\n\t\t\t\truns: 0,\n\t\t\t};\n\t\t}\n\n\t\tif ( hookName !== 'hookAdded' ) {\n\t\t\thooks.doAction(\n\t\t\t\t'hookAdded',\n\t\t\t\thookName,\n\t\t\t\tnamespace,\n\t\t\t\tcallback,\n\t\t\t\tpriority\n\t\t\t);\n\t\t}\n\t};\n}\n\nexport default createAddHook;\n","/**\n * Validate a namespace string.\n *\n * @param {string} namespace The namespace to validate - should take the form\n * `vendor/plugin/function`.\n *\n * @return {boolean} Whether the namespace is valid.\n */\nfunction validateNamespace( namespace ) {\n\tif ( 'string' !== typeof namespace || '' === namespace ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The namespace must be a non-empty string.' );\n\t\treturn false;\n\t}\n\n\tif ( ! /^[a-zA-Z][a-zA-Z0-9_.\\-\\/]*$/.test( namespace ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\n\t\t\t'The namespace can only contain numbers, letters, dashes, periods, underscores and slashes.'\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport default validateNamespace;\n","/**\n * Validate a hookName string.\n *\n * @param {string} hookName The hook name to validate. Should be a non empty string containing\n * only numbers, letters, dashes, periods and underscores. Also,\n * the hook name cannot begin with `__`.\n *\n * @return {boolean} Whether the hook name is valid.\n */\nfunction validateHookName( hookName ) {\n\tif ( 'string' !== typeof hookName || '' === hookName ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The hook name must be a non-empty string.' );\n\t\treturn false;\n\t}\n\n\tif ( /^__/.test( hookName ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The hook name cannot begin with `__`.' );\n\t\treturn false;\n\t}\n\n\tif ( ! /^[a-zA-Z][a-zA-Z0-9_.-]*$/.test( hookName ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\n\t\t\t'The hook name can only contain numbers, letters, dashes, periods and underscores.'\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport default validateHookName;\n","/**\n * Internal dependencies\n */\nimport validateNamespace from './validateNamespace.js';\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback RemoveHook\n * Removes the specified callback (or all callbacks) from the hook with a given hookName\n * and namespace.\n *\n * @param {string} hookName The name of the hook to modify.\n * @param {string} namespace The unique namespace identifying the callback in the\n * form `vendor/plugin/function`.\n *\n * @return {number | undefined} The number of callbacks removed.\n */\n\n/**\n * Returns a function which, when invoked, will remove a specified hook or all\n * hooks by the given name.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n * @param {boolean} [removeAll=false] Whether to remove all callbacks for a hookName,\n * without regard to namespace. Used to create\n * `removeAll*` functions.\n *\n * @return {RemoveHook} Function that removes hooks.\n */\nfunction createRemoveHook( hooks, storeKey, removeAll = false ) {\n\treturn function removeHook( hookName, namespace ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! removeAll && ! validateNamespace( namespace ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Bail if no hooks exist by this name.\n\t\tif ( ! hooksStore[ hookName ] ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet handlersRemoved = 0;\n\n\t\tif ( removeAll ) {\n\t\t\thandlersRemoved = hooksStore[ hookName ].handlers.length;\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\truns: hooksStore[ hookName ].runs,\n\t\t\t\thandlers: [],\n\t\t\t};\n\t\t} else {\n\t\t\t// Try to find the specified callback to remove.\n\t\t\tconst handlers = hooksStore[ hookName ].handlers;\n\t\t\tfor ( let i = handlers.length - 1; i >= 0; i-- ) {\n\t\t\t\tif ( handlers[ i ].namespace === namespace ) {\n\t\t\t\t\thandlers.splice( i, 1 );\n\t\t\t\t\thandlersRemoved++;\n\t\t\t\t\t// This callback may also be part of a hook that is\n\t\t\t\t\t// currently executing. If the callback we're removing\n\t\t\t\t\t// comes after the current callback, there's no problem;\n\t\t\t\t\t// otherwise we need to decrease the execution index of any\n\t\t\t\t\t// other runs by 1 to account for the removed element.\n\t\t\t\t\thooksStore.__current.forEach( ( hookInfo ) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thookInfo.name === hookName &&\n\t\t\t\t\t\t\thookInfo.currentIndex >= i\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\thookInfo.currentIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( hookName !== 'hookRemoved' ) {\n\t\t\thooks.doAction( 'hookRemoved', hookName, namespace );\n\t\t}\n\n\t\treturn handlersRemoved;\n\t};\n}\n\nexport default createRemoveHook;\n","/**\n * @callback HasHook\n *\n * Returns whether any handlers are attached for the given hookName and optional namespace.\n *\n * @param {string} hookName The name of the hook to check for.\n * @param {string} [namespace] Optional. The unique namespace identifying the callback\n * in the form `vendor/plugin/function`.\n *\n * @return {boolean} Whether there are handlers that are attached to the given hook.\n */\n/**\n * Returns a function which, when invoked, will return whether any handlers are\n * attached to a particular hook.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {HasHook} Function that returns whether any handlers are\n * attached to a particular hook and optional namespace.\n */\nfunction createHasHook( hooks, storeKey ) {\n\treturn function hasHook( hookName, namespace ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\t// Use the namespace if provided.\n\t\tif ( 'undefined' !== typeof namespace ) {\n\t\t\treturn (\n\t\t\t\thookName in hooksStore &&\n\t\t\t\thooksStore[ hookName ].handlers.some(\n\t\t\t\t\t( hook ) => hook.namespace === namespace\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn hookName in hooksStore;\n\t};\n}\n\nexport default createHasHook;\n","/**\n * Returns a function which, when invoked, will execute all callbacks\n * registered to a hook of the specified type, optionally returning the final\n * value of the call chain.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n * @param {boolean} [returnFirstArg=false] Whether each hook callback is expected to\n * return its first argument.\n *\n * @return {(hookName:string, ...args: unknown[]) => unknown} Function that runs hook callbacks.\n */\nfunction createRunHook( hooks, storeKey, returnFirstArg = false ) {\n\treturn function runHooks( hookName, ...args ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! hooksStore[ hookName ] ) {\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\thandlers: [],\n\t\t\t\truns: 0,\n\t\t\t};\n\t\t}\n\n\t\thooksStore[ hookName ].runs++;\n\n\t\tconst handlers = hooksStore[ hookName ].handlers;\n\n\t\t// The following code is stripped from production builds.\n\t\tif ( 'production' !== process.env.NODE_ENV ) {\n\t\t\t// Handle any 'all' hooks registered.\n\t\t\tif ( 'hookAdded' !== hookName && hooksStore.all ) {\n\t\t\t\thandlers.push( ...hooksStore.all.handlers );\n\t\t\t}\n\t\t}\n\n\t\tif ( ! handlers || ! handlers.length ) {\n\t\t\treturn returnFirstArg ? args[ 0 ] : undefined;\n\t\t}\n\n\t\tconst hookInfo = {\n\t\t\tname: hookName,\n\t\t\tcurrentIndex: 0,\n\t\t};\n\n\t\thooksStore.__current.push( hookInfo );\n\n\t\twhile ( hookInfo.currentIndex < handlers.length ) {\n\t\t\tconst handler = handlers[ hookInfo.currentIndex ];\n\n\t\t\tconst result = handler.callback.apply( null, args );\n\t\t\tif ( returnFirstArg ) {\n\t\t\t\targs[ 0 ] = result;\n\t\t\t}\n\n\t\t\thookInfo.currentIndex++;\n\t\t}\n\n\t\thooksStore.__current.pop();\n\n\t\tif ( returnFirstArg ) {\n\t\t\treturn args[ 0 ];\n\t\t}\n\t};\n}\n\nexport default createRunHook;\n","/**\n * Returns a function which, when invoked, will return the name of the\n * currently running hook, or `null` if no hook of the given type is currently\n * running.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {() => string | null} Function that returns the current hook name or null.\n */\nfunction createCurrentHook( hooks, storeKey ) {\n\treturn function currentHook() {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\treturn (\n\t\t\thooksStore.__current[ hooksStore.__current.length - 1 ]?.name ??\n\t\t\tnull\n\t\t);\n\t};\n}\n\nexport default createCurrentHook;\n","/**\n * @callback DoingHook\n * Returns whether a hook is currently being executed.\n *\n * @param {string} [hookName] The name of the hook to check for. If\n * omitted, will check for any hook being executed.\n *\n * @return {boolean} Whether the hook is being executed.\n */\n\n/**\n * Returns a function which, when invoked, will return whether a hook is\n * currently being executed.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {DoingHook} Function that returns whether a hook is currently\n * being executed.\n */\nfunction createDoingHook( hooks, storeKey ) {\n\treturn function doingHook( hookName ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\t// If the hookName was not passed, check for any current hook.\n\t\tif ( 'undefined' === typeof hookName ) {\n\t\t\treturn 'undefined' !== typeof hooksStore.__current[ 0 ];\n\t\t}\n\n\t\t// Return the __current hook.\n\t\treturn hooksStore.__current[ 0 ]\n\t\t\t? hookName === hooksStore.__current[ 0 ].name\n\t\t\t: false;\n\t};\n}\n\nexport default createDoingHook;\n","/**\n * Internal dependencies\n */\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback DidHook\n *\n * Returns the number of times an action has been fired.\n *\n * @param {string} hookName The hook name to check.\n *\n * @return {number | undefined} The number of times the hook has run.\n */\n\n/**\n * Returns a function which, when invoked, will return the number of times a\n * hook has been called.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {DidHook} Function that returns a hook's call count.\n */\nfunction createDidHook( hooks, storeKey ) {\n\treturn function didHook( hookName ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn hooksStore[ hookName ] && hooksStore[ hookName ].runs\n\t\t\t? hooksStore[ hookName ].runs\n\t\t\t: 0;\n\t};\n}\n\nexport default createDidHook;\n","export { default as createInterpolateElement } from './create-interpolate-element';\nexport * from './react';\nexport * from './react-platform';\nexport * from './utils';\nexport { default as Platform } from './platform';\nexport { default as renderToString } from './serialize';\nexport { default as RawHTML } from './raw-html';\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * Internal dependencies\n */\nimport { createElement, cloneElement, Fragment, isValidElement } from './react';\n\n/** @typedef {import('./react').WPElement} WPElement */\n\nlet indoc, offset, output, stack;\n\n/**\n * Matches tags in the localized string\n *\n * This is used for extracting the tag pattern groups for parsing the localized\n * string and along with the map converting it to a react element.\n *\n * There are four references extracted using this tokenizer:\n *\n * match: Full match of the tag (i.e. , ,
)\n * isClosing: The closing slash, if it exists.\n * name: The name portion of the tag (strong, br) (if )\n * isSelfClosed: The slash on a self closing tag, if it exists.\n *\n * @type {RegExp}\n */\nconst tokenizer = /<(\\/)?(\\w+)\\s*(\\/)?>/g;\n\n/**\n * The stack frame tracking parse progress.\n *\n * @typedef Frame\n *\n * @property {WPElement} element A parent element which may still have\n * @property {number} tokenStart Offset at which parent element first\n * appears.\n * @property {number} tokenLength Length of string marking start of parent\n * element.\n * @property {number} [prevOffset] Running offset at which parsing should\n * continue.\n * @property {number} [leadingTextStart] Offset at which last closing element\n * finished, used for finding text between\n * elements.\n * @property {WPElement[]} children Children.\n */\n\n/**\n * Tracks recursive-descent parse state.\n *\n * This is a Stack frame holding parent elements until all children have been\n * parsed.\n *\n * @private\n * @param {WPElement} element A parent element which may still have\n * nested children not yet parsed.\n * @param {number} tokenStart Offset at which parent element first\n * appears.\n * @param {number} tokenLength Length of string marking start of parent\n * element.\n * @param {number} [prevOffset] Running offset at which parsing should\n * continue.\n * @param {number} [leadingTextStart] Offset at which last closing element\n * finished, used for finding text between\n * elements.\n *\n * @return {Frame} The stack frame tracking parse progress.\n */\nfunction createFrame(\n\telement,\n\ttokenStart,\n\ttokenLength,\n\tprevOffset,\n\tleadingTextStart\n) {\n\treturn {\n\t\telement,\n\t\ttokenStart,\n\t\ttokenLength,\n\t\tprevOffset,\n\t\tleadingTextStart,\n\t\tchildren: [],\n\t};\n}\n\n/**\n * This function creates an interpolated element from a passed in string with\n * specific tags matching how the string should be converted to an element via\n * the conversion map value.\n *\n * @example\n * For example, for the given string:\n *\n * \"This is a string with
a link and a self-closing\n * tag\"\n *\n * You would have something like this as the conversionMap value:\n *\n * ```js\n * {\n * span: ,\n * a: ,\n * CustomComponentB: ,\n * }\n * ```\n *\n * @param {string} interpolatedString The interpolation string to be parsed.\n * @param {Object} conversionMap The map used to convert the string to\n * a react element.\n * @throws {TypeError}\n * @return {WPElement} A wp element.\n */\nconst createInterpolateElement = ( interpolatedString, conversionMap ) => {\n\tindoc = interpolatedString;\n\toffset = 0;\n\toutput = [];\n\tstack = [];\n\ttokenizer.lastIndex = 0;\n\n\tif ( ! isValidConversionMap( conversionMap ) ) {\n\t\tthrow new TypeError(\n\t\t\t'The conversionMap provided is not valid. It must be an object with values that are WPElements'\n\t\t);\n\t}\n\n\tdo {\n\t\t// twiddle our thumbs\n\t} while ( proceed( conversionMap ) );\n\treturn createElement( Fragment, null, ...output );\n};\n\n/**\n * Validate conversion map.\n *\n * A map is considered valid if it's an object and every value in the object\n * is a WPElement\n *\n * @private\n *\n * @param {Object} conversionMap The map being validated.\n *\n * @return {boolean} True means the map is valid.\n */\nconst isValidConversionMap = ( conversionMap ) => {\n\tconst isObject = typeof conversionMap === 'object';\n\tconst values = isObject && Object.values( conversionMap );\n\treturn (\n\t\tisObject &&\n\t\tvalues.length &&\n\t\tvalues.every( ( element ) => isValidElement( element ) )\n\t);\n};\n\n/**\n * This is the iterator over the matches in the string.\n *\n * @private\n *\n * @param {Object} conversionMap The conversion map for the string.\n *\n * @return {boolean} true for continuing to iterate, false for finished.\n */\nfunction proceed( conversionMap ) {\n\tconst next = nextToken();\n\tconst [ tokenType, name, startOffset, tokenLength ] = next;\n\tconst stackDepth = stack.length;\n\tconst leadingTextStart = startOffset > offset ? offset : null;\n\tif ( ! conversionMap[ name ] ) {\n\t\taddText();\n\t\treturn false;\n\t}\n\tswitch ( tokenType ) {\n\t\tcase 'no-more-tokens':\n\t\t\tif ( stackDepth !== 0 ) {\n\t\t\t\tconst { leadingTextStart: stackLeadingText, tokenStart } =\n\t\t\t\t\tstack.pop();\n\t\t\t\toutput.push( indoc.substr( stackLeadingText, tokenStart ) );\n\t\t\t}\n\t\t\taddText();\n\t\t\treturn false;\n\n\t\tcase 'self-closed':\n\t\t\tif ( 0 === stackDepth ) {\n\t\t\t\tif ( null !== leadingTextStart ) {\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tindoc.substr(\n\t\t\t\t\t\t\tleadingTextStart,\n\t\t\t\t\t\t\tstartOffset - leadingTextStart\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\toutput.push( conversionMap[ name ] );\n\t\t\t\toffset = startOffset + tokenLength;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Otherwise we found an inner element.\n\t\t\taddChild(\n\t\t\t\tcreateFrame( conversionMap[ name ], startOffset, tokenLength )\n\t\t\t);\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tcase 'opener':\n\t\t\tstack.push(\n\t\t\t\tcreateFrame(\n\t\t\t\t\tconversionMap[ name ],\n\t\t\t\t\tstartOffset,\n\t\t\t\t\ttokenLength,\n\t\t\t\t\tstartOffset + tokenLength,\n\t\t\t\t\tleadingTextStart\n\t\t\t\t)\n\t\t\t);\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tcase 'closer':\n\t\t\t// If we're not nesting then this is easy - close the block.\n\t\t\tif ( 1 === stackDepth ) {\n\t\t\t\tcloseOuterElement( startOffset );\n\t\t\t\toffset = startOffset + tokenLength;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Otherwise we're nested and we have to close out the current\n\t\t\t// block and add it as a innerBlock to the parent.\n\t\t\tconst stackTop = stack.pop();\n\t\t\tconst text = indoc.substr(\n\t\t\t\tstackTop.prevOffset,\n\t\t\t\tstartOffset - stackTop.prevOffset\n\t\t\t);\n\t\t\tstackTop.children.push( text );\n\t\t\tstackTop.prevOffset = startOffset + tokenLength;\n\t\t\tconst frame = createFrame(\n\t\t\t\tstackTop.element,\n\t\t\t\tstackTop.tokenStart,\n\t\t\t\tstackTop.tokenLength,\n\t\t\t\tstartOffset + tokenLength\n\t\t\t);\n\t\t\tframe.children = stackTop.children;\n\t\t\taddChild( frame );\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tdefault:\n\t\t\taddText();\n\t\t\treturn false;\n\t}\n}\n\n/**\n * Grabs the next token match in the string and returns it's details.\n *\n * @private\n *\n * @return {Array} An array of details for the token matched.\n */\nfunction nextToken() {\n\tconst matches = tokenizer.exec( indoc );\n\t// We have no more tokens.\n\tif ( null === matches ) {\n\t\treturn [ 'no-more-tokens' ];\n\t}\n\tconst startedAt = matches.index;\n\tconst [ match, isClosing, name, isSelfClosed ] = matches;\n\tconst length = match.length;\n\tif ( isSelfClosed ) {\n\t\treturn [ 'self-closed', name, startedAt, length ];\n\t}\n\tif ( isClosing ) {\n\t\treturn [ 'closer', name, startedAt, length ];\n\t}\n\treturn [ 'opener', name, startedAt, length ];\n}\n\n/**\n * Pushes text extracted from the indoc string to the output stack given the\n * current rawLength value and offset (if rawLength is provided ) or the\n * indoc.length and offset.\n *\n * @private\n */\nfunction addText() {\n\tconst length = indoc.length - offset;\n\tif ( 0 === length ) {\n\t\treturn;\n\t}\n\toutput.push( indoc.substr( offset, length ) );\n}\n\n/**\n * Pushes a child element to the associated parent element's children for the\n * parent currently active in the stack.\n *\n * @private\n *\n * @param {Frame} frame The Frame containing the child element and it's\n * token information.\n */\nfunction addChild( frame ) {\n\tconst { element, tokenStart, tokenLength, prevOffset, children } = frame;\n\tconst parent = stack[ stack.length - 1 ];\n\tconst text = indoc.substr(\n\t\tparent.prevOffset,\n\t\ttokenStart - parent.prevOffset\n\t);\n\n\tif ( text ) {\n\t\tparent.children.push( text );\n\t}\n\n\tparent.children.push( cloneElement( element, null, ...children ) );\n\tparent.prevOffset = prevOffset ? prevOffset : tokenStart + tokenLength;\n}\n\n/**\n * This is called for closing tags. It creates the element currently active in\n * the stack.\n *\n * @private\n *\n * @param {number} endOffset Offset at which the closing tag for the element\n * begins in the string. If this is greater than the\n * prevOffset attached to the element, then this\n * helps capture any remaining nested text nodes in\n * the element.\n */\nfunction closeOuterElement( endOffset ) {\n\tconst { element, leadingTextStart, prevOffset, tokenStart, children } =\n\t\tstack.pop();\n\n\tconst text = endOffset\n\t\t? indoc.substr( prevOffset, endOffset - prevOffset )\n\t\t: indoc.substr( prevOffset );\n\n\tif ( text ) {\n\t\tchildren.push( text );\n\t}\n\n\tif ( null !== leadingTextStart ) {\n\t\toutput.push(\n\t\t\tindoc.substr( leadingTextStart, tokenStart - leadingTextStart )\n\t\t);\n\t}\n\n\toutput.push( cloneElement( element, null, ...children ) );\n}\n\nexport default createInterpolateElement;\n","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * External dependencies\n */\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport {\n\tChildren,\n\tcloneElement,\n\tComponent,\n\tcreateContext,\n\tcreateElement,\n\tcreateRef,\n\tforwardRef,\n\tFragment,\n\tisValidElement,\n\tmemo,\n\tStrictMode,\n\tuseState,\n\tuseEffect,\n\tuseContext,\n\tuseReducer,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseDebugValue,\n\tlazy,\n\tSuspense,\n} from 'react';\n\n/**\n * Object containing a React element.\n *\n * @typedef {import('react').ReactElement} WPElement\n */\n\n/**\n * Object containing a React component.\n *\n * @typedef {import('react').ComponentType} WPComponent\n */\n\n/**\n * Object containing a React synthetic event.\n *\n * @typedef {import('react').SyntheticEvent} WPSyntheticEvent\n */\n\n/**\n * Object that provides utilities for dealing with React children.\n */\nexport { Children };\n\n/**\n * Creates a copy of an element with extended props.\n *\n * @param {WPElement} element Element\n * @param {?Object} props Props to apply to cloned element\n *\n * @return {WPElement} Cloned element.\n */\nexport { cloneElement };\n\n/**\n * A base class to create WordPress Components (Refs, state and lifecycle hooks)\n */\nexport { Component };\n\n/**\n * Creates a context object containing two components: a provider and consumer.\n *\n * @param {Object} defaultValue A default data stored in the context.\n *\n * @return {Object} Context object.\n */\nexport { createContext };\n\n/**\n * Returns a new element of given type. Type can be either a string tag name or\n * another function which itself returns an element.\n *\n * @param {?(string|Function)} type Tag name or element creator\n * @param {Object} props Element properties, either attribute\n * set to apply to DOM node or values to\n * pass through to element creator\n * @param {...WPElement} children Descendant elements\n *\n * @return {WPElement} Element.\n */\nexport { createElement };\n\n/**\n * Returns an object tracking a reference to a rendered element via its\n * `current` property as either a DOMElement or Element, dependent upon the\n * type of element rendered with the ref attribute.\n *\n * @return {Object} Ref object.\n */\nexport { createRef };\n\n/**\n * Component enhancer used to enable passing a ref to its wrapped component.\n * Pass a function argument which receives `props` and `ref` as its arguments,\n * returning an element using the forwarded ref. The return value is a new\n * component which forwards its ref.\n *\n * @param {Function} forwarder Function passed `props` and `ref`, expected to\n * return an element.\n *\n * @return {WPComponent} Enhanced component.\n */\nexport { forwardRef };\n\n/**\n * A component which renders its children without any wrapping element.\n */\nexport { Fragment };\n\n/**\n * Checks if an object is a valid WPElement.\n *\n * @param {Object} objectToCheck The object to be checked.\n *\n * @return {boolean} true if objectToTest is a valid WPElement and false otherwise.\n */\nexport { isValidElement };\n\n/**\n * @see https://reactjs.org/docs/react-api.html#reactmemo\n */\nexport { memo };\n\n/**\n * Component that activates additional checks and warnings for its descendants.\n */\nexport { StrictMode };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usecallback\n */\nexport { useCallback };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usecontext\n */\nexport { useContext };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usedebugvalue\n */\nexport { useDebugValue };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#useeffect\n */\nexport { useEffect };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#useimperativehandle\n */\nexport { useImperativeHandle };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nexport { useLayoutEffect };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usememo\n */\nexport { useMemo };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usereducer\n */\nexport { useReducer };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n */\nexport { useRef };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usestate\n */\nexport { useState };\n\n/**\n * @see https://reactjs.org/docs/react-api.html#reactlazy\n */\nexport { lazy };\n\n/**\n * @see https://reactjs.org/docs/react-api.html#reactsuspense\n */\nexport { Suspense };\n\n/**\n * Concatenate two or more React children objects.\n *\n * @param {...?Object} childrenArguments Array of children arguments (array of arrays/strings/objects) to concatenate.\n *\n * @return {Array} The concatenated value.\n */\nexport function concatChildren( ...childrenArguments ) {\n\treturn childrenArguments.reduce( ( accumulator, children, i ) => {\n\t\tChildren.forEach( children, ( child, j ) => {\n\t\t\tif ( child && 'string' !== typeof child ) {\n\t\t\t\tchild = cloneElement( child, {\n\t\t\t\t\tkey: [ i, j ].join(),\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\taccumulator.push( child );\n\t\t} );\n\n\t\treturn accumulator;\n\t}, [] );\n}\n\n/**\n * Switches the nodeName of all the elements in the children object.\n *\n * @param {?Object} children Children object.\n * @param {string} nodeName Node name.\n *\n * @return {?Object} The updated children object.\n */\nexport function switchChildrenNodeName( children, nodeName ) {\n\treturn (\n\t\tchildren &&\n\t\tChildren.map( children, ( elt, index ) => {\n\t\t\tif ( typeof elt?.valueOf() === 'string' ) {\n\t\t\t\treturn createElement( nodeName, { key: index }, elt );\n\t\t\t}\n\t\t\tconst { children: childrenProp, ...props } = elt.props;\n\t\t\treturn createElement(\n\t\t\t\tnodeName,\n\t\t\t\t{ key: index, ...props },\n\t\t\t\tchildrenProp\n\t\t\t);\n\t\t} )\n\t);\n}\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * External dependencies\n */\nimport { AppRegistry } from 'react-native';\n\n/**\n * Registers an app root component allowing the native system to run the app.\n *\n * @param {string} appKey Unique app name identifier.\n * @param {Function} componentProvider Function returning the app root React component.\n */\nexport const registerComponent = ( appKey, componentProvider ) => {\n\tAppRegistry.registerComponent( appKey, componentProvider );\n};\n","/**\n * Checks if the provided WP element is empty.\n *\n * @param {*} element WP element to check.\n * @return {boolean} True when an element is considered empty.\n */\nexport const isEmptyElement = ( element ) => {\n\tif ( typeof element === 'number' ) {\n\t\treturn false;\n\t}\n\n\tif ( typeof element?.valueOf() === 'string' || Array.isArray( element ) ) {\n\t\treturn ! element.length;\n\t}\n\n\treturn ! element;\n};\n","/**\n * External dependencies\n */\nimport { Platform as OriginalPlatform } from 'react-native';\n\nconst Platform = {\n\t...OriginalPlatform,\n\tOS: 'native',\n\tselect: ( spec ) => {\n\t\tif ( 'ios' in spec ) {\n\t\t\treturn spec.ios;\n\t\t} else if ( 'native' in spec ) {\n\t\t\treturn spec.native;\n\t\t}\n\t\treturn spec.default;\n\t},\n\tisNative: true,\n\tisIOS: true,\n};\n\nexport default Platform;\n","/**\n * Parts of this source were derived and modified from fast-react-render,\n * released under the MIT license.\n *\n * https://github.com/alt-j/fast-react-render\n *\n * Copyright (c) 2016 Andrey Morozov\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * External dependencies\n */\nimport { isPlainObject } from 'is-plain-object';\nimport { paramCase as kebabCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tescapeHTML,\n\tescapeAttribute,\n\tisValidAttributeName,\n} from '@wordpress/escape-html';\n\n/**\n * Internal dependencies\n */\nimport { createContext, Fragment, StrictMode, forwardRef } from './react';\nimport RawHTML from './raw-html';\n\n/** @typedef {import('./react').WPElement} WPElement */\n\nconst { Provider, Consumer } = createContext( undefined );\nconst ForwardRef = forwardRef( () => {\n\treturn null;\n} );\n\n/**\n * Valid attribute types.\n *\n * @type {Set}\n */\nconst ATTRIBUTES_TYPES = new Set( [ 'string', 'boolean', 'number' ] );\n\n/**\n * Element tags which can be self-closing.\n *\n * @type {Set}\n */\nconst SELF_CLOSING_TAGS = new Set( [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr',\n] );\n\n/**\n * Boolean attributes are attributes whose presence as being assigned is\n * meaningful, even if only empty.\n *\n * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes\n * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3\n *\n * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ]\n * .filter( ( tr ) => tr.lastChild.textContent.indexOf( 'Boolean attribute' ) !== -1 )\n * .reduce( ( result, tr ) => Object.assign( result, {\n * [ tr.firstChild.textContent.trim() ]: true\n * } ), {} ) ).sort();\n *\n * @type {Set}\n */\nconst BOOLEAN_ATTRIBUTES = new Set( [\n\t'allowfullscreen',\n\t'allowpaymentrequest',\n\t'allowusermedia',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'defer',\n\t'disabled',\n\t'download',\n\t'formnovalidate',\n\t'hidden',\n\t'ismap',\n\t'itemscope',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'selected',\n\t'typemustmatch',\n] );\n\n/**\n * Enumerated attributes are attributes which must be of a specific value form.\n * Like boolean attributes, these are meaningful if specified, even if not of a\n * valid enumerated value.\n *\n * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute\n * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3\n *\n * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ]\n * .filter( ( tr ) => /^(\"(.+?)\";?\\s*)+/.test( tr.lastChild.textContent.trim() ) )\n * .reduce( ( result, tr ) => Object.assign( result, {\n * [ tr.firstChild.textContent.trim() ]: true\n * } ), {} ) ).sort();\n *\n * Some notable omissions:\n *\n * - `alt`: https://blog.whatwg.org/omit-alt\n *\n * @type {Set}\n */\nconst ENUMERATED_ATTRIBUTES = new Set( [\n\t'autocapitalize',\n\t'autocomplete',\n\t'charset',\n\t'contenteditable',\n\t'crossorigin',\n\t'decoding',\n\t'dir',\n\t'draggable',\n\t'enctype',\n\t'formenctype',\n\t'formmethod',\n\t'http-equiv',\n\t'inputmode',\n\t'kind',\n\t'method',\n\t'preload',\n\t'scope',\n\t'shape',\n\t'spellcheck',\n\t'translate',\n\t'type',\n\t'wrap',\n] );\n\n/**\n * Set of CSS style properties which support assignment of unitless numbers.\n * Used in rendering of style properties, where `px` unit is assumed unless\n * property is included in this set or value is zero.\n *\n * Generated via:\n *\n * Object.entries( document.createElement( 'div' ).style )\n * .filter( ( [ key ] ) => (\n * ! /^(webkit|ms|moz)/.test( key ) &&\n * ( e.style[ key ] = 10 ) &&\n * e.style[ key ] === '10'\n * ) )\n * .map( ( [ key ] ) => key )\n * .sort();\n *\n * @type {Set}\n */\nconst CSS_PROPERTIES_SUPPORTS_UNITLESS = new Set( [\n\t'animation',\n\t'animationIterationCount',\n\t'baselineShift',\n\t'borderImageOutset',\n\t'borderImageSlice',\n\t'borderImageWidth',\n\t'columnCount',\n\t'cx',\n\t'cy',\n\t'fillOpacity',\n\t'flexGrow',\n\t'flexShrink',\n\t'floodOpacity',\n\t'fontWeight',\n\t'gridColumnEnd',\n\t'gridColumnStart',\n\t'gridRowEnd',\n\t'gridRowStart',\n\t'lineHeight',\n\t'opacity',\n\t'order',\n\t'orphans',\n\t'r',\n\t'rx',\n\t'ry',\n\t'shapeImageThreshold',\n\t'stopOpacity',\n\t'strokeDasharray',\n\t'strokeDashoffset',\n\t'strokeMiterlimit',\n\t'strokeOpacity',\n\t'strokeWidth',\n\t'tabSize',\n\t'widows',\n\t'x',\n\t'y',\n\t'zIndex',\n\t'zoom',\n] );\n\n/**\n * Returns true if the specified string is prefixed by one of an array of\n * possible prefixes.\n *\n * @param {string} string String to check.\n * @param {string[]} prefixes Possible prefixes.\n *\n * @return {boolean} Whether string has prefix.\n */\nexport function hasPrefix( string, prefixes ) {\n\treturn prefixes.some( ( prefix ) => string.indexOf( prefix ) === 0 );\n}\n\n/**\n * Returns true if the given prop name should be ignored in attributes\n * serialization, or false otherwise.\n *\n * @param {string} attribute Attribute to check.\n *\n * @return {boolean} Whether attribute should be ignored.\n */\nfunction isInternalAttribute( attribute ) {\n\treturn 'key' === attribute || 'children' === attribute;\n}\n\n/**\n * Returns the normal form of the element's attribute value for HTML.\n *\n * @param {string} attribute Attribute name.\n * @param {*} value Non-normalized attribute value.\n *\n * @return {*} Normalized attribute value.\n */\nfunction getNormalAttributeValue( attribute, value ) {\n\tswitch ( attribute ) {\n\t\tcase 'style':\n\t\t\treturn renderStyle( value );\n\t}\n\n\treturn value;\n}\n/**\n * This is a map of all SVG attributes that have dashes. Map(lower case prop => dashed lower case attribute).\n * We need this to render e.g strokeWidth as stroke-width.\n *\n * List from: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute.\n */\nconst SVG_ATTRIBUTE_WITH_DASHES_LIST = [\n\t'accentHeight',\n\t'alignmentBaseline',\n\t'arabicForm',\n\t'baselineShift',\n\t'capHeight',\n\t'clipPath',\n\t'clipRule',\n\t'colorInterpolation',\n\t'colorInterpolationFilters',\n\t'colorProfile',\n\t'colorRendering',\n\t'dominantBaseline',\n\t'enableBackground',\n\t'fillOpacity',\n\t'fillRule',\n\t'floodColor',\n\t'floodOpacity',\n\t'fontFamily',\n\t'fontSize',\n\t'fontSizeAdjust',\n\t'fontStretch',\n\t'fontStyle',\n\t'fontVariant',\n\t'fontWeight',\n\t'glyphName',\n\t'glyphOrientationHorizontal',\n\t'glyphOrientationVertical',\n\t'horizAdvX',\n\t'horizOriginX',\n\t'imageRendering',\n\t'letterSpacing',\n\t'lightingColor',\n\t'markerEnd',\n\t'markerMid',\n\t'markerStart',\n\t'overlinePosition',\n\t'overlineThickness',\n\t'paintOrder',\n\t'panose1',\n\t'pointerEvents',\n\t'renderingIntent',\n\t'shapeRendering',\n\t'stopColor',\n\t'stopOpacity',\n\t'strikethroughPosition',\n\t'strikethroughThickness',\n\t'strokeDasharray',\n\t'strokeDashoffset',\n\t'strokeLinecap',\n\t'strokeLinejoin',\n\t'strokeMiterlimit',\n\t'strokeOpacity',\n\t'strokeWidth',\n\t'textAnchor',\n\t'textDecoration',\n\t'textRendering',\n\t'underlinePosition',\n\t'underlineThickness',\n\t'unicodeBidi',\n\t'unicodeRange',\n\t'unitsPerEm',\n\t'vAlphabetic',\n\t'vHanging',\n\t'vIdeographic',\n\t'vMathematical',\n\t'vectorEffect',\n\t'vertAdvY',\n\t'vertOriginX',\n\t'vertOriginY',\n\t'wordSpacing',\n\t'writingMode',\n\t'xmlnsXlink',\n\t'xHeight',\n].reduce( ( map, attribute ) => {\n\t// The keys are lower-cased for more robust lookup.\n\tmap[ attribute.toLowerCase() ] = attribute;\n\treturn map;\n}, {} );\n\n/**\n * This is a map of all case-sensitive SVG attributes. Map(lowercase key => proper case attribute).\n * The keys are lower-cased for more robust lookup.\n * Note that this list only contains attributes that contain at least one capital letter.\n * Lowercase attributes don't need mapping, since we lowercase all attributes by default.\n */\nconst CASE_SENSITIVE_SVG_ATTRIBUTES = [\n\t'allowReorder',\n\t'attributeName',\n\t'attributeType',\n\t'autoReverse',\n\t'baseFrequency',\n\t'baseProfile',\n\t'calcMode',\n\t'clipPathUnits',\n\t'contentScriptType',\n\t'contentStyleType',\n\t'diffuseConstant',\n\t'edgeMode',\n\t'externalResourcesRequired',\n\t'filterRes',\n\t'filterUnits',\n\t'glyphRef',\n\t'gradientTransform',\n\t'gradientUnits',\n\t'kernelMatrix',\n\t'kernelUnitLength',\n\t'keyPoints',\n\t'keySplines',\n\t'keyTimes',\n\t'lengthAdjust',\n\t'limitingConeAngle',\n\t'markerHeight',\n\t'markerUnits',\n\t'markerWidth',\n\t'maskContentUnits',\n\t'maskUnits',\n\t'numOctaves',\n\t'pathLength',\n\t'patternContentUnits',\n\t'patternTransform',\n\t'patternUnits',\n\t'pointsAtX',\n\t'pointsAtY',\n\t'pointsAtZ',\n\t'preserveAlpha',\n\t'preserveAspectRatio',\n\t'primitiveUnits',\n\t'refX',\n\t'refY',\n\t'repeatCount',\n\t'repeatDur',\n\t'requiredExtensions',\n\t'requiredFeatures',\n\t'specularConstant',\n\t'specularExponent',\n\t'spreadMethod',\n\t'startOffset',\n\t'stdDeviation',\n\t'stitchTiles',\n\t'suppressContentEditableWarning',\n\t'suppressHydrationWarning',\n\t'surfaceScale',\n\t'systemLanguage',\n\t'tableValues',\n\t'targetX',\n\t'targetY',\n\t'textLength',\n\t'viewBox',\n\t'viewTarget',\n\t'xChannelSelector',\n\t'yChannelSelector',\n].reduce( ( map, attribute ) => {\n\t// The keys are lower-cased for more robust lookup.\n\tmap[ attribute.toLowerCase() ] = attribute;\n\treturn map;\n}, {} );\n\n/**\n * This is a map of all SVG attributes that have colons.\n * Keys are lower-cased and stripped of their colons for more robust lookup.\n */\nconst SVG_ATTRIBUTES_WITH_COLONS = [\n\t'xlink:actuate',\n\t'xlink:arcrole',\n\t'xlink:href',\n\t'xlink:role',\n\t'xlink:show',\n\t'xlink:title',\n\t'xlink:type',\n\t'xml:base',\n\t'xml:lang',\n\t'xml:space',\n\t'xmlns:xlink',\n].reduce( ( map, attribute ) => {\n\tmap[ attribute.replace( ':', '' ).toLowerCase() ] = attribute;\n\treturn map;\n}, {} );\n\n/**\n * Returns the normal form of the element's attribute name for HTML.\n *\n * @param {string} attribute Non-normalized attribute name.\n *\n * @return {string} Normalized attribute name.\n */\nfunction getNormalAttributeName( attribute ) {\n\tswitch ( attribute ) {\n\t\tcase 'htmlFor':\n\t\t\treturn 'for';\n\n\t\tcase 'className':\n\t\t\treturn 'class';\n\t}\n\tconst attributeLowerCase = attribute.toLowerCase();\n\n\tif ( CASE_SENSITIVE_SVG_ATTRIBUTES[ attributeLowerCase ] ) {\n\t\treturn CASE_SENSITIVE_SVG_ATTRIBUTES[ attributeLowerCase ];\n\t} else if ( SVG_ATTRIBUTE_WITH_DASHES_LIST[ attributeLowerCase ] ) {\n\t\treturn kebabCase(\n\t\t\tSVG_ATTRIBUTE_WITH_DASHES_LIST[ attributeLowerCase ]\n\t\t);\n\t} else if ( SVG_ATTRIBUTES_WITH_COLONS[ attributeLowerCase ] ) {\n\t\treturn SVG_ATTRIBUTES_WITH_COLONS[ attributeLowerCase ];\n\t}\n\n\treturn attributeLowerCase;\n}\n\n/**\n * Returns the normal form of the style property name for HTML.\n *\n * - Converts property names to kebab-case, e.g. 'backgroundColor' → 'background-color'\n * - Leaves custom attributes alone, e.g. '--myBackgroundColor' → '--myBackgroundColor'\n * - Converts vendor-prefixed property names to -kebab-case, e.g. 'MozTransform' → '-moz-transform'\n *\n * @param {string} property Property name.\n *\n * @return {string} Normalized property name.\n */\nfunction getNormalStylePropertyName( property ) {\n\tif ( property.startsWith( '--' ) ) {\n\t\treturn property;\n\t}\n\n\tif ( hasPrefix( property, [ 'ms', 'O', 'Moz', 'Webkit' ] ) ) {\n\t\treturn '-' + kebabCase( property );\n\t}\n\n\treturn kebabCase( property );\n}\n\n/**\n * Returns the normal form of the style property value for HTML. Appends a\n * default pixel unit if numeric, not a unitless property, and not zero.\n *\n * @param {string} property Property name.\n * @param {*} value Non-normalized property value.\n *\n * @return {*} Normalized property value.\n */\nfunction getNormalStylePropertyValue( property, value ) {\n\tif (\n\t\ttypeof value === 'number' &&\n\t\t0 !== value &&\n\t\t! CSS_PROPERTIES_SUPPORTS_UNITLESS.has( property )\n\t) {\n\t\treturn value + 'px';\n\t}\n\n\treturn value;\n}\n\n/**\n * Serializes a React element to string.\n *\n * @param {import('react').ReactNode} element Element to serialize.\n * @param {Object} [context] Context object.\n * @param {Object} [legacyContext] Legacy context object.\n *\n * @return {string} Serialized element.\n */\nexport function renderElement( element, context, legacyContext = {} ) {\n\tif ( null === element || undefined === element || false === element ) {\n\t\treturn '';\n\t}\n\n\tif ( Array.isArray( element ) ) {\n\t\treturn renderChildren( element, context, legacyContext );\n\t}\n\n\tswitch ( typeof element ) {\n\t\tcase 'string':\n\t\t\treturn escapeHTML( element );\n\n\t\tcase 'number':\n\t\t\treturn element.toString();\n\t}\n\n\tconst { type, props } = /** @type {{type?: any, props?: any}} */ (\n\t\telement\n\t);\n\n\tswitch ( type ) {\n\t\tcase StrictMode:\n\t\tcase Fragment:\n\t\t\treturn renderChildren( props.children, context, legacyContext );\n\n\t\tcase RawHTML:\n\t\t\tconst { children, ...wrapperProps } = props;\n\n\t\t\treturn renderNativeComponent(\n\t\t\t\t! Object.keys( wrapperProps ).length ? null : 'div',\n\t\t\t\t{\n\t\t\t\t\t...wrapperProps,\n\t\t\t\t\tdangerouslySetInnerHTML: { __html: children },\n\t\t\t\t},\n\t\t\t\tcontext,\n\t\t\t\tlegacyContext\n\t\t\t);\n\t}\n\n\tswitch ( typeof type ) {\n\t\tcase 'string':\n\t\t\treturn renderNativeComponent( type, props, context, legacyContext );\n\n\t\tcase 'function':\n\t\t\tif (\n\t\t\t\ttype.prototype &&\n\t\t\t\ttypeof type.prototype.render === 'function'\n\t\t\t) {\n\t\t\t\treturn renderComponent( type, props, context, legacyContext );\n\t\t\t}\n\n\t\t\treturn renderElement(\n\t\t\t\ttype( props, legacyContext ),\n\t\t\t\tcontext,\n\t\t\t\tlegacyContext\n\t\t\t);\n\t}\n\n\tswitch ( type && type.$$typeof ) {\n\t\tcase Provider.$$typeof:\n\t\t\treturn renderChildren( props.children, props.value, legacyContext );\n\n\t\tcase Consumer.$$typeof:\n\t\t\treturn renderElement(\n\t\t\t\tprops.children( context || type._currentValue ),\n\t\t\t\tcontext,\n\t\t\t\tlegacyContext\n\t\t\t);\n\n\t\tcase ForwardRef.$$typeof:\n\t\t\treturn renderElement(\n\t\t\t\ttype.render( props ),\n\t\t\t\tcontext,\n\t\t\t\tlegacyContext\n\t\t\t);\n\t}\n\n\treturn '';\n}\n\n/**\n * Serializes a native component type to string.\n *\n * @param {?string} type Native component type to serialize, or null if\n * rendering as fragment of children content.\n * @param {Object} props Props object.\n * @param {Object} [context] Context object.\n * @param {Object} [legacyContext] Legacy context object.\n *\n * @return {string} Serialized element.\n */\nexport function renderNativeComponent(\n\ttype,\n\tprops,\n\tcontext,\n\tlegacyContext = {}\n) {\n\tlet content = '';\n\tif ( type === 'textarea' && props.hasOwnProperty( 'value' ) ) {\n\t\t// Textarea children can be assigned as value prop. If it is, render in\n\t\t// place of children. Ensure to omit so it is not assigned as attribute\n\t\t// as well.\n\t\tcontent = renderChildren( props.value, context, legacyContext );\n\t\tconst { value, ...restProps } = props;\n\t\tprops = restProps;\n\t} else if (\n\t\tprops.dangerouslySetInnerHTML &&\n\t\ttypeof props.dangerouslySetInnerHTML.__html === 'string'\n\t) {\n\t\t// Dangerous content is left unescaped.\n\t\tcontent = props.dangerouslySetInnerHTML.__html;\n\t} else if ( typeof props.children !== 'undefined' ) {\n\t\tcontent = renderChildren( props.children, context, legacyContext );\n\t}\n\n\tif ( ! type ) {\n\t\treturn content;\n\t}\n\n\tconst attributes = renderAttributes( props );\n\n\tif ( SELF_CLOSING_TAGS.has( type ) ) {\n\t\treturn '<' + type + attributes + '/>';\n\t}\n\n\treturn '<' + type + attributes + '>' + content + '';\n}\n\n/** @typedef {import('./react').WPComponent} WPComponent */\n\n/**\n * Serializes a non-native component type to string.\n *\n * @param {WPComponent} Component Component type to serialize.\n * @param {Object} props Props object.\n * @param {Object} [context] Context object.\n * @param {Object} [legacyContext] Legacy context object.\n *\n * @return {string} Serialized element\n */\nexport function renderComponent(\n\tComponent,\n\tprops,\n\tcontext,\n\tlegacyContext = {}\n) {\n\tconst instance = new /** @type {import('react').ComponentClass} */ (\n\t\tComponent\n\t)( props, legacyContext );\n\n\tif (\n\t\ttypeof (\n\t\t\t// Ignore reason: Current prettier reformats parens and mangles type assertion\n\t\t\t// prettier-ignore\n\t\t\t/** @type {{getChildContext?: () => unknown}} */ ( instance ).getChildContext\n\t\t) === 'function'\n\t) {\n\t\tObject.assign(\n\t\t\tlegacyContext,\n\t\t\t/** @type {{getChildContext?: () => unknown}} */ (\n\t\t\t\tinstance\n\t\t\t).getChildContext()\n\t\t);\n\t}\n\n\tconst html = renderElement( instance.render(), context, legacyContext );\n\n\treturn html;\n}\n\n/**\n * Serializes an array of children to string.\n *\n * @param {import('react').ReactNodeArray} children Children to serialize.\n * @param {Object} [context] Context object.\n * @param {Object} [legacyContext] Legacy context object.\n *\n * @return {string} Serialized children.\n */\nfunction renderChildren( children, context, legacyContext = {} ) {\n\tlet result = '';\n\n\tchildren = Array.isArray( children ) ? children : [ children ];\n\n\tfor ( let i = 0; i < children.length; i++ ) {\n\t\tconst child = children[ i ];\n\n\t\tresult += renderElement( child, context, legacyContext );\n\t}\n\n\treturn result;\n}\n\n/**\n * Renders a props object as a string of HTML attributes.\n *\n * @param {Object} props Props object.\n *\n * @return {string} Attributes string.\n */\nexport function renderAttributes( props ) {\n\tlet result = '';\n\n\tfor ( const key in props ) {\n\t\tconst attribute = getNormalAttributeName( key );\n\t\tif ( ! isValidAttributeName( attribute ) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet value = getNormalAttributeValue( key, props[ key ] );\n\n\t\t// If value is not of serializeable type, skip.\n\t\tif ( ! ATTRIBUTES_TYPES.has( typeof value ) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't render internal attribute names.\n\t\tif ( isInternalAttribute( key ) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst isBooleanAttribute = BOOLEAN_ATTRIBUTES.has( attribute );\n\n\t\t// Boolean attribute should be omitted outright if its value is false.\n\t\tif ( isBooleanAttribute && value === false ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst isMeaningfulAttribute =\n\t\t\tisBooleanAttribute ||\n\t\t\thasPrefix( key, [ 'data-', 'aria-' ] ) ||\n\t\t\tENUMERATED_ATTRIBUTES.has( attribute );\n\n\t\t// Only write boolean value as attribute if meaningful.\n\t\tif ( typeof value === 'boolean' && ! isMeaningfulAttribute ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult += ' ' + attribute;\n\n\t\t// Boolean attributes should write attribute name, but without value.\n\t\t// Mere presence of attribute name is effective truthiness.\n\t\tif ( isBooleanAttribute ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( typeof value === 'string' ) {\n\t\t\tvalue = escapeAttribute( value );\n\t\t}\n\n\t\tresult += '=\"' + value + '\"';\n\t}\n\n\treturn result;\n}\n\n/**\n * Renders a style object as a string attribute value.\n *\n * @param {Object} style Style object.\n *\n * @return {string} Style attribute value.\n */\nexport function renderStyle( style ) {\n\t// Only generate from object, e.g. tolerate string value.\n\tif ( ! isPlainObject( style ) ) {\n\t\treturn style;\n\t}\n\n\tlet result;\n\n\tfor ( const property in style ) {\n\t\tconst value = style[ property ];\n\t\tif ( null === value || undefined === value ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( result ) {\n\t\t\tresult += ';';\n\t\t} else {\n\t\t\tresult = '';\n\t\t}\n\n\t\tconst normalName = getNormalStylePropertyName( property );\n\t\tconst normalValue = getNormalStylePropertyValue( property, value );\n\t\tresult += normalName + ':' + normalValue;\n\t}\n\n\treturn result;\n}\n\nexport default renderElement;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"camel-case\"), exports);\ntslib_1.__exportStar(require(\"capital-case\"), exports);\ntslib_1.__exportStar(require(\"constant-case\"), exports);\ntslib_1.__exportStar(require(\"dot-case\"), exports);\ntslib_1.__exportStar(require(\"header-case\"), exports);\ntslib_1.__exportStar(require(\"no-case\"), exports);\ntslib_1.__exportStar(require(\"param-case\"), exports);\ntslib_1.__exportStar(require(\"pascal-case\"), exports);\ntslib_1.__exportStar(require(\"path-case\"), exports);\ntslib_1.__exportStar(require(\"sentence-case\"), exports);\ntslib_1.__exportStar(require(\"snake-case\"), exports);\n//# sourceMappingURL=index.js.map","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.camelCase = exports.camelCaseTransformMerge = exports.camelCaseTransform = void 0;\nvar tslib_1 = require(\"tslib\");\nvar pascal_case_1 = require(\"pascal-case\");\nfunction camelCaseTransform(input, index) {\n if (index === 0)\n return input.toLowerCase();\n return pascal_case_1.pascalCaseTransform(input, index);\n}\nexports.camelCaseTransform = camelCaseTransform;\nfunction camelCaseTransformMerge(input, index) {\n if (index === 0)\n return input.toLowerCase();\n return pascal_case_1.pascalCaseTransformMerge(input);\n}\nexports.camelCaseTransformMerge = camelCaseTransformMerge;\nfunction camelCase(input, options) {\n if (options === void 0) { options = {}; }\n return pascal_case_1.pascalCase(input, tslib_1.__assign({ transform: camelCaseTransform }, options));\n}\nexports.camelCase = camelCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pascalCase = exports.pascalCaseTransformMerge = exports.pascalCaseTransform = void 0;\nvar tslib_1 = require(\"tslib\");\nvar no_case_1 = require(\"no-case\");\nfunction pascalCaseTransform(input, index) {\n var firstChar = input.charAt(0);\n var lowerChars = input.substr(1).toLowerCase();\n if (index > 0 && firstChar >= \"0\" && firstChar <= \"9\") {\n return \"_\" + firstChar + lowerChars;\n }\n return \"\" + firstChar.toUpperCase() + lowerChars;\n}\nexports.pascalCaseTransform = pascalCaseTransform;\nfunction pascalCaseTransformMerge(input) {\n return input.charAt(0).toUpperCase() + input.slice(1).toLowerCase();\n}\nexports.pascalCaseTransformMerge = pascalCaseTransformMerge;\nfunction pascalCase(input, options) {\n if (options === void 0) { options = {}; }\n return no_case_1.noCase(input, tslib_1.__assign({ delimiter: \"\", transform: pascalCaseTransform }, options));\n}\nexports.pascalCase = pascalCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.noCase = void 0;\nvar lower_case_1 = require(\"lower-case\");\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nvar DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n// Remove all non-word characters.\nvar DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nfunction noCase(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lower_case_1.lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? \" \" : _d;\n var result = replace(replace(input, splitRegexp, \"$1\\0$2\"), stripRegexp, \"\\0\");\n var start = 0;\n var end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\nexports.noCase = noCase;\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input, re, value) {\n if (re instanceof RegExp)\n return input.replace(re, value);\n return re.reduce(function (input, re) { return input.replace(re, value); }, input);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.lowerCase = exports.localeLowerCase = void 0;\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\nvar SUPPORTED_LOCALE = {\n tr: {\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n az: {\n regexp: /\\u0130/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n lt: {\n regexp: /\\u0049|\\u004A|\\u012E|\\u00CC|\\u00CD|\\u0128/g,\n map: {\n I: \"\\u0069\\u0307\",\n J: \"\\u006A\\u0307\",\n Į: \"\\u012F\\u0307\",\n Ì: \"\\u0069\\u0307\\u0300\",\n Í: \"\\u0069\\u0307\\u0301\",\n Ĩ: \"\\u0069\\u0307\\u0303\",\n },\n },\n};\n/**\n * Localized lower case.\n */\nfunction localeLowerCase(str, locale) {\n var lang = SUPPORTED_LOCALE[locale.toLowerCase()];\n if (lang)\n return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));\n return lowerCase(str);\n}\nexports.localeLowerCase = localeLowerCase;\n/**\n * Lower case as a function.\n */\nfunction lowerCase(str) {\n return str.toLowerCase();\n}\nexports.lowerCase = lowerCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.capitalCase = exports.capitalCaseTransform = void 0;\nvar tslib_1 = require(\"tslib\");\nvar no_case_1 = require(\"no-case\");\nvar upper_case_first_1 = require(\"upper-case-first\");\nfunction capitalCaseTransform(input) {\n return upper_case_first_1.upperCaseFirst(input.toLowerCase());\n}\nexports.capitalCaseTransform = capitalCaseTransform;\nfunction capitalCase(input, options) {\n if (options === void 0) { options = {}; }\n return no_case_1.noCase(input, tslib_1.__assign({ delimiter: \" \", transform: capitalCaseTransform }, options));\n}\nexports.capitalCase = capitalCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.upperCaseFirst = void 0;\n/**\n * Upper case the first character of an input string.\n */\nfunction upperCaseFirst(input) {\n return input.charAt(0).toUpperCase() + input.substr(1);\n}\nexports.upperCaseFirst = upperCaseFirst;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.constantCase = void 0;\nvar tslib_1 = require(\"tslib\");\nvar no_case_1 = require(\"no-case\");\nvar upper_case_1 = require(\"upper-case\");\nfunction constantCase(input, options) {\n if (options === void 0) { options = {}; }\n return no_case_1.noCase(input, tslib_1.__assign({ delimiter: \"_\", transform: upper_case_1.upperCase }, options));\n}\nexports.constantCase = constantCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.upperCase = exports.localeUpperCase = void 0;\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\nvar SUPPORTED_LOCALE = {\n tr: {\n regexp: /[\\u0069]/g,\n map: {\n i: \"\\u0130\",\n },\n },\n az: {\n regexp: /[\\u0069]/g,\n map: {\n i: \"\\u0130\",\n },\n },\n lt: {\n regexp: /[\\u0069\\u006A\\u012F]\\u0307|\\u0069\\u0307[\\u0300\\u0301\\u0303]/g,\n map: {\n i̇: \"\\u0049\",\n j̇: \"\\u004A\",\n į̇: \"\\u012E\",\n i̇̀: \"\\u00CC\",\n i̇́: \"\\u00CD\",\n i̇̃: \"\\u0128\",\n },\n },\n};\n/**\n * Localized upper case.\n */\nfunction localeUpperCase(str, locale) {\n var lang = SUPPORTED_LOCALE[locale.toLowerCase()];\n if (lang)\n return upperCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));\n return upperCase(str);\n}\nexports.localeUpperCase = localeUpperCase;\n/**\n * Upper case as a function.\n */\nfunction upperCase(str) {\n return str.toUpperCase();\n}\nexports.upperCase = upperCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dotCase = void 0;\nvar tslib_1 = require(\"tslib\");\nvar no_case_1 = require(\"no-case\");\nfunction dotCase(input, options) {\n if (options === void 0) { options = {}; }\n return no_case_1.noCase(input, tslib_1.__assign({ delimiter: \".\" }, options));\n}\nexports.dotCase = dotCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.headerCase = void 0;\nvar tslib_1 = require(\"tslib\");\nvar capital_case_1 = require(\"capital-case\");\nfunction headerCase(input, options) {\n if (options === void 0) { options = {}; }\n return capital_case_1.capitalCase(input, tslib_1.__assign({ delimiter: \"-\" }, options));\n}\nexports.headerCase = headerCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.paramCase = void 0;\nvar tslib_1 = require(\"tslib\");\nvar dot_case_1 = require(\"dot-case\");\nfunction paramCase(input, options) {\n if (options === void 0) { options = {}; }\n return dot_case_1.dotCase(input, tslib_1.__assign({ delimiter: \"-\" }, options));\n}\nexports.paramCase = paramCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pathCase = void 0;\nvar tslib_1 = require(\"tslib\");\nvar dot_case_1 = require(\"dot-case\");\nfunction pathCase(input, options) {\n if (options === void 0) { options = {}; }\n return dot_case_1.dotCase(input, tslib_1.__assign({ delimiter: \"/\" }, options));\n}\nexports.pathCase = pathCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sentenceCase = exports.sentenceCaseTransform = void 0;\nvar tslib_1 = require(\"tslib\");\nvar no_case_1 = require(\"no-case\");\nvar upper_case_first_1 = require(\"upper-case-first\");\nfunction sentenceCaseTransform(input, index) {\n var result = input.toLowerCase();\n if (index === 0)\n return upper_case_first_1.upperCaseFirst(result);\n return result;\n}\nexports.sentenceCaseTransform = sentenceCaseTransform;\nfunction sentenceCase(input, options) {\n if (options === void 0) { options = {}; }\n return no_case_1.noCase(input, tslib_1.__assign({ delimiter: \" \", transform: sentenceCaseTransform }, options));\n}\nexports.sentenceCase = sentenceCase;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.snakeCase = void 0;\nvar tslib_1 = require(\"tslib\");\nvar dot_case_1 = require(\"dot-case\");\nfunction snakeCase(input, options) {\n if (options === void 0) { options = {}; }\n return dot_case_1.dotCase(input, tslib_1.__assign({ delimiter: \"_\" }, options));\n}\nexports.snakeCase = snakeCase;\n//# sourceMappingURL=index.js.map","/**\n * Internal dependencies\n */\nimport __unstableEscapeGreaterThan from './escape-greater';\n\n/**\n * Regular expression matching invalid attribute names.\n *\n * \"Attribute names must consist of one or more characters other than controls,\n * U+0020 SPACE, U+0022 (\"), U+0027 ('), U+003E (>), U+002F (/), U+003D (=),\n * and noncharacters.\"\n *\n * @see https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n *\n * @type {RegExp}\n */\nconst REGEXP_INVALID_ATTRIBUTE_NAME = /[\\u007F-\\u009F \"'>/=\"\\uFDD0-\\uFDEF]/;\n\n/**\n * Returns a string with ampersands escaped. Note that this is an imperfect\n * implementation, where only ampersands which do not appear as a pattern of\n * named, decimal, or hexadecimal character references are escaped. Invalid\n * named references (i.e. ambiguous ampersand) are still permitted.\n *\n * @see https://w3c.github.io/html/syntax.html#character-references\n * @see https://w3c.github.io/html/syntax.html#ambiguous-ampersand\n * @see https://w3c.github.io/html/syntax.html#named-character-references\n *\n * @param {string} value Original string.\n *\n * @return {string} Escaped string.\n */\nexport function escapeAmpersand( value ) {\n\treturn value.replace( /&(?!([a-z0-9]+|#[0-9]+|#x[a-f0-9]+);)/gi, '&' );\n}\n\n/**\n * Returns a string with quotation marks replaced.\n *\n * @param {string} value Original string.\n *\n * @return {string} Escaped string.\n */\nexport function escapeQuotationMark( value ) {\n\treturn value.replace( /\"/g, '"' );\n}\n\n/**\n * Returns a string with less-than sign replaced.\n *\n * @param {string} value Original string.\n *\n * @return {string} Escaped string.\n */\nexport function escapeLessThan( value ) {\n\treturn value.replace( //g, '>' );\n}\n","/**\n * Internal dependencies\n */\nimport { Children, createElement } from './react';\n\n// Disable reason: JSDoc linter doesn't seem to parse the union (`&`) correctly.\n/** @typedef {{children: string} & import('react').ComponentPropsWithoutRef<'div'>} RawHTMLProps */\n\n/**\n * Component used as equivalent of Fragment with unescaped HTML, in cases where\n * it is desirable to render dangerous HTML without needing a wrapper element.\n * To preserve additional props, a `div` wrapper _will_ be created if any props\n * aside from `children` are passed.\n *\n * @param {RawHTMLProps} props Children should be a string of HTML or an array\n * of strings. Other props will be passed through\n * to the div wrapper.\n *\n * @return {JSX.Element} Dangerously-rendering component.\n */\nexport default function RawHTML( { children, ...props } ) {\n\tlet rawHtml = '';\n\n\t// Cast children as an array, and concatenate each element if it is a string.\n\tChildren.toArray( children ).forEach( ( child ) => {\n\t\tif ( typeof child === 'string' && child.trim() !== '' ) {\n\t\t\trawHtml += child;\n\t\t}\n\t} );\n\n\t// The `div` wrapper will be stripped by the `renderElement` serializer in\n\t// `./serialize.js` unless there are non-children props present.\n\treturn createElement( 'div', {\n\t\tdangerouslySetInnerHTML: { __html: rawHtml },\n\t\t...props,\n\t} );\n}\n","/**\n * External dependencies\n */\n// This library works as a polyfill for the global crypto.getRandomValues which is needed by `uuid` version 7.0.0\nimport 'react-native-get-random-values';\nimport jsdom from 'jsdom-jscore-rn';\nimport jsdomLevel1Core from 'jsdom-jscore-rn/lib/jsdom/level1/core';\nimport 'react-native-url-polyfill/auto';\n\n/**\n * Babel polyfills\n */\nimport 'core-js/features/array/flat-map';\n\n/**\n * WordPress dependencies\n */\nimport { nativeLoggingHook } from '@wordpress/react-native-bridge';\nimport { createElement } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\n/**\n * Import for side-effects: Patches for jsdom-jscore, mostly to implement\n * functions that are called from Gutenberg code paths, where a more full DOM\n * implementation is expected (in the browser environment).\n *\n * More details are available within the comments in the file.\n */\nimport './jsdom-patches';\n\nglobal.wp = {\n\telement: {\n\t\tcreateElement, // Load the element creation function, needed by Gutenberg-web.\n\t},\n};\n\nconst doc = jsdom.html( '', null, null );\n\n// Inject a simple version of the missing createHTMLDocument method that `hpq` depends on.\ndoc.implementation.createHTMLDocument = function ( html ) {\n\treturn jsdom.html( html, null, null );\n};\n\n// `hpq` depends on `document` be available globally.\nglobal.document = doc;\n\nif ( ! global.window.Node ) {\n\tglobal.window.Node = jsdomLevel1Core.dom.level1.core.Node;\n}\n\nif ( ! global.window.matchMedia ) {\n\tglobal.window.matchMedia = () => ( {\n\t\tmatches: false,\n\t\taddListener: () => {},\n\t\taddEventListener: () => {},\n\t\tremoveListener: () => {},\n\t\tremoveEventListener: () => {},\n\t} );\n}\n\nglobal.window.navigator.userAgent = global.window.navigator.userAgent ?? '';\n\n// Leverages existing console polyfill from react-native.\nglobal.nativeLoggingHook = nativeLoggingHook;\n","const RNGetRandomValues = require('react-native').NativeModules.RNGetRandomValues\nconst base64Decode = require('fast-base64-decode')\n\nclass TypeMismatchError extends Error {}\nclass QuotaExceededError extends Error {}\n\nlet warned = false\nfunction insecureRandomValues (array) {\n if (!warned) {\n console.warn('Using an insecure random number generator, this should only happen when running in a debugger without support for crypto.getRandomValues')\n warned = true\n }\n\n for (let i = 0, r; i < array.length; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000\n array[i] = (r >>> ((i & 0x03) << 3)) & 0xff\n }\n\n return array\n}\n\n/**\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Uint8ClampedArray} array\n */\nfunction getRandomValues (array) {\n if (!(array instanceof Int8Array || array instanceof Uint8Array || array instanceof Int16Array || array instanceof Uint16Array || array instanceof Int32Array || array instanceof Uint32Array || array instanceof Uint8ClampedArray)) {\n throw new TypeMismatchError('Expected an integer array')\n }\n\n if (array.byteLength > 65536) {\n throw new QuotaExceededError('Can only request a maximum of 65536 bytes')\n }\n\n // Calling RNGetRandomValues.getRandomBase64 in debug mode leads to the error\n // \"Calling synchronous methods on native modules is not supported in Chrome\".\n // So in that specific case we fall back to just using Math.random.\n if (__DEV__) {\n if (typeof global.nativeCallSyncHook === 'undefined') {\n return insecureRandomValues(array)\n }\n }\n\n base64Decode(RNGetRandomValues.getRandomBase64(array.byteLength), new Uint8Array(array.buffer, array.byteOffset, array.byteLength))\n\n return array\n}\n\nif (typeof global.crypto !== 'object') {\n global.crypto = {}\n}\n\nif (typeof global.crypto.getRandomValues !== 'function') {\n global.crypto.getRandomValues = getRandomValues\n}\n","'use strict'\n\nvar lookup = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 62, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 63, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]\n\nmodule.exports = function base64Decode (source, target) {\n var sourceLength = source.length\n var paddingLength = (source[sourceLength - 2] === '=' ? 2 : (source[sourceLength - 1] === '=' ? 1 : 0))\n\n var tmp\n var byteIndex = 0\n var baseLength = (sourceLength - paddingLength) & 0xfffffffc\n\n for (var i = 0; i < baseLength; i += 4) {\n tmp = (lookup[source.charCodeAt(i)] << 18) | (lookup[source.charCodeAt(i + 1)] << 12) | (lookup[source.charCodeAt(i + 2)] << 6) | (lookup[source.charCodeAt(i + 3)])\n\n target[byteIndex++] = (tmp >> 16) & 0xFF\n target[byteIndex++] = (tmp >> 8) & 0xFF\n target[byteIndex++] = (tmp) & 0xFF\n }\n\n if (paddingLength === 1) {\n tmp = (lookup[source.charCodeAt(i)] << 10) | (lookup[source.charCodeAt(i + 1)] << 4) | (lookup[source.charCodeAt(i + 2)] >> 2)\n\n target[byteIndex++] = (tmp >> 8) & 0xFF\n target[byteIndex++] = tmp & 0xFF\n }\n\n if (paddingLength === 2) {\n tmp = (lookup[source.charCodeAt(i)] << 2) | (lookup[source.charCodeAt(i + 1)] >> 4)\n\n target[byteIndex++] = tmp & 0xFF\n }\n}\n","var defineGetter = require('./jsdom/utils').defineGetter;\nvar dom = exports.dom = require('./jsdom/level3/index').dom;\n\nexports.defaultLevel = dom.level3.html;\nexports.browserAugmentation = require('./jsdom/browser/index').browserAugmentation;\n\nexports.debugMode = false;\n\ndefineGetter(exports, 'version', function() {\n return 1.0;\n});\n\nexports.level = function (level, feature) {\n if(!feature) {\n feature = 'core';\n }\n\n return require('./jsdom/level' + level + '/' + feature).dom['level' + level][feature];\n};\n\nexports.jsdom = function (html, level, options) {\n\n options = options || {};\n if(typeof level == 'string') {\n level = exports.level(level, 'html');\n } else {\n level = level || exports.defaultLevel;\n }\n\n var browser = exports.browserAugmentation(level, options),\n doc = browser.HTMLDocument ?\n new browser.HTMLDocument(options) :\n new browser.Document(options);\n\n require('./jsdom/selectors/index').applyQuerySelectorPrototype(level);\n\n if (typeof html === 'undefined' || html === null) {\n doc.write('');\n } else {\n doc.write(html + '');\n }\n\n if (doc.close && !options.deferClose) {\n doc.close();\n }\n\n return doc;\n};\n\nexports.html = function(html, level, options) {\n html += '';\n\n // TODO: cache a regex and use it here instead\n // or make the parser handle it\n var htmlLowered = html.toLowerCase();\n\n // body\n if (!~htmlLowered.indexOf('';\n }\n\n // html\n if (!~htmlLowered.indexOf('';\n }\n return exports.jsdom(html, level, options);\n};\n\nexports.env = function(html, level, callback) {\n if (arguments.length<3) {\n callback = level;\n level = null;\n }\n\n var doc = exports.html(html,level);\n callback(null, {document: doc});\n};\n","var path = require('../builtins').path;\n\n/**\n * Intercepts a method by replacing the prototype's implementation\n * with a wrapper that invokes the given interceptor instead.\n *\n * utils.intercept(core.Element, 'inserBefore',\n * function(_super, args, newChild, refChild) {\n * console.log('insertBefore', newChild, refChild);\n * return _super.apply(this, args);\n * }\n * );\n */\nexports.intercept = function(clazz, method, interceptor) {\n var proto = clazz.prototype,\n _super = proto[method],\n unwrapArgs = interceptor.length > 2;\n\n proto[method] = function() {\n if (unwrapArgs) {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(_super, arguments);\n return interceptor.apply(this, args);\n }\n else {\n return interceptor.call(this, _super, arguments);\n }\n };\n};\n\nexports.toFileUrl = function (fileName) {\n // Beyond just the `path.resolve`, this is mostly for the benefit of Windows,\n // where we need to convert '\\' to '/' and add an extra '/' prefix before the\n // drive letter.\n var pathname = path.resolve(process.cwd(), fileName).replace(/\\\\/g, '/');\n if (pathname[0] !== '/') {\n pathname = '/' + pathname;\n }\n\n return 'file://' + pathname;\n};\n\n/**\n * Define a setter on an object\n *\n * This method replaces any existing setter but leaves getters in place.\n *\n * - `object` {Object} the object to define the setter on\n * - `property` {String} the name of the setter\n * - `setterFn` {Function} the setter\n */\nexports.defineSetter = function defineSetter(object, property, setterFn) {\n var descriptor = Object.getOwnPropertyDescriptor(object, property) || {\n configurable: true,\n enumerable: true\n };\n\n descriptor.set = setterFn;\n\n Object.defineProperty(object, property, descriptor);\n};\n\n/**\n * Define a getter on an object\n *\n * This method replaces any existing getter but leaves setters in place.\n *\n * - `object` {Object} the object to define the getter on\n * - `property` {String} the name of the getter\n * - `getterFn` {Function} the getter\n */\nexports.defineGetter = function defineGetter(object, property, getterFn) {\n var descriptor = Object.getOwnPropertyDescriptor(object, property) || {\n configurable: true,\n enumerable: true\n };\n\n descriptor.get = getterFn;\n\n Object.defineProperty(object, property, descriptor);\n};\n\n/**\n * Create an object with the given prototype\n *\n * Optionally augment the created object.\n *\n * - `prototyp` {Object} the created object's prototype\n * - `[properties]` {Object} properties to attach to the created object\n */\nexports.createFrom = function createFrom(prototype, properties) {\n properties = properties || {};\n\n var descriptors = {};\n Object.getOwnPropertyNames(properties).forEach(function (name) {\n descriptors[name] = Object.getOwnPropertyDescriptor(properties, name);\n });\n\n return Object.create(prototype, descriptors);\n};\n\n/**\n * Create an inheritance relationship between two classes\n *\n * Optionally augment the inherited prototype.\n *\n * - `Superclass` {Function} the inherited class\n * - `Subclass` {Function} the inheriting class\n * - `[properties]` {Object} properties to attach to the inherited prototype\n */\nexports.inheritFrom = function inheritFrom(Superclass, Subclass, properties) {\n properties = properties || {};\n\n Object.defineProperty(properties, 'constructor', {\n value: Subclass,\n writable: true,\n configurable: true\n });\n\n Subclass.prototype = exports.createFrom(Superclass.prototype, properties);\n};\n","module.exports = {\n url: require('./builtins/url/url'),\n path: require('./builtins/path-browserify/index'),\n htmlparser2: require('htmlparser2-without-node-native'),\n nwmatcher: require('./builtins/nwmatcher/src/nwmatcher-noqsa'),\n cssom: require('./builtins/cssom/lib/index'),\n cssstyle: require('./builtins/cssstyle/lib/CSSStyleDeclaration')\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar punycode = require('../punycode/punycode');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a puny coded representation of \"domain\".\n // It only converts the part of the domain name that\n // has non ASCII characters. I.e. it dosent matter if\n // you call it with a domain that already is in ASCII.\n var domainArray = this.hostname.split('.');\n var newOut = [];\n for (var i = 0; i < domainArray.length; ++i) {\n var s = domainArray[i];\n newOut.push(s.match(/[^A-Za-z0-9_-]/) ?\n 'xn--' + punycode.encode(s) : s);\n }\n this.hostname = newOut.join('.');\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n Object.keys(this).forEach(function(k) {\n result[k] = this[k];\n }, this);\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n Object.keys(relative).forEach(function(k) {\n if (k !== 'protocol')\n result[k] = relative[k];\n });\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n Object.keys(relative).forEach(function(k) {\n result[k] = relative[k];\n });\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especialy happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!isNull(result.pathname) || !isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host) && (last === '.' || last === '..') ||\n last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last == '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especialy happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!isNull(result.pathname) || !isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n\nfunction isString(arg) {\n return typeof arg === \"string\";\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isNull(arg) {\n return arg === null;\n}\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","var Parser = require(\"./Parser.js\"),\n DomHandler = require(\"domhandler\");\n\nfunction defineProp(name, value){\n\tdelete module.exports[name];\n\tmodule.exports[name] = value;\n\treturn value;\n}\n\nmodule.exports = {\n\tParser: Parser,\n\tTokenizer: require(\"./Tokenizer.js\"),\n\tElementType: require(\"domelementtype\"),\n\tDomHandler: DomHandler,\n\tget FeedHandler(){\n\t\treturn defineProp(\"FeedHandler\", require(\"./FeedHandler.js\"));\n\t},\n\tget ProxyHandler(){\n\t\treturn defineProp(\"ProxyHandler\", require(\"./ProxyHandler.js\"));\n\t},\n\tget DomUtils(){\n\t\treturn defineProp(\"DomUtils\", require(\"domutils\"));\n\t},\n\tget CollectingHandler(){\n\t\treturn defineProp(\"CollectingHandler\", require(\"./CollectingHandler.js\"));\n\t},\n\t// For legacy support\n\tDefaultHandler: DomHandler,\n\tget RssHandler(){\n\t\treturn defineProp(\"RssHandler\", this.FeedHandler);\n\t},\n\t//helper methods\n\tparseDOM: function(data, options){\n\t\tvar handler = new DomHandler(options);\n\t\tnew Parser(handler, options).end(data);\n\t\treturn handler.dom;\n\t},\n\tparseFeed: function(feed, options){\n\t\tvar handler = new module.exports.FeedHandler(options);\n\t\tnew Parser(handler, options).end(feed);\n\t\treturn handler.dom;\n\t},\n\tcreateDomStream: function(cb, options, elementCb){\n\t\tvar handler = new DomHandler(cb, options, elementCb);\n\t\treturn new Parser(handler, options);\n\t},\n\t// List of all events that the parser emits\n\tEVENTS: { /* Format: eventname: number of arguments */\n\t\tattribute: 2,\n\t\tcdatastart: 0,\n\t\tcdataend: 0,\n\t\ttext: 1,\n\t\tprocessinginstruction: 2,\n\t\tcomment: 1,\n\t\tcommentend: 0,\n\t\tclosetag: 1,\n\t\topentag: 2,\n\t\topentagname: 1,\n\t\terror: 1,\n\t\tend: 0\n\t}\n};\n","var Tokenizer;\n\n/*\n\tOptions:\n\n\txmlMode: Disables the special behavior for script/style tags (false by default)\n\tlowerCaseAttributeNames: call .toLowerCase for each attribute name (true if xmlMode is `false`)\n\tlowerCaseTags: call .toLowerCase for each tag name (true if xmlMode is `false`)\n*/\n\n/*\n\tCallbacks:\n\n\toncdataend,\n\toncdatastart,\n\tonclosetag,\n\toncomment,\n\toncommentend,\n\tonerror,\n\tonopentag,\n\tonprocessinginstruction,\n\tonreset,\n\tontext\n*/\n\nvar formTags = {\n\tinput: true,\n\toption: true,\n\toptgroup: true,\n\tselect: true,\n\tbutton: true,\n\tdatalist: true,\n\ttextarea: true\n};\n\nvar openImpliesClose = {\n\ttr : { tr:true, th:true, td:true },\n\tth : { th:true },\n\ttd : { thead:true, th:true, td:true },\n\tbody : { head:true, link:true, script:true },\n\tli : { li:true },\n\tp : { p:true },\n\th1 : { p:true },\n\th2 : { p:true },\n\th3 : { p:true },\n\th4 : { p:true },\n\th5 : { p:true },\n\th6 : { p:true },\n\tselect : formTags,\n\tinput : formTags,\n\toutput : formTags,\n\tbutton : formTags,\n\tdatalist: formTags,\n\ttextarea: formTags,\n\toption : { option:true },\n\toptgroup: { optgroup:true }\n};\n\nvar voidElements = {\n\t__proto__: null,\n\tarea: true,\n\tbase: true,\n\tbasefont: true,\n\tbr: true,\n\tcol: true,\n\tcommand: true,\n\tembed: true,\n\tframe: true,\n\thr: true,\n\timg: true,\n\tinput: true,\n\tisindex: true,\n\tkeygen: true,\n\tlink: true,\n\tmeta: true,\n\tparam: true,\n\tsource: true,\n\ttrack: true,\n\twbr: true,\n\n\t//common self closing svg elements\n\tpath: true,\n\tcircle: true,\n\tellipse: true,\n\tline: true,\n\trect: true,\n\tuse: true,\n\tstop: true,\n\tpolyline: true,\n\tpolygon: true\n};\n\nvar re_nameEnd = /\\s|\\//;\n\nfunction Parser(cbs, options){\n\tthis._options = options || {};\n\tthis._cbs = cbs || {};\n\n\tthis._tagname = \"\";\n\tthis._attribname = \"\";\n\tthis._attribvalue = \"\";\n\tthis._attribs = null;\n\tthis._stack = [];\n\n\tthis.startIndex = 0;\n\tthis.endIndex = null;\n\n\tthis._lowerCaseTagNames = \"lowerCaseTags\" in this._options ?\n\t\t\t\t\t\t\t\t\t!!this._options.lowerCaseTags :\n\t\t\t\t\t\t\t\t\t!this._options.xmlMode;\n\tthis._lowerCaseAttributeNames = \"lowerCaseAttributeNames\" in this._options ?\n\t\t\t\t\t\t\t\t\t!!this._options.lowerCaseAttributeNames :\n\t\t\t\t\t\t\t\t\t!this._options.xmlMode;\n\n\tif(this._options.Tokenizer) {\n\t\tTokenizer = this._options.Tokenizer;\n\t} else {\n\t\tTokenizer = require(\"./Tokenizer.js\");\n\t}\n\tthis._tokenizer = new Tokenizer(this._options, this);\n\n\tif(this._cbs.onparserinit) this._cbs.onparserinit(this);\n}\n\nrequire(\"inherits\")(Parser, require(\"eventemitter2\"));\n\nParser.prototype._updatePosition = function(initialOffset){\n\tif(this.endIndex === null){\n\t\tif(this._tokenizer._sectionStart <= initialOffset){\n\t\t\tthis.startIndex = 0;\n\t\t} else {\n\t\t\tthis.startIndex = this._tokenizer._sectionStart - initialOffset;\n\t\t}\n\t}\n\telse this.startIndex = this.endIndex + 1;\n\tthis.endIndex = this._tokenizer.getAbsoluteIndex();\n};\n\n//Tokenizer event handlers\nParser.prototype.ontext = function(data){\n\tthis._updatePosition(1);\n\tthis.endIndex--;\n\n\tif(this._cbs.ontext) this._cbs.ontext(data);\n};\n\nParser.prototype.onopentagname = function(name){\n\tif(this._lowerCaseTagNames){\n\t\tname = name.toLowerCase();\n\t}\n\n\tthis._tagname = name;\n\n\tif(!this._options.xmlMode && name in openImpliesClose) {\n\t\tfor(\n\t\t\tvar el;\n\t\t\t(el = this._stack[this._stack.length - 1]) in openImpliesClose[name];\n\t\t\tthis.onclosetag(el)\n\t\t);\n\t}\n\n\tif(this._options.xmlMode || !(name in voidElements)){\n\t\tthis._stack.push(name);\n\t}\n\n\tif(this._cbs.onopentagname) this._cbs.onopentagname(name);\n\tif(this._cbs.onopentag) this._attribs = {};\n};\n\nParser.prototype.onopentagend = function(){\n\tthis._updatePosition(1);\n\n\tif(this._attribs){\n\t\tif(this._cbs.onopentag) this._cbs.onopentag(this._tagname, this._attribs);\n\t\tthis._attribs = null;\n\t}\n\n\tif(!this._options.xmlMode && this._cbs.onclosetag && this._tagname in voidElements){\n\t\tthis._cbs.onclosetag(this._tagname);\n\t}\n\n\tthis._tagname = \"\";\n};\n\nParser.prototype.onclosetag = function(name){\n\tthis._updatePosition(1);\n\n\tif(this._lowerCaseTagNames){\n\t\tname = name.toLowerCase();\n\t}\n\n\tif(this._stack.length && (!(name in voidElements) || this._options.xmlMode)){\n\t\tvar pos = this._stack.lastIndexOf(name);\n\t\tif(pos !== -1){\n\t\t\tif(this._cbs.onclosetag){\n\t\t\t\tpos = this._stack.length - pos;\n\t\t\t\twhile(pos--) this._cbs.onclosetag(this._stack.pop());\n\t\t\t}\n\t\t\telse this._stack.length = pos;\n\t\t} else if(name === \"p\" && !this._options.xmlMode){\n\t\t\tthis.onopentagname(name);\n\t\t\tthis._closeCurrentTag();\n\t\t}\n\t} else if(!this._options.xmlMode && (name === \"br\" || name === \"p\")){\n\t\tthis.onopentagname(name);\n\t\tthis._closeCurrentTag();\n\t}\n};\n\nParser.prototype.onselfclosingtag = function(){\n\tif(this._options.xmlMode || this._options.recognizeSelfClosing){\n\t\tthis._closeCurrentTag();\n\t} else {\n\t\tthis.onopentagend();\n\t}\n};\n\nParser.prototype._closeCurrentTag = function(){\n\tvar name = this._tagname;\n\n\tthis.onopentagend();\n\n\t//self-closing tags will be on the top of the stack\n\t//(cheaper check than in onclosetag)\n\tif(this._stack[this._stack.length - 1] === name){\n\t\tif(this._cbs.onclosetag){\n\t\t\tthis._cbs.onclosetag(name);\n\t\t}\n\t\tthis._stack.pop();\n\t}\n};\n\nParser.prototype.onattribname = function(name){\n\tif(this._lowerCaseAttributeNames){\n\t\tname = name.toLowerCase();\n\t}\n\tthis._attribname = name;\n};\n\nParser.prototype.onattribdata = function(value){\n\tthis._attribvalue += value;\n};\n\nParser.prototype.onattribend = function(){\n\tif(this._cbs.onattribute) this._cbs.onattribute(this._attribname, this._attribvalue);\n\tif(\n\t\tthis._attribs &&\n\t\t!Object.prototype.hasOwnProperty.call(this._attribs, this._attribname)\n\t){\n\t\tthis._attribs[this._attribname] = this._attribvalue;\n\t}\n\tthis._attribname = \"\";\n\tthis._attribvalue = \"\";\n};\n\nParser.prototype._getInstructionName = function(value){\n\tvar idx = value.search(re_nameEnd),\n\t name = idx < 0 ? value : value.substr(0, idx);\n\n\tif(this._lowerCaseTagNames){\n\t\tname = name.toLowerCase();\n\t}\n\n\treturn name;\n};\n\nParser.prototype.ondeclaration = function(value){\n\tif(this._cbs.onprocessinginstruction){\n\t\tvar name = this._getInstructionName(value);\n\t\tthis._cbs.onprocessinginstruction(\"!\" + name, \"!\" + value);\n\t}\n};\n\nParser.prototype.onprocessinginstruction = function(value){\n\tif(this._cbs.onprocessinginstruction){\n\t\tvar name = this._getInstructionName(value);\n\t\tthis._cbs.onprocessinginstruction(\"?\" + name, \"?\" + value);\n\t}\n};\n\nParser.prototype.oncomment = function(value){\n\tthis._updatePosition(4);\n\n\tif(this._cbs.oncomment) this._cbs.oncomment(value);\n\tif(this._cbs.oncommentend) this._cbs.oncommentend();\n};\n\nParser.prototype.oncdata = function(value){\n\tthis._updatePosition(1);\n\n\tif(this._options.xmlMode || this._options.recognizeCDATA){\n\t\tif(this._cbs.oncdatastart) this._cbs.oncdatastart();\n\t\tif(this._cbs.ontext) this._cbs.ontext(value);\n\t\tif(this._cbs.oncdataend) this._cbs.oncdataend();\n\t} else {\n\t\tthis.oncomment(\"[CDATA[\" + value + \"]]\");\n\t}\n};\n\nParser.prototype.onerror = function(err){\n\tif(this._cbs.onerror) this._cbs.onerror(err);\n};\n\nParser.prototype.onend = function(){\n\tif(this._cbs.onclosetag){\n\t\tfor(\n\t\t\tvar i = this._stack.length;\n\t\t\ti > 0;\n\t\t\tthis._cbs.onclosetag(this._stack[--i])\n\t\t);\n\t}\n\tif(this._cbs.onend) this._cbs.onend();\n};\n\n\n//Resets the parser to a blank state, ready to parse a new HTML document\nParser.prototype.reset = function(){\n\tif(this._cbs.onreset) this._cbs.onreset();\n\tthis._tokenizer.reset();\n\n\tthis._tagname = \"\";\n\tthis._attribname = \"\";\n\tthis._attribs = null;\n\tthis._stack = [];\n\n\tif(this._cbs.onparserinit) this._cbs.onparserinit(this);\n};\n\n//Parses a complete HTML document and pushes it to the handler\nParser.prototype.parseComplete = function(data){\n\tthis.reset();\n\tthis.end(data);\n};\n\nParser.prototype.write = function(chunk){\n\tthis._tokenizer.write(chunk);\n};\n\nParser.prototype.end = function(chunk){\n\tthis._tokenizer.end(chunk);\n};\n\nParser.prototype.pause = function(){\n\tthis._tokenizer.pause();\n};\n\nParser.prototype.resume = function(){\n\tthis._tokenizer.resume();\n};\n\n//alias for backwards compat\nParser.prototype.parseChunk = Parser.prototype.write;\nParser.prototype.done = Parser.prototype.end;\n\nmodule.exports = Parser;\n","module.exports = Tokenizer;\n\nvar decodeCodePoint = require(\"entities/lib/decode_codepoint.js\"),\n entityMap = require(\"entities/maps/entities.json\"),\n legacyMap = require(\"entities/maps/legacy.json\"),\n xmlMap = require(\"entities/maps/xml.json\"),\n\n i = 0,\n\n TEXT = i++,\n BEFORE_TAG_NAME = i++, //after <\n IN_TAG_NAME = i++,\n IN_SELF_CLOSING_TAG = i++,\n BEFORE_CLOSING_TAG_NAME = i++,\n IN_CLOSING_TAG_NAME = i++,\n AFTER_CLOSING_TAG_NAME = i++,\n\n //attributes\n BEFORE_ATTRIBUTE_NAME = i++,\n IN_ATTRIBUTE_NAME = i++,\n AFTER_ATTRIBUTE_NAME = i++,\n BEFORE_ATTRIBUTE_VALUE = i++,\n IN_ATTRIBUTE_VALUE_DQ = i++, // \"\n IN_ATTRIBUTE_VALUE_SQ = i++, // '\n IN_ATTRIBUTE_VALUE_NQ = i++,\n\n //declarations\n BEFORE_DECLARATION = i++, // !\n IN_DECLARATION = i++,\n\n //processing instructions\n IN_PROCESSING_INSTRUCTION = i++, // ?\n\n //comments\n BEFORE_COMMENT = i++,\n IN_COMMENT = i++,\n AFTER_COMMENT_1 = i++,\n AFTER_COMMENT_2 = i++,\n\n //cdata\n BEFORE_CDATA_1 = i++, // [\n BEFORE_CDATA_2 = i++, // C\n BEFORE_CDATA_3 = i++, // D\n BEFORE_CDATA_4 = i++, // A\n BEFORE_CDATA_5 = i++, // T\n BEFORE_CDATA_6 = i++, // A\n IN_CDATA = i++, // [\n AFTER_CDATA_1 = i++, // ]\n AFTER_CDATA_2 = i++, // ]\n\n //special tags\n BEFORE_SPECIAL = i++, //S\n BEFORE_SPECIAL_END = i++, //S\n\n BEFORE_SCRIPT_1 = i++, //C\n BEFORE_SCRIPT_2 = i++, //R\n BEFORE_SCRIPT_3 = i++, //I\n BEFORE_SCRIPT_4 = i++, //P\n BEFORE_SCRIPT_5 = i++, //T\n AFTER_SCRIPT_1 = i++, //C\n AFTER_SCRIPT_2 = i++, //R\n AFTER_SCRIPT_3 = i++, //I\n AFTER_SCRIPT_4 = i++, //P\n AFTER_SCRIPT_5 = i++, //T\n\n BEFORE_STYLE_1 = i++, //T\n BEFORE_STYLE_2 = i++, //Y\n BEFORE_STYLE_3 = i++, //L\n BEFORE_STYLE_4 = i++, //E\n AFTER_STYLE_1 = i++, //T\n AFTER_STYLE_2 = i++, //Y\n AFTER_STYLE_3 = i++, //L\n AFTER_STYLE_4 = i++, //E\n\n BEFORE_ENTITY = i++, //&\n BEFORE_NUMERIC_ENTITY = i++, //#\n IN_NAMED_ENTITY = i++,\n IN_NUMERIC_ENTITY = i++,\n IN_HEX_ENTITY = i++, //X\n\n j = 0,\n\n SPECIAL_NONE = j++,\n SPECIAL_SCRIPT = j++,\n SPECIAL_STYLE = j++;\n\nfunction whitespace(c){\n\treturn c === \" \" || c === \"\\n\" || c === \"\\t\" || c === \"\\f\" || c === \"\\r\";\n}\n\nfunction characterState(char, SUCCESS){\n\treturn function(c){\n\t\tif(c === char) this._state = SUCCESS;\n\t};\n}\n\nfunction ifElseState(upper, SUCCESS, FAILURE){\n\tvar lower = upper.toLowerCase();\n\n\tif(upper === lower){\n\t\treturn function(c){\n\t\t\tif(c === lower){\n\t\t\t\tthis._state = SUCCESS;\n\t\t\t} else {\n\t\t\t\tthis._state = FAILURE;\n\t\t\t\tthis._index--;\n\t\t\t}\n\t\t};\n\t} else {\n\t\treturn function(c){\n\t\t\tif(c === lower || c === upper){\n\t\t\t\tthis._state = SUCCESS;\n\t\t\t} else {\n\t\t\t\tthis._state = FAILURE;\n\t\t\t\tthis._index--;\n\t\t\t}\n\t\t};\n\t}\n}\n\nfunction consumeSpecialNameChar(upper, NEXT_STATE){\n\tvar lower = upper.toLowerCase();\n\n\treturn function(c){\n\t\tif(c === lower || c === upper){\n\t\t\tthis._state = NEXT_STATE;\n\t\t} else {\n\t\t\tthis._state = IN_TAG_NAME;\n\t\t\tthis._index--; //consume the token again\n\t\t}\n\t};\n}\n\nfunction Tokenizer(options, cbs){\n\tthis._state = TEXT;\n\tthis._buffer = \"\";\n\tthis._sectionStart = 0;\n\tthis._index = 0;\n\tthis._bufferOffset = 0; //chars removed from _buffer\n\tthis._baseState = TEXT;\n\tthis._special = SPECIAL_NONE;\n\tthis._cbs = cbs;\n\tthis._running = true;\n\tthis._ended = false;\n\tthis._xmlMode = !!(options && options.xmlMode);\n\tthis._decodeEntities = !!(options && options.decodeEntities);\n}\n\nTokenizer.prototype._stateText = function(c){\n\tif(c === \"<\"){\n\t\tif(this._index > this._sectionStart){\n\t\t\tthis._cbs.ontext(this._getSection());\n\t\t}\n\t\tthis._state = BEFORE_TAG_NAME;\n\t\tthis._sectionStart = this._index;\n\t} else if(this._decodeEntities && this._special === SPECIAL_NONE && c === \"&\"){\n\t\tif(this._index > this._sectionStart){\n\t\t\tthis._cbs.ontext(this._getSection());\n\t\t}\n\t\tthis._baseState = TEXT;\n\t\tthis._state = BEFORE_ENTITY;\n\t\tthis._sectionStart = this._index;\n\t}\n};\n\nTokenizer.prototype._stateBeforeTagName = function(c){\n\tif(c === \"/\"){\n\t\tthis._state = BEFORE_CLOSING_TAG_NAME;\n\t} else if(c === \"<\"){\n\t\tthis._cbs.ontext(this._getSection());\n\t\tthis._sectionStart = this._index;\n\t} else if(c === \">\" || this._special !== SPECIAL_NONE || whitespace(c)) {\n\t\tthis._state = TEXT;\n\t} else if(c === \"!\"){\n\t\tthis._state = BEFORE_DECLARATION;\n\t\tthis._sectionStart = this._index + 1;\n\t} else if(c === \"?\"){\n\t\tthis._state = IN_PROCESSING_INSTRUCTION;\n\t\tthis._sectionStart = this._index + 1;\n\t} else {\n\t\tthis._state = (!this._xmlMode && (c === \"s\" || c === \"S\")) ?\n\t\t\t\t\t\tBEFORE_SPECIAL : IN_TAG_NAME;\n\t\tthis._sectionStart = this._index;\n\t}\n};\n\nTokenizer.prototype._stateInTagName = function(c){\n\tif(c === \"/\" || c === \">\" || whitespace(c)){\n\t\tthis._emitToken(\"onopentagname\");\n\t\tthis._state = BEFORE_ATTRIBUTE_NAME;\n\t\tthis._index--;\n\t}\n};\n\nTokenizer.prototype._stateBeforeCloseingTagName = function(c){\n\tif(whitespace(c));\n\telse if(c === \">\"){\n\t\tthis._state = TEXT;\n\t} else if(this._special !== SPECIAL_NONE){\n\t\tif(c === \"s\" || c === \"S\"){\n\t\t\tthis._state = BEFORE_SPECIAL_END;\n\t\t} else {\n\t\t\tthis._state = TEXT;\n\t\t\tthis._index--;\n\t\t}\n\t} else {\n\t\tthis._state = IN_CLOSING_TAG_NAME;\n\t\tthis._sectionStart = this._index;\n\t}\n};\n\nTokenizer.prototype._stateInCloseingTagName = function(c){\n\tif(c === \">\" || whitespace(c)){\n\t\tthis._emitToken(\"onclosetag\");\n\t\tthis._state = AFTER_CLOSING_TAG_NAME;\n\t\tthis._index--;\n\t}\n};\n\nTokenizer.prototype._stateAfterCloseingTagName = function(c){\n\t//skip everything until \">\"\n\tif(c === \">\"){\n\t\tthis._state = TEXT;\n\t\tthis._sectionStart = this._index + 1;\n\t}\n};\n\nTokenizer.prototype._stateBeforeAttributeName = function(c){\n\tif(c === \">\"){\n\t\tthis._cbs.onopentagend();\n\t\tthis._state = TEXT;\n\t\tthis._sectionStart = this._index + 1;\n\t} else if(c === \"/\"){\n\t\tthis._state = IN_SELF_CLOSING_TAG;\n\t} else if(!whitespace(c)){\n\t\tthis._state = IN_ATTRIBUTE_NAME;\n\t\tthis._sectionStart = this._index;\n\t}\n};\n\nTokenizer.prototype._stateInSelfClosingTag = function(c){\n\tif(c === \">\"){\n\t\tthis._cbs.onselfclosingtag();\n\t\tthis._state = TEXT;\n\t\tthis._sectionStart = this._index + 1;\n\t} else if(!whitespace(c)){\n\t\tthis._state = BEFORE_ATTRIBUTE_NAME;\n\t\tthis._index--;\n\t}\n};\n\nTokenizer.prototype._stateInAttributeName = function(c){\n\tif(c === \"=\" || c === \"/\" || c === \">\" || whitespace(c)){\n\t\tthis._cbs.onattribname(this._getSection());\n\t\tthis._sectionStart = -1;\n\t\tthis._state = AFTER_ATTRIBUTE_NAME;\n\t\tthis._index--;\n\t}\n};\n\nTokenizer.prototype._stateAfterAttributeName = function(c){\n\tif(c === \"=\"){\n\t\tthis._state = BEFORE_ATTRIBUTE_VALUE;\n\t} else if(c === \"/\" || c === \">\"){\n\t\tthis._cbs.onattribend();\n\t\tthis._state = BEFORE_ATTRIBUTE_NAME;\n\t\tthis._index--;\n\t} else if(!whitespace(c)){\n\t\tthis._cbs.onattribend();\n\t\tthis._state = IN_ATTRIBUTE_NAME;\n\t\tthis._sectionStart = this._index;\n\t}\n};\n\nTokenizer.prototype._stateBeforeAttributeValue = function(c){\n\tif(c === \"\\\"\"){\n\t\tthis._state = IN_ATTRIBUTE_VALUE_DQ;\n\t\tthis._sectionStart = this._index + 1;\n\t} else if(c === \"'\"){\n\t\tthis._state = IN_ATTRIBUTE_VALUE_SQ;\n\t\tthis._sectionStart = this._index + 1;\n\t} else if(!whitespace(c)){\n\t\tthis._state = IN_ATTRIBUTE_VALUE_NQ;\n\t\tthis._sectionStart = this._index;\n\t\tthis._index--; //reconsume token\n\t}\n};\n\nTokenizer.prototype._stateInAttributeValueDoubleQuotes = function(c){\n\tif(c === \"\\\"\"){\n\t\tthis._emitToken(\"onattribdata\");\n\t\tthis._cbs.onattribend();\n\t\tthis._state = BEFORE_ATTRIBUTE_NAME;\n\t} else if(this._decodeEntities && c === \"&\"){\n\t\tthis._emitToken(\"onattribdata\");\n\t\tthis._baseState = this._state;\n\t\tthis._state = BEFORE_ENTITY;\n\t\tthis._sectionStart = this._index;\n\t}\n};\n\nTokenizer.prototype._stateInAttributeValueSingleQuotes = function(c){\n\tif(c === \"'\"){\n\t\tthis._emitToken(\"onattribdata\");\n\t\tthis._cbs.onattribend();\n\t\tthis._state = BEFORE_ATTRIBUTE_NAME;\n\t} else if(this._decodeEntities && c === \"&\"){\n\t\tthis._emitToken(\"onattribdata\");\n\t\tthis._baseState = this._state;\n\t\tthis._state = BEFORE_ENTITY;\n\t\tthis._sectionStart = this._index;\n\t}\n};\n\nTokenizer.prototype._stateInAttributeValueNoQuotes = function(c){\n\tif(whitespace(c) || c === \">\"){\n\t\tthis._emitToken(\"onattribdata\");\n\t\tthis._cbs.onattribend();\n\t\tthis._state = BEFORE_ATTRIBUTE_NAME;\n\t\tthis._index--;\n\t} else if(this._decodeEntities && c === \"&\"){\n\t\tthis._emitToken(\"onattribdata\");\n\t\tthis._baseState = this._state;\n\t\tthis._state = BEFORE_ENTITY;\n\t\tthis._sectionStart = this._index;\n\t}\n};\n\nTokenizer.prototype._stateBeforeDeclaration = function(c){\n\tthis._state = c === \"[\" ? BEFORE_CDATA_1 :\n\t\t\t\t\tc === \"-\" ? BEFORE_COMMENT :\n\t\t\t\t\t\tIN_DECLARATION;\n};\n\nTokenizer.prototype._stateInDeclaration = function(c){\n\tif(c === \">\"){\n\t\tthis._cbs.ondeclaration(this._getSection());\n\t\tthis._state = TEXT;\n\t\tthis._sectionStart = this._index + 1;\n\t}\n};\n\nTokenizer.prototype._stateInProcessingInstruction = function(c){\n\tif(c === \">\"){\n\t\tthis._cbs.onprocessinginstruction(this._getSection());\n\t\tthis._state = TEXT;\n\t\tthis._sectionStart = this._index + 1;\n\t}\n};\n\nTokenizer.prototype._stateBeforeComment = function(c){\n\tif(c === \"-\"){\n\t\tthis._state = IN_COMMENT;\n\t\tthis._sectionStart = this._index + 1;\n\t} else {\n\t\tthis._state = IN_DECLARATION;\n\t}\n};\n\nTokenizer.prototype._stateInComment = function(c){\n\tif(c === \"-\") this._state = AFTER_COMMENT_1;\n};\n\nTokenizer.prototype._stateAfterComment1 = function(c){\n\tif(c === \"-\"){\n\t\tthis._state = AFTER_COMMENT_2;\n\t} else {\n\t\tthis._state = IN_COMMENT;\n\t}\n};\n\nTokenizer.prototype._stateAfterComment2 = function(c){\n\tif(c === \">\"){\n\t\t//remove 2 trailing chars\n\t\tthis._cbs.oncomment(this._buffer.substring(this._sectionStart, this._index - 2));\n\t\tthis._state = TEXT;\n\t\tthis._sectionStart = this._index + 1;\n\t} else if(c !== \"-\"){\n\t\tthis._state = IN_COMMENT;\n\t}\n\t// else: stay in AFTER_COMMENT_2 (`--->`)\n};\n\nTokenizer.prototype._stateBeforeCdata1 = ifElseState(\"C\", BEFORE_CDATA_2, IN_DECLARATION);\nTokenizer.prototype._stateBeforeCdata2 = ifElseState(\"D\", BEFORE_CDATA_3, IN_DECLARATION);\nTokenizer.prototype._stateBeforeCdata3 = ifElseState(\"A\", BEFORE_CDATA_4, IN_DECLARATION);\nTokenizer.prototype._stateBeforeCdata4 = ifElseState(\"T\", BEFORE_CDATA_5, IN_DECLARATION);\nTokenizer.prototype._stateBeforeCdata5 = ifElseState(\"A\", BEFORE_CDATA_6, IN_DECLARATION);\n\nTokenizer.prototype._stateBeforeCdata6 = function(c){\n\tif(c === \"[\"){\n\t\tthis._state = IN_CDATA;\n\t\tthis._sectionStart = this._index + 1;\n\t} else {\n\t\tthis._state = IN_DECLARATION;\n\t\tthis._index--;\n\t}\n};\n\nTokenizer.prototype._stateInCdata = function(c){\n\tif(c === \"]\") this._state = AFTER_CDATA_1;\n};\n\nTokenizer.prototype._stateAfterCdata1 = characterState(\"]\", AFTER_CDATA_2);\n\nTokenizer.prototype._stateAfterCdata2 = function(c){\n\tif(c === \">\"){\n\t\t//remove 2 trailing chars\n\t\tthis._cbs.oncdata(this._buffer.substring(this._sectionStart, this._index - 2));\n\t\tthis._state = TEXT;\n\t\tthis._sectionStart = this._index + 1;\n\t} else if(c !== \"]\") {\n\t\tthis._state = IN_CDATA;\n\t}\n\t//else: stay in AFTER_CDATA_2 (`]]]>`)\n};\n\nTokenizer.prototype._stateBeforeSpecial = function(c){\n\tif(c === \"c\" || c === \"C\"){\n\t\tthis._state = BEFORE_SCRIPT_1;\n\t} else if(c === \"t\" || c === \"T\"){\n\t\tthis._state = BEFORE_STYLE_1;\n\t} else {\n\t\tthis._state = IN_TAG_NAME;\n\t\tthis._index--; //consume the token again\n\t}\n};\n\nTokenizer.prototype._stateBeforeSpecialEnd = function(c){\n\tif(this._special === SPECIAL_SCRIPT && (c === \"c\" || c === \"C\")){\n\t\tthis._state = AFTER_SCRIPT_1;\n\t} else if(this._special === SPECIAL_STYLE && (c === \"t\" || c === \"T\")){\n\t\tthis._state = AFTER_STYLE_1;\n\t}\n\telse this._state = TEXT;\n};\n\nTokenizer.prototype._stateBeforeScript1 = consumeSpecialNameChar(\"R\", BEFORE_SCRIPT_2);\nTokenizer.prototype._stateBeforeScript2 = consumeSpecialNameChar(\"I\", BEFORE_SCRIPT_3);\nTokenizer.prototype._stateBeforeScript3 = consumeSpecialNameChar(\"P\", BEFORE_SCRIPT_4);\nTokenizer.prototype._stateBeforeScript4 = consumeSpecialNameChar(\"T\", BEFORE_SCRIPT_5);\n\nTokenizer.prototype._stateBeforeScript5 = function(c){\n\tif(c === \"/\" || c === \">\" || whitespace(c)){\n\t\tthis._special = SPECIAL_SCRIPT;\n\t}\n\tthis._state = IN_TAG_NAME;\n\tthis._index--; //consume the token again\n};\n\nTokenizer.prototype._stateAfterScript1 = ifElseState(\"R\", AFTER_SCRIPT_2, TEXT);\nTokenizer.prototype._stateAfterScript2 = ifElseState(\"I\", AFTER_SCRIPT_3, TEXT);\nTokenizer.prototype._stateAfterScript3 = ifElseState(\"P\", AFTER_SCRIPT_4, TEXT);\nTokenizer.prototype._stateAfterScript4 = ifElseState(\"T\", AFTER_SCRIPT_5, TEXT);\n\nTokenizer.prototype._stateAfterScript5 = function(c){\n\tif(c === \">\" || whitespace(c)){\n\t\tthis._special = SPECIAL_NONE;\n\t\tthis._state = IN_CLOSING_TAG_NAME;\n\t\tthis._sectionStart = this._index - 6;\n\t\tthis._index--; //reconsume the token\n\t}\n\telse this._state = TEXT;\n};\n\nTokenizer.prototype._stateBeforeStyle1 = consumeSpecialNameChar(\"Y\", BEFORE_STYLE_2);\nTokenizer.prototype._stateBeforeStyle2 = consumeSpecialNameChar(\"L\", BEFORE_STYLE_3);\nTokenizer.prototype._stateBeforeStyle3 = consumeSpecialNameChar(\"E\", BEFORE_STYLE_4);\n\nTokenizer.prototype._stateBeforeStyle4 = function(c){\n\tif(c === \"/\" || c === \">\" || whitespace(c)){\n\t\tthis._special = SPECIAL_STYLE;\n\t}\n\tthis._state = IN_TAG_NAME;\n\tthis._index--; //consume the token again\n};\n\nTokenizer.prototype._stateAfterStyle1 = ifElseState(\"Y\", AFTER_STYLE_2, TEXT);\nTokenizer.prototype._stateAfterStyle2 = ifElseState(\"L\", AFTER_STYLE_3, TEXT);\nTokenizer.prototype._stateAfterStyle3 = ifElseState(\"E\", AFTER_STYLE_4, TEXT);\n\nTokenizer.prototype._stateAfterStyle4 = function(c){\n\tif(c === \">\" || whitespace(c)){\n\t\tthis._special = SPECIAL_NONE;\n\t\tthis._state = IN_CLOSING_TAG_NAME;\n\t\tthis._sectionStart = this._index - 5;\n\t\tthis._index--; //reconsume the token\n\t}\n\telse this._state = TEXT;\n};\n\nTokenizer.prototype._stateBeforeEntity = ifElseState(\"#\", BEFORE_NUMERIC_ENTITY, IN_NAMED_ENTITY);\nTokenizer.prototype._stateBeforeNumericEntity = ifElseState(\"X\", IN_HEX_ENTITY, IN_NUMERIC_ENTITY);\n\n//for entities terminated with a semicolon\nTokenizer.prototype._parseNamedEntityStrict = function(){\n\t//offset = 1\n\tif(this._sectionStart + 1 < this._index){\n\t\tvar entity = this._buffer.substring(this._sectionStart + 1, this._index),\n\t\t map = this._xmlMode ? xmlMap : entityMap;\n\n\t\tif(map.hasOwnProperty(entity)){\n\t\t\tthis._emitPartial(map[entity]);\n\t\t\tthis._sectionStart = this._index + 1;\n\t\t}\n\t}\n};\n\n\n//parses legacy entities (without trailing semicolon)\nTokenizer.prototype._parseLegacyEntity = function(){\n\tvar start = this._sectionStart + 1,\n\t limit = this._index - start;\n\n\tif(limit > 6) limit = 6; //the max length of legacy entities is 6\n\n\twhile(limit >= 2){ //the min length of legacy entities is 2\n\t\tvar entity = this._buffer.substr(start, limit);\n\n\t\tif(legacyMap.hasOwnProperty(entity)){\n\t\t\tthis._emitPartial(legacyMap[entity]);\n\t\t\tthis._sectionStart += limit + 1;\n\t\t\treturn;\n\t\t} else {\n\t\t\tlimit--;\n\t\t}\n\t}\n};\n\nTokenizer.prototype._stateInNamedEntity = function(c){\n\tif(c === \";\"){\n\t\tthis._parseNamedEntityStrict();\n\t\tif(this._sectionStart + 1 < this._index && !this._xmlMode){\n\t\t\tthis._parseLegacyEntity();\n\t\t}\n\t\tthis._state = this._baseState;\n\t} else if((c < \"a\" || c > \"z\") && (c < \"A\" || c > \"Z\") && (c < \"0\" || c > \"9\")){\n\t\tif(this._xmlMode);\n\t\telse if(this._sectionStart + 1 === this._index);\n\t\telse if(this._baseState !== TEXT){\n\t\t\tif(c !== \"=\"){\n\t\t\t\tthis._parseNamedEntityStrict();\n\t\t\t}\n\t\t} else {\n\t\t\tthis._parseLegacyEntity();\n\t\t}\n\n\t\tthis._state = this._baseState;\n\t\tthis._index--;\n\t}\n};\n\nTokenizer.prototype._decodeNumericEntity = function(offset, base){\n\tvar sectionStart = this._sectionStart + offset;\n\n\tif(sectionStart !== this._index){\n\t\t//parse entity\n\t\tvar entity = this._buffer.substring(sectionStart, this._index);\n\t\tvar parsed = parseInt(entity, base);\n\n\t\tthis._emitPartial(decodeCodePoint(parsed));\n\t\tthis._sectionStart = this._index;\n\t} else {\n\t\tthis._sectionStart--;\n\t}\n\n\tthis._state = this._baseState;\n};\n\nTokenizer.prototype._stateInNumericEntity = function(c){\n\tif(c === \";\"){\n\t\tthis._decodeNumericEntity(2, 10);\n\t\tthis._sectionStart++;\n\t} else if(c < \"0\" || c > \"9\"){\n\t\tif(!this._xmlMode){\n\t\t\tthis._decodeNumericEntity(2, 10);\n\t\t} else {\n\t\t\tthis._state = this._baseState;\n\t\t}\n\t\tthis._index--;\n\t}\n};\n\nTokenizer.prototype._stateInHexEntity = function(c){\n\tif(c === \";\"){\n\t\tthis._decodeNumericEntity(3, 16);\n\t\tthis._sectionStart++;\n\t} else if((c < \"a\" || c > \"f\") && (c < \"A\" || c > \"F\") && (c < \"0\" || c > \"9\")){\n\t\tif(!this._xmlMode){\n\t\t\tthis._decodeNumericEntity(3, 16);\n\t\t} else {\n\t\t\tthis._state = this._baseState;\n\t\t}\n\t\tthis._index--;\n\t}\n};\n\nTokenizer.prototype._cleanup = function (){\n\tif(this._sectionStart < 0){\n\t\tthis._buffer = \"\";\n\t\tthis._bufferOffset += this._index;\n\t\tthis._index = 0;\n\t} else if(this._running){\n\t\tif(this._state === TEXT){\n\t\t\tif(this._sectionStart !== this._index){\n\t\t\t\tthis._cbs.ontext(this._buffer.substr(this._sectionStart));\n\t\t\t}\n\t\t\tthis._buffer = \"\";\n\t\t\tthis._bufferOffset += this._index;\n\t\t\tthis._index = 0;\n\t\t} else if(this._sectionStart === this._index){\n\t\t\t//the section just started\n\t\t\tthis._buffer = \"\";\n\t\t\tthis._bufferOffset += this._index;\n\t\t\tthis._index = 0;\n\t\t} else {\n\t\t\t//remove everything unnecessary\n\t\t\tthis._buffer = this._buffer.substr(this._sectionStart);\n\t\t\tthis._index -= this._sectionStart;\n\t\t\tthis._bufferOffset += this._sectionStart;\n\t\t}\n\n\t\tthis._sectionStart = 0;\n\t}\n};\n\n//TODO make events conditional\nTokenizer.prototype.write = function(chunk){\n\tif(this._ended) this._cbs.onerror(Error(\".write() after done!\"));\n\n\tthis._buffer += chunk;\n\tthis._parse();\n};\n\nTokenizer.prototype._parse = function(){\n\twhile(this._index < this._buffer.length && this._running){\n\t\tvar c = this._buffer.charAt(this._index);\n\t\tif(this._state === TEXT) {\n\t\t\tthis._stateText(c);\n\t\t} else if(this._state === BEFORE_TAG_NAME){\n\t\t\tthis._stateBeforeTagName(c);\n\t\t} else if(this._state === IN_TAG_NAME) {\n\t\t\tthis._stateInTagName(c);\n\t\t} else if(this._state === BEFORE_CLOSING_TAG_NAME){\n\t\t\tthis._stateBeforeCloseingTagName(c);\n\t\t} else if(this._state === IN_CLOSING_TAG_NAME){\n\t\t\tthis._stateInCloseingTagName(c);\n\t\t} else if(this._state === AFTER_CLOSING_TAG_NAME){\n\t\t\tthis._stateAfterCloseingTagName(c);\n\t\t} else if(this._state === IN_SELF_CLOSING_TAG){\n\t\t\tthis._stateInSelfClosingTag(c);\n\t\t}\n\n\t\t/*\n\t\t*\tattributes\n\t\t*/\n\t\telse if(this._state === BEFORE_ATTRIBUTE_NAME){\n\t\t\tthis._stateBeforeAttributeName(c);\n\t\t} else if(this._state === IN_ATTRIBUTE_NAME){\n\t\t\tthis._stateInAttributeName(c);\n\t\t} else if(this._state === AFTER_ATTRIBUTE_NAME){\n\t\t\tthis._stateAfterAttributeName(c);\n\t\t} else if(this._state === BEFORE_ATTRIBUTE_VALUE){\n\t\t\tthis._stateBeforeAttributeValue(c);\n\t\t} else if(this._state === IN_ATTRIBUTE_VALUE_DQ){\n\t\t\tthis._stateInAttributeValueDoubleQuotes(c);\n\t\t} else if(this._state === IN_ATTRIBUTE_VALUE_SQ){\n\t\t\tthis._stateInAttributeValueSingleQuotes(c);\n\t\t} else if(this._state === IN_ATTRIBUTE_VALUE_NQ){\n\t\t\tthis._stateInAttributeValueNoQuotes(c);\n\t\t}\n\n\t\t/*\n\t\t*\tdeclarations\n\t\t*/\n\t\telse if(this._state === BEFORE_DECLARATION){\n\t\t\tthis._stateBeforeDeclaration(c);\n\t\t} else if(this._state === IN_DECLARATION){\n\t\t\tthis._stateInDeclaration(c);\n\t\t}\n\n\t\t/*\n\t\t*\tprocessing instructions\n\t\t*/\n\t\telse if(this._state === IN_PROCESSING_INSTRUCTION){\n\t\t\tthis._stateInProcessingInstruction(c);\n\t\t}\n\n\t\t/*\n\t\t*\tcomments\n\t\t*/\n\t\telse if(this._state === BEFORE_COMMENT){\n\t\t\tthis._stateBeforeComment(c);\n\t\t} else if(this._state === IN_COMMENT){\n\t\t\tthis._stateInComment(c);\n\t\t} else if(this._state === AFTER_COMMENT_1){\n\t\t\tthis._stateAfterComment1(c);\n\t\t} else if(this._state === AFTER_COMMENT_2){\n\t\t\tthis._stateAfterComment2(c);\n\t\t}\n\n\t\t/*\n\t\t*\tcdata\n\t\t*/\n\t\telse if(this._state === BEFORE_CDATA_1){\n\t\t\tthis._stateBeforeCdata1(c);\n\t\t} else if(this._state === BEFORE_CDATA_2){\n\t\t\tthis._stateBeforeCdata2(c);\n\t\t} else if(this._state === BEFORE_CDATA_3){\n\t\t\tthis._stateBeforeCdata3(c);\n\t\t} else if(this._state === BEFORE_CDATA_4){\n\t\t\tthis._stateBeforeCdata4(c);\n\t\t} else if(this._state === BEFORE_CDATA_5){\n\t\t\tthis._stateBeforeCdata5(c);\n\t\t} else if(this._state === BEFORE_CDATA_6){\n\t\t\tthis._stateBeforeCdata6(c);\n\t\t} else if(this._state === IN_CDATA){\n\t\t\tthis._stateInCdata(c);\n\t\t} else if(this._state === AFTER_CDATA_1){\n\t\t\tthis._stateAfterCdata1(c);\n\t\t} else if(this._state === AFTER_CDATA_2){\n\t\t\tthis._stateAfterCdata2(c);\n\t\t}\n\n\t\t/*\n\t\t* special tags\n\t\t*/\n\t\telse if(this._state === BEFORE_SPECIAL){\n\t\t\tthis._stateBeforeSpecial(c);\n\t\t} else if(this._state === BEFORE_SPECIAL_END){\n\t\t\tthis._stateBeforeSpecialEnd(c);\n\t\t}\n\n\t\t/*\n\t\t* script\n\t\t*/\n\t\telse if(this._state === BEFORE_SCRIPT_1){\n\t\t\tthis._stateBeforeScript1(c);\n\t\t} else if(this._state === BEFORE_SCRIPT_2){\n\t\t\tthis._stateBeforeScript2(c);\n\t\t} else if(this._state === BEFORE_SCRIPT_3){\n\t\t\tthis._stateBeforeScript3(c);\n\t\t} else if(this._state === BEFORE_SCRIPT_4){\n\t\t\tthis._stateBeforeScript4(c);\n\t\t} else if(this._state === BEFORE_SCRIPT_5){\n\t\t\tthis._stateBeforeScript5(c);\n\t\t}\n\n\t\telse if(this._state === AFTER_SCRIPT_1){\n\t\t\tthis._stateAfterScript1(c);\n\t\t} else if(this._state === AFTER_SCRIPT_2){\n\t\t\tthis._stateAfterScript2(c);\n\t\t} else if(this._state === AFTER_SCRIPT_3){\n\t\t\tthis._stateAfterScript3(c);\n\t\t} else if(this._state === AFTER_SCRIPT_4){\n\t\t\tthis._stateAfterScript4(c);\n\t\t} else if(this._state === AFTER_SCRIPT_5){\n\t\t\tthis._stateAfterScript5(c);\n\t\t}\n\n\t\t/*\n\t\t* style\n\t\t*/\n\t\telse if(this._state === BEFORE_STYLE_1){\n\t\t\tthis._stateBeforeStyle1(c);\n\t\t} else if(this._state === BEFORE_STYLE_2){\n\t\t\tthis._stateBeforeStyle2(c);\n\t\t} else if(this._state === BEFORE_STYLE_3){\n\t\t\tthis._stateBeforeStyle3(c);\n\t\t} else if(this._state === BEFORE_STYLE_4){\n\t\t\tthis._stateBeforeStyle4(c);\n\t\t}\n\n\t\telse if(this._state === AFTER_STYLE_1){\n\t\t\tthis._stateAfterStyle1(c);\n\t\t} else if(this._state === AFTER_STYLE_2){\n\t\t\tthis._stateAfterStyle2(c);\n\t\t} else if(this._state === AFTER_STYLE_3){\n\t\t\tthis._stateAfterStyle3(c);\n\t\t} else if(this._state === AFTER_STYLE_4){\n\t\t\tthis._stateAfterStyle4(c);\n\t\t}\n\n\t\t/*\n\t\t* entities\n\t\t*/\n\t\telse if(this._state === BEFORE_ENTITY){\n\t\t\tthis._stateBeforeEntity(c);\n\t\t} else if(this._state === BEFORE_NUMERIC_ENTITY){\n\t\t\tthis._stateBeforeNumericEntity(c);\n\t\t} else if(this._state === IN_NAMED_ENTITY){\n\t\t\tthis._stateInNamedEntity(c);\n\t\t} else if(this._state === IN_NUMERIC_ENTITY){\n\t\t\tthis._stateInNumericEntity(c);\n\t\t} else if(this._state === IN_HEX_ENTITY){\n\t\t\tthis._stateInHexEntity(c);\n\t\t}\n\n\t\telse {\n\t\t\tthis._cbs.onerror(Error(\"unknown _state\"), this._state);\n\t\t}\n\n\t\tthis._index++;\n\t}\n\n\tthis._cleanup();\n};\n\nTokenizer.prototype.pause = function(){\n\tthis._running = false;\n};\nTokenizer.prototype.resume = function(){\n\tthis._running = true;\n\n\tif(this._index < this._buffer.length){\n\t\tthis._parse();\n\t}\n\tif(this._ended){\n\t\tthis._finish();\n\t}\n};\n\nTokenizer.prototype.end = function(chunk){\n\tif(this._ended) this._cbs.onerror(Error(\".end() after done!\"));\n\tif(chunk) this.write(chunk);\n\n\tthis._ended = true;\n\n\tif(this._running) this._finish();\n};\n\nTokenizer.prototype._finish = function(){\n\t//if there is remaining data, emit it in a reasonable way\n\tif(this._sectionStart < this._index){\n\t\tthis._handleTrailingData();\n\t}\n\n\tthis._cbs.onend();\n};\n\nTokenizer.prototype._handleTrailingData = function(){\n\tvar data = this._buffer.substr(this._sectionStart);\n\n\tif(this._state === IN_CDATA || this._state === AFTER_CDATA_1 || this._state === AFTER_CDATA_2){\n\t\tthis._cbs.oncdata(data);\n\t} else if(this._state === IN_COMMENT || this._state === AFTER_COMMENT_1 || this._state === AFTER_COMMENT_2){\n\t\tthis._cbs.oncomment(data);\n\t} else if(this._state === IN_NAMED_ENTITY && !this._xmlMode){\n\t\tthis._parseLegacyEntity();\n\t\tif(this._sectionStart < this._index){\n\t\t\tthis._state = this._baseState;\n\t\t\tthis._handleTrailingData();\n\t\t}\n\t} else if(this._state === IN_NUMERIC_ENTITY && !this._xmlMode){\n\t\tthis._decodeNumericEntity(2, 10);\n\t\tif(this._sectionStart < this._index){\n\t\t\tthis._state = this._baseState;\n\t\t\tthis._handleTrailingData();\n\t\t}\n\t} else if(this._state === IN_HEX_ENTITY && !this._xmlMode){\n\t\tthis._decodeNumericEntity(3, 16);\n\t\tif(this._sectionStart < this._index){\n\t\t\tthis._state = this._baseState;\n\t\t\tthis._handleTrailingData();\n\t\t}\n\t} else if(\n\t\tthis._state !== IN_TAG_NAME &&\n\t\tthis._state !== BEFORE_ATTRIBUTE_NAME &&\n\t\tthis._state !== BEFORE_ATTRIBUTE_VALUE &&\n\t\tthis._state !== AFTER_ATTRIBUTE_NAME &&\n\t\tthis._state !== IN_ATTRIBUTE_NAME &&\n\t\tthis._state !== IN_ATTRIBUTE_VALUE_SQ &&\n\t\tthis._state !== IN_ATTRIBUTE_VALUE_DQ &&\n\t\tthis._state !== IN_ATTRIBUTE_VALUE_NQ &&\n\t\tthis._state !== IN_CLOSING_TAG_NAME\n\t){\n\t\tthis._cbs.ontext(data);\n\t}\n\t//else, ignore remaining data\n\t//TODO add a way to remove current tag\n};\n\nTokenizer.prototype.reset = function(){\n\tTokenizer.call(this, {xmlMode: this._xmlMode, decodeEntities: this._decodeEntities}, this._cbs);\n};\n\nTokenizer.prototype.getAbsoluteIndex = function(){\n\treturn this._bufferOffset + this._index;\n};\n\nTokenizer.prototype._getSection = function(){\n\treturn this._buffer.substring(this._sectionStart, this._index);\n};\n\nTokenizer.prototype._emitToken = function(name){\n\tthis._cbs[name](this._getSection());\n\tthis._sectionStart = -1;\n};\n\nTokenizer.prototype._emitPartial = function(value){\n\tif(this._baseState !== TEXT){\n\t\tthis._cbs.onattribdata(value); //TODO implement the new event\n\t} else {\n\t\tthis._cbs.ontext(value);\n\t}\n};\n","var decodeMap = require(\"../maps/decode.json\");\n\nmodule.exports = decodeCodePoint;\n\n// modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119\nfunction decodeCodePoint(codePoint){\n\n\tif((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF){\n\t\treturn \"\\uFFFD\";\n\t}\n\n\tif(codePoint in decodeMap){\n\t\tcodePoint = decodeMap[codePoint];\n\t}\n\n\tvar output = \"\";\n\n\tif(codePoint > 0xFFFF){\n\t\tcodePoint -= 0x10000;\n\t\toutput += String.fromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t}\n\n\toutput += String.fromCharCode(codePoint);\n\treturn output;\n}\n","{\"0\":65533,\"128\":8364,\"130\":8218,\"131\":402,\"132\":8222,\"133\":8230,\"134\":8224,\"135\":8225,\"136\":710,\"137\":8240,\"138\":352,\"139\":8249,\"140\":338,\"142\":381,\"145\":8216,\"146\":8217,\"147\":8220,\"148\":8221,\"149\":8226,\"150\":8211,\"151\":8212,\"152\":732,\"153\":8482,\"154\":353,\"155\":8250,\"156\":339,\"158\":382,\"159\":376}","{\"Aacute\":\"\\u00C1\",\"aacute\":\"\\u00E1\",\"Abreve\":\"\\u0102\",\"abreve\":\"\\u0103\",\"ac\":\"\\u223E\",\"acd\":\"\\u223F\",\"acE\":\"\\u223E\\u0333\",\"Acirc\":\"\\u00C2\",\"acirc\":\"\\u00E2\",\"acute\":\"\\u00B4\",\"Acy\":\"\\u0410\",\"acy\":\"\\u0430\",\"AElig\":\"\\u00C6\",\"aelig\":\"\\u00E6\",\"af\":\"\\u2061\",\"Afr\":\"\\uD835\\uDD04\",\"afr\":\"\\uD835\\uDD1E\",\"Agrave\":\"\\u00C0\",\"agrave\":\"\\u00E0\",\"alefsym\":\"\\u2135\",\"aleph\":\"\\u2135\",\"Alpha\":\"\\u0391\",\"alpha\":\"\\u03B1\",\"Amacr\":\"\\u0100\",\"amacr\":\"\\u0101\",\"amalg\":\"\\u2A3F\",\"amp\":\"&\",\"AMP\":\"&\",\"andand\":\"\\u2A55\",\"And\":\"\\u2A53\",\"and\":\"\\u2227\",\"andd\":\"\\u2A5C\",\"andslope\":\"\\u2A58\",\"andv\":\"\\u2A5A\",\"ang\":\"\\u2220\",\"ange\":\"\\u29A4\",\"angle\":\"\\u2220\",\"angmsdaa\":\"\\u29A8\",\"angmsdab\":\"\\u29A9\",\"angmsdac\":\"\\u29AA\",\"angmsdad\":\"\\u29AB\",\"angmsdae\":\"\\u29AC\",\"angmsdaf\":\"\\u29AD\",\"angmsdag\":\"\\u29AE\",\"angmsdah\":\"\\u29AF\",\"angmsd\":\"\\u2221\",\"angrt\":\"\\u221F\",\"angrtvb\":\"\\u22BE\",\"angrtvbd\":\"\\u299D\",\"angsph\":\"\\u2222\",\"angst\":\"\\u00C5\",\"angzarr\":\"\\u237C\",\"Aogon\":\"\\u0104\",\"aogon\":\"\\u0105\",\"Aopf\":\"\\uD835\\uDD38\",\"aopf\":\"\\uD835\\uDD52\",\"apacir\":\"\\u2A6F\",\"ap\":\"\\u2248\",\"apE\":\"\\u2A70\",\"ape\":\"\\u224A\",\"apid\":\"\\u224B\",\"apos\":\"'\",\"ApplyFunction\":\"\\u2061\",\"approx\":\"\\u2248\",\"approxeq\":\"\\u224A\",\"Aring\":\"\\u00C5\",\"aring\":\"\\u00E5\",\"Ascr\":\"\\uD835\\uDC9C\",\"ascr\":\"\\uD835\\uDCB6\",\"Assign\":\"\\u2254\",\"ast\":\"*\",\"asymp\":\"\\u2248\",\"asympeq\":\"\\u224D\",\"Atilde\":\"\\u00C3\",\"atilde\":\"\\u00E3\",\"Auml\":\"\\u00C4\",\"auml\":\"\\u00E4\",\"awconint\":\"\\u2233\",\"awint\":\"\\u2A11\",\"backcong\":\"\\u224C\",\"backepsilon\":\"\\u03F6\",\"backprime\":\"\\u2035\",\"backsim\":\"\\u223D\",\"backsimeq\":\"\\u22CD\",\"Backslash\":\"\\u2216\",\"Barv\":\"\\u2AE7\",\"barvee\":\"\\u22BD\",\"barwed\":\"\\u2305\",\"Barwed\":\"\\u2306\",\"barwedge\":\"\\u2305\",\"bbrk\":\"\\u23B5\",\"bbrktbrk\":\"\\u23B6\",\"bcong\":\"\\u224C\",\"Bcy\":\"\\u0411\",\"bcy\":\"\\u0431\",\"bdquo\":\"\\u201E\",\"becaus\":\"\\u2235\",\"because\":\"\\u2235\",\"Because\":\"\\u2235\",\"bemptyv\":\"\\u29B0\",\"bepsi\":\"\\u03F6\",\"bernou\":\"\\u212C\",\"Bernoullis\":\"\\u212C\",\"Beta\":\"\\u0392\",\"beta\":\"\\u03B2\",\"beth\":\"\\u2136\",\"between\":\"\\u226C\",\"Bfr\":\"\\uD835\\uDD05\",\"bfr\":\"\\uD835\\uDD1F\",\"bigcap\":\"\\u22C2\",\"bigcirc\":\"\\u25EF\",\"bigcup\":\"\\u22C3\",\"bigodot\":\"\\u2A00\",\"bigoplus\":\"\\u2A01\",\"bigotimes\":\"\\u2A02\",\"bigsqcup\":\"\\u2A06\",\"bigstar\":\"\\u2605\",\"bigtriangledown\":\"\\u25BD\",\"bigtriangleup\":\"\\u25B3\",\"biguplus\":\"\\u2A04\",\"bigvee\":\"\\u22C1\",\"bigwedge\":\"\\u22C0\",\"bkarow\":\"\\u290D\",\"blacklozenge\":\"\\u29EB\",\"blacksquare\":\"\\u25AA\",\"blacktriangle\":\"\\u25B4\",\"blacktriangledown\":\"\\u25BE\",\"blacktriangleleft\":\"\\u25C2\",\"blacktriangleright\":\"\\u25B8\",\"blank\":\"\\u2423\",\"blk12\":\"\\u2592\",\"blk14\":\"\\u2591\",\"blk34\":\"\\u2593\",\"block\":\"\\u2588\",\"bne\":\"=\\u20E5\",\"bnequiv\":\"\\u2261\\u20E5\",\"bNot\":\"\\u2AED\",\"bnot\":\"\\u2310\",\"Bopf\":\"\\uD835\\uDD39\",\"bopf\":\"\\uD835\\uDD53\",\"bot\":\"\\u22A5\",\"bottom\":\"\\u22A5\",\"bowtie\":\"\\u22C8\",\"boxbox\":\"\\u29C9\",\"boxdl\":\"\\u2510\",\"boxdL\":\"\\u2555\",\"boxDl\":\"\\u2556\",\"boxDL\":\"\\u2557\",\"boxdr\":\"\\u250C\",\"boxdR\":\"\\u2552\",\"boxDr\":\"\\u2553\",\"boxDR\":\"\\u2554\",\"boxh\":\"\\u2500\",\"boxH\":\"\\u2550\",\"boxhd\":\"\\u252C\",\"boxHd\":\"\\u2564\",\"boxhD\":\"\\u2565\",\"boxHD\":\"\\u2566\",\"boxhu\":\"\\u2534\",\"boxHu\":\"\\u2567\",\"boxhU\":\"\\u2568\",\"boxHU\":\"\\u2569\",\"boxminus\":\"\\u229F\",\"boxplus\":\"\\u229E\",\"boxtimes\":\"\\u22A0\",\"boxul\":\"\\u2518\",\"boxuL\":\"\\u255B\",\"boxUl\":\"\\u255C\",\"boxUL\":\"\\u255D\",\"boxur\":\"\\u2514\",\"boxuR\":\"\\u2558\",\"boxUr\":\"\\u2559\",\"boxUR\":\"\\u255A\",\"boxv\":\"\\u2502\",\"boxV\":\"\\u2551\",\"boxvh\":\"\\u253C\",\"boxvH\":\"\\u256A\",\"boxVh\":\"\\u256B\",\"boxVH\":\"\\u256C\",\"boxvl\":\"\\u2524\",\"boxvL\":\"\\u2561\",\"boxVl\":\"\\u2562\",\"boxVL\":\"\\u2563\",\"boxvr\":\"\\u251C\",\"boxvR\":\"\\u255E\",\"boxVr\":\"\\u255F\",\"boxVR\":\"\\u2560\",\"bprime\":\"\\u2035\",\"breve\":\"\\u02D8\",\"Breve\":\"\\u02D8\",\"brvbar\":\"\\u00A6\",\"bscr\":\"\\uD835\\uDCB7\",\"Bscr\":\"\\u212C\",\"bsemi\":\"\\u204F\",\"bsim\":\"\\u223D\",\"bsime\":\"\\u22CD\",\"bsolb\":\"\\u29C5\",\"bsol\":\"\\\\\",\"bsolhsub\":\"\\u27C8\",\"bull\":\"\\u2022\",\"bullet\":\"\\u2022\",\"bump\":\"\\u224E\",\"bumpE\":\"\\u2AAE\",\"bumpe\":\"\\u224F\",\"Bumpeq\":\"\\u224E\",\"bumpeq\":\"\\u224F\",\"Cacute\":\"\\u0106\",\"cacute\":\"\\u0107\",\"capand\":\"\\u2A44\",\"capbrcup\":\"\\u2A49\",\"capcap\":\"\\u2A4B\",\"cap\":\"\\u2229\",\"Cap\":\"\\u22D2\",\"capcup\":\"\\u2A47\",\"capdot\":\"\\u2A40\",\"CapitalDifferentialD\":\"\\u2145\",\"caps\":\"\\u2229\\uFE00\",\"caret\":\"\\u2041\",\"caron\":\"\\u02C7\",\"Cayleys\":\"\\u212D\",\"ccaps\":\"\\u2A4D\",\"Ccaron\":\"\\u010C\",\"ccaron\":\"\\u010D\",\"Ccedil\":\"\\u00C7\",\"ccedil\":\"\\u00E7\",\"Ccirc\":\"\\u0108\",\"ccirc\":\"\\u0109\",\"Cconint\":\"\\u2230\",\"ccups\":\"\\u2A4C\",\"ccupssm\":\"\\u2A50\",\"Cdot\":\"\\u010A\",\"cdot\":\"\\u010B\",\"cedil\":\"\\u00B8\",\"Cedilla\":\"\\u00B8\",\"cemptyv\":\"\\u29B2\",\"cent\":\"\\u00A2\",\"centerdot\":\"\\u00B7\",\"CenterDot\":\"\\u00B7\",\"cfr\":\"\\uD835\\uDD20\",\"Cfr\":\"\\u212D\",\"CHcy\":\"\\u0427\",\"chcy\":\"\\u0447\",\"check\":\"\\u2713\",\"checkmark\":\"\\u2713\",\"Chi\":\"\\u03A7\",\"chi\":\"\\u03C7\",\"circ\":\"\\u02C6\",\"circeq\":\"\\u2257\",\"circlearrowleft\":\"\\u21BA\",\"circlearrowright\":\"\\u21BB\",\"circledast\":\"\\u229B\",\"circledcirc\":\"\\u229A\",\"circleddash\":\"\\u229D\",\"CircleDot\":\"\\u2299\",\"circledR\":\"\\u00AE\",\"circledS\":\"\\u24C8\",\"CircleMinus\":\"\\u2296\",\"CirclePlus\":\"\\u2295\",\"CircleTimes\":\"\\u2297\",\"cir\":\"\\u25CB\",\"cirE\":\"\\u29C3\",\"cire\":\"\\u2257\",\"cirfnint\":\"\\u2A10\",\"cirmid\":\"\\u2AEF\",\"cirscir\":\"\\u29C2\",\"ClockwiseContourIntegral\":\"\\u2232\",\"CloseCurlyDoubleQuote\":\"\\u201D\",\"CloseCurlyQuote\":\"\\u2019\",\"clubs\":\"\\u2663\",\"clubsuit\":\"\\u2663\",\"colon\":\":\",\"Colon\":\"\\u2237\",\"Colone\":\"\\u2A74\",\"colone\":\"\\u2254\",\"coloneq\":\"\\u2254\",\"comma\":\",\",\"commat\":\"@\",\"comp\":\"\\u2201\",\"compfn\":\"\\u2218\",\"complement\":\"\\u2201\",\"complexes\":\"\\u2102\",\"cong\":\"\\u2245\",\"congdot\":\"\\u2A6D\",\"Congruent\":\"\\u2261\",\"conint\":\"\\u222E\",\"Conint\":\"\\u222F\",\"ContourIntegral\":\"\\u222E\",\"copf\":\"\\uD835\\uDD54\",\"Copf\":\"\\u2102\",\"coprod\":\"\\u2210\",\"Coproduct\":\"\\u2210\",\"copy\":\"\\u00A9\",\"COPY\":\"\\u00A9\",\"copysr\":\"\\u2117\",\"CounterClockwiseContourIntegral\":\"\\u2233\",\"crarr\":\"\\u21B5\",\"cross\":\"\\u2717\",\"Cross\":\"\\u2A2F\",\"Cscr\":\"\\uD835\\uDC9E\",\"cscr\":\"\\uD835\\uDCB8\",\"csub\":\"\\u2ACF\",\"csube\":\"\\u2AD1\",\"csup\":\"\\u2AD0\",\"csupe\":\"\\u2AD2\",\"ctdot\":\"\\u22EF\",\"cudarrl\":\"\\u2938\",\"cudarrr\":\"\\u2935\",\"cuepr\":\"\\u22DE\",\"cuesc\":\"\\u22DF\",\"cularr\":\"\\u21B6\",\"cularrp\":\"\\u293D\",\"cupbrcap\":\"\\u2A48\",\"cupcap\":\"\\u2A46\",\"CupCap\":\"\\u224D\",\"cup\":\"\\u222A\",\"Cup\":\"\\u22D3\",\"cupcup\":\"\\u2A4A\",\"cupdot\":\"\\u228D\",\"cupor\":\"\\u2A45\",\"cups\":\"\\u222A\\uFE00\",\"curarr\":\"\\u21B7\",\"curarrm\":\"\\u293C\",\"curlyeqprec\":\"\\u22DE\",\"curlyeqsucc\":\"\\u22DF\",\"curlyvee\":\"\\u22CE\",\"curlywedge\":\"\\u22CF\",\"curren\":\"\\u00A4\",\"curvearrowleft\":\"\\u21B6\",\"curvearrowright\":\"\\u21B7\",\"cuvee\":\"\\u22CE\",\"cuwed\":\"\\u22CF\",\"cwconint\":\"\\u2232\",\"cwint\":\"\\u2231\",\"cylcty\":\"\\u232D\",\"dagger\":\"\\u2020\",\"Dagger\":\"\\u2021\",\"daleth\":\"\\u2138\",\"darr\":\"\\u2193\",\"Darr\":\"\\u21A1\",\"dArr\":\"\\u21D3\",\"dash\":\"\\u2010\",\"Dashv\":\"\\u2AE4\",\"dashv\":\"\\u22A3\",\"dbkarow\":\"\\u290F\",\"dblac\":\"\\u02DD\",\"Dcaron\":\"\\u010E\",\"dcaron\":\"\\u010F\",\"Dcy\":\"\\u0414\",\"dcy\":\"\\u0434\",\"ddagger\":\"\\u2021\",\"ddarr\":\"\\u21CA\",\"DD\":\"\\u2145\",\"dd\":\"\\u2146\",\"DDotrahd\":\"\\u2911\",\"ddotseq\":\"\\u2A77\",\"deg\":\"\\u00B0\",\"Del\":\"\\u2207\",\"Delta\":\"\\u0394\",\"delta\":\"\\u03B4\",\"demptyv\":\"\\u29B1\",\"dfisht\":\"\\u297F\",\"Dfr\":\"\\uD835\\uDD07\",\"dfr\":\"\\uD835\\uDD21\",\"dHar\":\"\\u2965\",\"dharl\":\"\\u21C3\",\"dharr\":\"\\u21C2\",\"DiacriticalAcute\":\"\\u00B4\",\"DiacriticalDot\":\"\\u02D9\",\"DiacriticalDoubleAcute\":\"\\u02DD\",\"DiacriticalGrave\":\"`\",\"DiacriticalTilde\":\"\\u02DC\",\"diam\":\"\\u22C4\",\"diamond\":\"\\u22C4\",\"Diamond\":\"\\u22C4\",\"diamondsuit\":\"\\u2666\",\"diams\":\"\\u2666\",\"die\":\"\\u00A8\",\"DifferentialD\":\"\\u2146\",\"digamma\":\"\\u03DD\",\"disin\":\"\\u22F2\",\"div\":\"\\u00F7\",\"divide\":\"\\u00F7\",\"divideontimes\":\"\\u22C7\",\"divonx\":\"\\u22C7\",\"DJcy\":\"\\u0402\",\"djcy\":\"\\u0452\",\"dlcorn\":\"\\u231E\",\"dlcrop\":\"\\u230D\",\"dollar\":\"$\",\"Dopf\":\"\\uD835\\uDD3B\",\"dopf\":\"\\uD835\\uDD55\",\"Dot\":\"\\u00A8\",\"dot\":\"\\u02D9\",\"DotDot\":\"\\u20DC\",\"doteq\":\"\\u2250\",\"doteqdot\":\"\\u2251\",\"DotEqual\":\"\\u2250\",\"dotminus\":\"\\u2238\",\"dotplus\":\"\\u2214\",\"dotsquare\":\"\\u22A1\",\"doublebarwedge\":\"\\u2306\",\"DoubleContourIntegral\":\"\\u222F\",\"DoubleDot\":\"\\u00A8\",\"DoubleDownArrow\":\"\\u21D3\",\"DoubleLeftArrow\":\"\\u21D0\",\"DoubleLeftRightArrow\":\"\\u21D4\",\"DoubleLeftTee\":\"\\u2AE4\",\"DoubleLongLeftArrow\":\"\\u27F8\",\"DoubleLongLeftRightArrow\":\"\\u27FA\",\"DoubleLongRightArrow\":\"\\u27F9\",\"DoubleRightArrow\":\"\\u21D2\",\"DoubleRightTee\":\"\\u22A8\",\"DoubleUpArrow\":\"\\u21D1\",\"DoubleUpDownArrow\":\"\\u21D5\",\"DoubleVerticalBar\":\"\\u2225\",\"DownArrowBar\":\"\\u2913\",\"downarrow\":\"\\u2193\",\"DownArrow\":\"\\u2193\",\"Downarrow\":\"\\u21D3\",\"DownArrowUpArrow\":\"\\u21F5\",\"DownBreve\":\"\\u0311\",\"downdownarrows\":\"\\u21CA\",\"downharpoonleft\":\"\\u21C3\",\"downharpoonright\":\"\\u21C2\",\"DownLeftRightVector\":\"\\u2950\",\"DownLeftTeeVector\":\"\\u295E\",\"DownLeftVectorBar\":\"\\u2956\",\"DownLeftVector\":\"\\u21BD\",\"DownRightTeeVector\":\"\\u295F\",\"DownRightVectorBar\":\"\\u2957\",\"DownRightVector\":\"\\u21C1\",\"DownTeeArrow\":\"\\u21A7\",\"DownTee\":\"\\u22A4\",\"drbkarow\":\"\\u2910\",\"drcorn\":\"\\u231F\",\"drcrop\":\"\\u230C\",\"Dscr\":\"\\uD835\\uDC9F\",\"dscr\":\"\\uD835\\uDCB9\",\"DScy\":\"\\u0405\",\"dscy\":\"\\u0455\",\"dsol\":\"\\u29F6\",\"Dstrok\":\"\\u0110\",\"dstrok\":\"\\u0111\",\"dtdot\":\"\\u22F1\",\"dtri\":\"\\u25BF\",\"dtrif\":\"\\u25BE\",\"duarr\":\"\\u21F5\",\"duhar\":\"\\u296F\",\"dwangle\":\"\\u29A6\",\"DZcy\":\"\\u040F\",\"dzcy\":\"\\u045F\",\"dzigrarr\":\"\\u27FF\",\"Eacute\":\"\\u00C9\",\"eacute\":\"\\u00E9\",\"easter\":\"\\u2A6E\",\"Ecaron\":\"\\u011A\",\"ecaron\":\"\\u011B\",\"Ecirc\":\"\\u00CA\",\"ecirc\":\"\\u00EA\",\"ecir\":\"\\u2256\",\"ecolon\":\"\\u2255\",\"Ecy\":\"\\u042D\",\"ecy\":\"\\u044D\",\"eDDot\":\"\\u2A77\",\"Edot\":\"\\u0116\",\"edot\":\"\\u0117\",\"eDot\":\"\\u2251\",\"ee\":\"\\u2147\",\"efDot\":\"\\u2252\",\"Efr\":\"\\uD835\\uDD08\",\"efr\":\"\\uD835\\uDD22\",\"eg\":\"\\u2A9A\",\"Egrave\":\"\\u00C8\",\"egrave\":\"\\u00E8\",\"egs\":\"\\u2A96\",\"egsdot\":\"\\u2A98\",\"el\":\"\\u2A99\",\"Element\":\"\\u2208\",\"elinters\":\"\\u23E7\",\"ell\":\"\\u2113\",\"els\":\"\\u2A95\",\"elsdot\":\"\\u2A97\",\"Emacr\":\"\\u0112\",\"emacr\":\"\\u0113\",\"empty\":\"\\u2205\",\"emptyset\":\"\\u2205\",\"EmptySmallSquare\":\"\\u25FB\",\"emptyv\":\"\\u2205\",\"EmptyVerySmallSquare\":\"\\u25AB\",\"emsp13\":\"\\u2004\",\"emsp14\":\"\\u2005\",\"emsp\":\"\\u2003\",\"ENG\":\"\\u014A\",\"eng\":\"\\u014B\",\"ensp\":\"\\u2002\",\"Eogon\":\"\\u0118\",\"eogon\":\"\\u0119\",\"Eopf\":\"\\uD835\\uDD3C\",\"eopf\":\"\\uD835\\uDD56\",\"epar\":\"\\u22D5\",\"eparsl\":\"\\u29E3\",\"eplus\":\"\\u2A71\",\"epsi\":\"\\u03B5\",\"Epsilon\":\"\\u0395\",\"epsilon\":\"\\u03B5\",\"epsiv\":\"\\u03F5\",\"eqcirc\":\"\\u2256\",\"eqcolon\":\"\\u2255\",\"eqsim\":\"\\u2242\",\"eqslantgtr\":\"\\u2A96\",\"eqslantless\":\"\\u2A95\",\"Equal\":\"\\u2A75\",\"equals\":\"=\",\"EqualTilde\":\"\\u2242\",\"equest\":\"\\u225F\",\"Equilibrium\":\"\\u21CC\",\"equiv\":\"\\u2261\",\"equivDD\":\"\\u2A78\",\"eqvparsl\":\"\\u29E5\",\"erarr\":\"\\u2971\",\"erDot\":\"\\u2253\",\"escr\":\"\\u212F\",\"Escr\":\"\\u2130\",\"esdot\":\"\\u2250\",\"Esim\":\"\\u2A73\",\"esim\":\"\\u2242\",\"Eta\":\"\\u0397\",\"eta\":\"\\u03B7\",\"ETH\":\"\\u00D0\",\"eth\":\"\\u00F0\",\"Euml\":\"\\u00CB\",\"euml\":\"\\u00EB\",\"euro\":\"\\u20AC\",\"excl\":\"!\",\"exist\":\"\\u2203\",\"Exists\":\"\\u2203\",\"expectation\":\"\\u2130\",\"exponentiale\":\"\\u2147\",\"ExponentialE\":\"\\u2147\",\"fallingdotseq\":\"\\u2252\",\"Fcy\":\"\\u0424\",\"fcy\":\"\\u0444\",\"female\":\"\\u2640\",\"ffilig\":\"\\uFB03\",\"fflig\":\"\\uFB00\",\"ffllig\":\"\\uFB04\",\"Ffr\":\"\\uD835\\uDD09\",\"ffr\":\"\\uD835\\uDD23\",\"filig\":\"\\uFB01\",\"FilledSmallSquare\":\"\\u25FC\",\"FilledVerySmallSquare\":\"\\u25AA\",\"fjlig\":\"fj\",\"flat\":\"\\u266D\",\"fllig\":\"\\uFB02\",\"fltns\":\"\\u25B1\",\"fnof\":\"\\u0192\",\"Fopf\":\"\\uD835\\uDD3D\",\"fopf\":\"\\uD835\\uDD57\",\"forall\":\"\\u2200\",\"ForAll\":\"\\u2200\",\"fork\":\"\\u22D4\",\"forkv\":\"\\u2AD9\",\"Fouriertrf\":\"\\u2131\",\"fpartint\":\"\\u2A0D\",\"frac12\":\"\\u00BD\",\"frac13\":\"\\u2153\",\"frac14\":\"\\u00BC\",\"frac15\":\"\\u2155\",\"frac16\":\"\\u2159\",\"frac18\":\"\\u215B\",\"frac23\":\"\\u2154\",\"frac25\":\"\\u2156\",\"frac34\":\"\\u00BE\",\"frac35\":\"\\u2157\",\"frac38\":\"\\u215C\",\"frac45\":\"\\u2158\",\"frac56\":\"\\u215A\",\"frac58\":\"\\u215D\",\"frac78\":\"\\u215E\",\"frasl\":\"\\u2044\",\"frown\":\"\\u2322\",\"fscr\":\"\\uD835\\uDCBB\",\"Fscr\":\"\\u2131\",\"gacute\":\"\\u01F5\",\"Gamma\":\"\\u0393\",\"gamma\":\"\\u03B3\",\"Gammad\":\"\\u03DC\",\"gammad\":\"\\u03DD\",\"gap\":\"\\u2A86\",\"Gbreve\":\"\\u011E\",\"gbreve\":\"\\u011F\",\"Gcedil\":\"\\u0122\",\"Gcirc\":\"\\u011C\",\"gcirc\":\"\\u011D\",\"Gcy\":\"\\u0413\",\"gcy\":\"\\u0433\",\"Gdot\":\"\\u0120\",\"gdot\":\"\\u0121\",\"ge\":\"\\u2265\",\"gE\":\"\\u2267\",\"gEl\":\"\\u2A8C\",\"gel\":\"\\u22DB\",\"geq\":\"\\u2265\",\"geqq\":\"\\u2267\",\"geqslant\":\"\\u2A7E\",\"gescc\":\"\\u2AA9\",\"ges\":\"\\u2A7E\",\"gesdot\":\"\\u2A80\",\"gesdoto\":\"\\u2A82\",\"gesdotol\":\"\\u2A84\",\"gesl\":\"\\u22DB\\uFE00\",\"gesles\":\"\\u2A94\",\"Gfr\":\"\\uD835\\uDD0A\",\"gfr\":\"\\uD835\\uDD24\",\"gg\":\"\\u226B\",\"Gg\":\"\\u22D9\",\"ggg\":\"\\u22D9\",\"gimel\":\"\\u2137\",\"GJcy\":\"\\u0403\",\"gjcy\":\"\\u0453\",\"gla\":\"\\u2AA5\",\"gl\":\"\\u2277\",\"glE\":\"\\u2A92\",\"glj\":\"\\u2AA4\",\"gnap\":\"\\u2A8A\",\"gnapprox\":\"\\u2A8A\",\"gne\":\"\\u2A88\",\"gnE\":\"\\u2269\",\"gneq\":\"\\u2A88\",\"gneqq\":\"\\u2269\",\"gnsim\":\"\\u22E7\",\"Gopf\":\"\\uD835\\uDD3E\",\"gopf\":\"\\uD835\\uDD58\",\"grave\":\"`\",\"GreaterEqual\":\"\\u2265\",\"GreaterEqualLess\":\"\\u22DB\",\"GreaterFullEqual\":\"\\u2267\",\"GreaterGreater\":\"\\u2AA2\",\"GreaterLess\":\"\\u2277\",\"GreaterSlantEqual\":\"\\u2A7E\",\"GreaterTilde\":\"\\u2273\",\"Gscr\":\"\\uD835\\uDCA2\",\"gscr\":\"\\u210A\",\"gsim\":\"\\u2273\",\"gsime\":\"\\u2A8E\",\"gsiml\":\"\\u2A90\",\"gtcc\":\"\\u2AA7\",\"gtcir\":\"\\u2A7A\",\"gt\":\">\",\"GT\":\">\",\"Gt\":\"\\u226B\",\"gtdot\":\"\\u22D7\",\"gtlPar\":\"\\u2995\",\"gtquest\":\"\\u2A7C\",\"gtrapprox\":\"\\u2A86\",\"gtrarr\":\"\\u2978\",\"gtrdot\":\"\\u22D7\",\"gtreqless\":\"\\u22DB\",\"gtreqqless\":\"\\u2A8C\",\"gtrless\":\"\\u2277\",\"gtrsim\":\"\\u2273\",\"gvertneqq\":\"\\u2269\\uFE00\",\"gvnE\":\"\\u2269\\uFE00\",\"Hacek\":\"\\u02C7\",\"hairsp\":\"\\u200A\",\"half\":\"\\u00BD\",\"hamilt\":\"\\u210B\",\"HARDcy\":\"\\u042A\",\"hardcy\":\"\\u044A\",\"harrcir\":\"\\u2948\",\"harr\":\"\\u2194\",\"hArr\":\"\\u21D4\",\"harrw\":\"\\u21AD\",\"Hat\":\"^\",\"hbar\":\"\\u210F\",\"Hcirc\":\"\\u0124\",\"hcirc\":\"\\u0125\",\"hearts\":\"\\u2665\",\"heartsuit\":\"\\u2665\",\"hellip\":\"\\u2026\",\"hercon\":\"\\u22B9\",\"hfr\":\"\\uD835\\uDD25\",\"Hfr\":\"\\u210C\",\"HilbertSpace\":\"\\u210B\",\"hksearow\":\"\\u2925\",\"hkswarow\":\"\\u2926\",\"hoarr\":\"\\u21FF\",\"homtht\":\"\\u223B\",\"hookleftarrow\":\"\\u21A9\",\"hookrightarrow\":\"\\u21AA\",\"hopf\":\"\\uD835\\uDD59\",\"Hopf\":\"\\u210D\",\"horbar\":\"\\u2015\",\"HorizontalLine\":\"\\u2500\",\"hscr\":\"\\uD835\\uDCBD\",\"Hscr\":\"\\u210B\",\"hslash\":\"\\u210F\",\"Hstrok\":\"\\u0126\",\"hstrok\":\"\\u0127\",\"HumpDownHump\":\"\\u224E\",\"HumpEqual\":\"\\u224F\",\"hybull\":\"\\u2043\",\"hyphen\":\"\\u2010\",\"Iacute\":\"\\u00CD\",\"iacute\":\"\\u00ED\",\"ic\":\"\\u2063\",\"Icirc\":\"\\u00CE\",\"icirc\":\"\\u00EE\",\"Icy\":\"\\u0418\",\"icy\":\"\\u0438\",\"Idot\":\"\\u0130\",\"IEcy\":\"\\u0415\",\"iecy\":\"\\u0435\",\"iexcl\":\"\\u00A1\",\"iff\":\"\\u21D4\",\"ifr\":\"\\uD835\\uDD26\",\"Ifr\":\"\\u2111\",\"Igrave\":\"\\u00CC\",\"igrave\":\"\\u00EC\",\"ii\":\"\\u2148\",\"iiiint\":\"\\u2A0C\",\"iiint\":\"\\u222D\",\"iinfin\":\"\\u29DC\",\"iiota\":\"\\u2129\",\"IJlig\":\"\\u0132\",\"ijlig\":\"\\u0133\",\"Imacr\":\"\\u012A\",\"imacr\":\"\\u012B\",\"image\":\"\\u2111\",\"ImaginaryI\":\"\\u2148\",\"imagline\":\"\\u2110\",\"imagpart\":\"\\u2111\",\"imath\":\"\\u0131\",\"Im\":\"\\u2111\",\"imof\":\"\\u22B7\",\"imped\":\"\\u01B5\",\"Implies\":\"\\u21D2\",\"incare\":\"\\u2105\",\"in\":\"\\u2208\",\"infin\":\"\\u221E\",\"infintie\":\"\\u29DD\",\"inodot\":\"\\u0131\",\"intcal\":\"\\u22BA\",\"int\":\"\\u222B\",\"Int\":\"\\u222C\",\"integers\":\"\\u2124\",\"Integral\":\"\\u222B\",\"intercal\":\"\\u22BA\",\"Intersection\":\"\\u22C2\",\"intlarhk\":\"\\u2A17\",\"intprod\":\"\\u2A3C\",\"InvisibleComma\":\"\\u2063\",\"InvisibleTimes\":\"\\u2062\",\"IOcy\":\"\\u0401\",\"iocy\":\"\\u0451\",\"Iogon\":\"\\u012E\",\"iogon\":\"\\u012F\",\"Iopf\":\"\\uD835\\uDD40\",\"iopf\":\"\\uD835\\uDD5A\",\"Iota\":\"\\u0399\",\"iota\":\"\\u03B9\",\"iprod\":\"\\u2A3C\",\"iquest\":\"\\u00BF\",\"iscr\":\"\\uD835\\uDCBE\",\"Iscr\":\"\\u2110\",\"isin\":\"\\u2208\",\"isindot\":\"\\u22F5\",\"isinE\":\"\\u22F9\",\"isins\":\"\\u22F4\",\"isinsv\":\"\\u22F3\",\"isinv\":\"\\u2208\",\"it\":\"\\u2062\",\"Itilde\":\"\\u0128\",\"itilde\":\"\\u0129\",\"Iukcy\":\"\\u0406\",\"iukcy\":\"\\u0456\",\"Iuml\":\"\\u00CF\",\"iuml\":\"\\u00EF\",\"Jcirc\":\"\\u0134\",\"jcirc\":\"\\u0135\",\"Jcy\":\"\\u0419\",\"jcy\":\"\\u0439\",\"Jfr\":\"\\uD835\\uDD0D\",\"jfr\":\"\\uD835\\uDD27\",\"jmath\":\"\\u0237\",\"Jopf\":\"\\uD835\\uDD41\",\"jopf\":\"\\uD835\\uDD5B\",\"Jscr\":\"\\uD835\\uDCA5\",\"jscr\":\"\\uD835\\uDCBF\",\"Jsercy\":\"\\u0408\",\"jsercy\":\"\\u0458\",\"Jukcy\":\"\\u0404\",\"jukcy\":\"\\u0454\",\"Kappa\":\"\\u039A\",\"kappa\":\"\\u03BA\",\"kappav\":\"\\u03F0\",\"Kcedil\":\"\\u0136\",\"kcedil\":\"\\u0137\",\"Kcy\":\"\\u041A\",\"kcy\":\"\\u043A\",\"Kfr\":\"\\uD835\\uDD0E\",\"kfr\":\"\\uD835\\uDD28\",\"kgreen\":\"\\u0138\",\"KHcy\":\"\\u0425\",\"khcy\":\"\\u0445\",\"KJcy\":\"\\u040C\",\"kjcy\":\"\\u045C\",\"Kopf\":\"\\uD835\\uDD42\",\"kopf\":\"\\uD835\\uDD5C\",\"Kscr\":\"\\uD835\\uDCA6\",\"kscr\":\"\\uD835\\uDCC0\",\"lAarr\":\"\\u21DA\",\"Lacute\":\"\\u0139\",\"lacute\":\"\\u013A\",\"laemptyv\":\"\\u29B4\",\"lagran\":\"\\u2112\",\"Lambda\":\"\\u039B\",\"lambda\":\"\\u03BB\",\"lang\":\"\\u27E8\",\"Lang\":\"\\u27EA\",\"langd\":\"\\u2991\",\"langle\":\"\\u27E8\",\"lap\":\"\\u2A85\",\"Laplacetrf\":\"\\u2112\",\"laquo\":\"\\u00AB\",\"larrb\":\"\\u21E4\",\"larrbfs\":\"\\u291F\",\"larr\":\"\\u2190\",\"Larr\":\"\\u219E\",\"lArr\":\"\\u21D0\",\"larrfs\":\"\\u291D\",\"larrhk\":\"\\u21A9\",\"larrlp\":\"\\u21AB\",\"larrpl\":\"\\u2939\",\"larrsim\":\"\\u2973\",\"larrtl\":\"\\u21A2\",\"latail\":\"\\u2919\",\"lAtail\":\"\\u291B\",\"lat\":\"\\u2AAB\",\"late\":\"\\u2AAD\",\"lates\":\"\\u2AAD\\uFE00\",\"lbarr\":\"\\u290C\",\"lBarr\":\"\\u290E\",\"lbbrk\":\"\\u2772\",\"lbrace\":\"{\",\"lbrack\":\"[\",\"lbrke\":\"\\u298B\",\"lbrksld\":\"\\u298F\",\"lbrkslu\":\"\\u298D\",\"Lcaron\":\"\\u013D\",\"lcaron\":\"\\u013E\",\"Lcedil\":\"\\u013B\",\"lcedil\":\"\\u013C\",\"lceil\":\"\\u2308\",\"lcub\":\"{\",\"Lcy\":\"\\u041B\",\"lcy\":\"\\u043B\",\"ldca\":\"\\u2936\",\"ldquo\":\"\\u201C\",\"ldquor\":\"\\u201E\",\"ldrdhar\":\"\\u2967\",\"ldrushar\":\"\\u294B\",\"ldsh\":\"\\u21B2\",\"le\":\"\\u2264\",\"lE\":\"\\u2266\",\"LeftAngleBracket\":\"\\u27E8\",\"LeftArrowBar\":\"\\u21E4\",\"leftarrow\":\"\\u2190\",\"LeftArrow\":\"\\u2190\",\"Leftarrow\":\"\\u21D0\",\"LeftArrowRightArrow\":\"\\u21C6\",\"leftarrowtail\":\"\\u21A2\",\"LeftCeiling\":\"\\u2308\",\"LeftDoubleBracket\":\"\\u27E6\",\"LeftDownTeeVector\":\"\\u2961\",\"LeftDownVectorBar\":\"\\u2959\",\"LeftDownVector\":\"\\u21C3\",\"LeftFloor\":\"\\u230A\",\"leftharpoondown\":\"\\u21BD\",\"leftharpoonup\":\"\\u21BC\",\"leftleftarrows\":\"\\u21C7\",\"leftrightarrow\":\"\\u2194\",\"LeftRightArrow\":\"\\u2194\",\"Leftrightarrow\":\"\\u21D4\",\"leftrightarrows\":\"\\u21C6\",\"leftrightharpoons\":\"\\u21CB\",\"leftrightsquigarrow\":\"\\u21AD\",\"LeftRightVector\":\"\\u294E\",\"LeftTeeArrow\":\"\\u21A4\",\"LeftTee\":\"\\u22A3\",\"LeftTeeVector\":\"\\u295A\",\"leftthreetimes\":\"\\u22CB\",\"LeftTriangleBar\":\"\\u29CF\",\"LeftTriangle\":\"\\u22B2\",\"LeftTriangleEqual\":\"\\u22B4\",\"LeftUpDownVector\":\"\\u2951\",\"LeftUpTeeVector\":\"\\u2960\",\"LeftUpVectorBar\":\"\\u2958\",\"LeftUpVector\":\"\\u21BF\",\"LeftVectorBar\":\"\\u2952\",\"LeftVector\":\"\\u21BC\",\"lEg\":\"\\u2A8B\",\"leg\":\"\\u22DA\",\"leq\":\"\\u2264\",\"leqq\":\"\\u2266\",\"leqslant\":\"\\u2A7D\",\"lescc\":\"\\u2AA8\",\"les\":\"\\u2A7D\",\"lesdot\":\"\\u2A7F\",\"lesdoto\":\"\\u2A81\",\"lesdotor\":\"\\u2A83\",\"lesg\":\"\\u22DA\\uFE00\",\"lesges\":\"\\u2A93\",\"lessapprox\":\"\\u2A85\",\"lessdot\":\"\\u22D6\",\"lesseqgtr\":\"\\u22DA\",\"lesseqqgtr\":\"\\u2A8B\",\"LessEqualGreater\":\"\\u22DA\",\"LessFullEqual\":\"\\u2266\",\"LessGreater\":\"\\u2276\",\"lessgtr\":\"\\u2276\",\"LessLess\":\"\\u2AA1\",\"lesssim\":\"\\u2272\",\"LessSlantEqual\":\"\\u2A7D\",\"LessTilde\":\"\\u2272\",\"lfisht\":\"\\u297C\",\"lfloor\":\"\\u230A\",\"Lfr\":\"\\uD835\\uDD0F\",\"lfr\":\"\\uD835\\uDD29\",\"lg\":\"\\u2276\",\"lgE\":\"\\u2A91\",\"lHar\":\"\\u2962\",\"lhard\":\"\\u21BD\",\"lharu\":\"\\u21BC\",\"lharul\":\"\\u296A\",\"lhblk\":\"\\u2584\",\"LJcy\":\"\\u0409\",\"ljcy\":\"\\u0459\",\"llarr\":\"\\u21C7\",\"ll\":\"\\u226A\",\"Ll\":\"\\u22D8\",\"llcorner\":\"\\u231E\",\"Lleftarrow\":\"\\u21DA\",\"llhard\":\"\\u296B\",\"lltri\":\"\\u25FA\",\"Lmidot\":\"\\u013F\",\"lmidot\":\"\\u0140\",\"lmoustache\":\"\\u23B0\",\"lmoust\":\"\\u23B0\",\"lnap\":\"\\u2A89\",\"lnapprox\":\"\\u2A89\",\"lne\":\"\\u2A87\",\"lnE\":\"\\u2268\",\"lneq\":\"\\u2A87\",\"lneqq\":\"\\u2268\",\"lnsim\":\"\\u22E6\",\"loang\":\"\\u27EC\",\"loarr\":\"\\u21FD\",\"lobrk\":\"\\u27E6\",\"longleftarrow\":\"\\u27F5\",\"LongLeftArrow\":\"\\u27F5\",\"Longleftarrow\":\"\\u27F8\",\"longleftrightarrow\":\"\\u27F7\",\"LongLeftRightArrow\":\"\\u27F7\",\"Longleftrightarrow\":\"\\u27FA\",\"longmapsto\":\"\\u27FC\",\"longrightarrow\":\"\\u27F6\",\"LongRightArrow\":\"\\u27F6\",\"Longrightarrow\":\"\\u27F9\",\"looparrowleft\":\"\\u21AB\",\"looparrowright\":\"\\u21AC\",\"lopar\":\"\\u2985\",\"Lopf\":\"\\uD835\\uDD43\",\"lopf\":\"\\uD835\\uDD5D\",\"loplus\":\"\\u2A2D\",\"lotimes\":\"\\u2A34\",\"lowast\":\"\\u2217\",\"lowbar\":\"_\",\"LowerLeftArrow\":\"\\u2199\",\"LowerRightArrow\":\"\\u2198\",\"loz\":\"\\u25CA\",\"lozenge\":\"\\u25CA\",\"lozf\":\"\\u29EB\",\"lpar\":\"(\",\"lparlt\":\"\\u2993\",\"lrarr\":\"\\u21C6\",\"lrcorner\":\"\\u231F\",\"lrhar\":\"\\u21CB\",\"lrhard\":\"\\u296D\",\"lrm\":\"\\u200E\",\"lrtri\":\"\\u22BF\",\"lsaquo\":\"\\u2039\",\"lscr\":\"\\uD835\\uDCC1\",\"Lscr\":\"\\u2112\",\"lsh\":\"\\u21B0\",\"Lsh\":\"\\u21B0\",\"lsim\":\"\\u2272\",\"lsime\":\"\\u2A8D\",\"lsimg\":\"\\u2A8F\",\"lsqb\":\"[\",\"lsquo\":\"\\u2018\",\"lsquor\":\"\\u201A\",\"Lstrok\":\"\\u0141\",\"lstrok\":\"\\u0142\",\"ltcc\":\"\\u2AA6\",\"ltcir\":\"\\u2A79\",\"lt\":\"<\",\"LT\":\"<\",\"Lt\":\"\\u226A\",\"ltdot\":\"\\u22D6\",\"lthree\":\"\\u22CB\",\"ltimes\":\"\\u22C9\",\"ltlarr\":\"\\u2976\",\"ltquest\":\"\\u2A7B\",\"ltri\":\"\\u25C3\",\"ltrie\":\"\\u22B4\",\"ltrif\":\"\\u25C2\",\"ltrPar\":\"\\u2996\",\"lurdshar\":\"\\u294A\",\"luruhar\":\"\\u2966\",\"lvertneqq\":\"\\u2268\\uFE00\",\"lvnE\":\"\\u2268\\uFE00\",\"macr\":\"\\u00AF\",\"male\":\"\\u2642\",\"malt\":\"\\u2720\",\"maltese\":\"\\u2720\",\"Map\":\"\\u2905\",\"map\":\"\\u21A6\",\"mapsto\":\"\\u21A6\",\"mapstodown\":\"\\u21A7\",\"mapstoleft\":\"\\u21A4\",\"mapstoup\":\"\\u21A5\",\"marker\":\"\\u25AE\",\"mcomma\":\"\\u2A29\",\"Mcy\":\"\\u041C\",\"mcy\":\"\\u043C\",\"mdash\":\"\\u2014\",\"mDDot\":\"\\u223A\",\"measuredangle\":\"\\u2221\",\"MediumSpace\":\"\\u205F\",\"Mellintrf\":\"\\u2133\",\"Mfr\":\"\\uD835\\uDD10\",\"mfr\":\"\\uD835\\uDD2A\",\"mho\":\"\\u2127\",\"micro\":\"\\u00B5\",\"midast\":\"*\",\"midcir\":\"\\u2AF0\",\"mid\":\"\\u2223\",\"middot\":\"\\u00B7\",\"minusb\":\"\\u229F\",\"minus\":\"\\u2212\",\"minusd\":\"\\u2238\",\"minusdu\":\"\\u2A2A\",\"MinusPlus\":\"\\u2213\",\"mlcp\":\"\\u2ADB\",\"mldr\":\"\\u2026\",\"mnplus\":\"\\u2213\",\"models\":\"\\u22A7\",\"Mopf\":\"\\uD835\\uDD44\",\"mopf\":\"\\uD835\\uDD5E\",\"mp\":\"\\u2213\",\"mscr\":\"\\uD835\\uDCC2\",\"Mscr\":\"\\u2133\",\"mstpos\":\"\\u223E\",\"Mu\":\"\\u039C\",\"mu\":\"\\u03BC\",\"multimap\":\"\\u22B8\",\"mumap\":\"\\u22B8\",\"nabla\":\"\\u2207\",\"Nacute\":\"\\u0143\",\"nacute\":\"\\u0144\",\"nang\":\"\\u2220\\u20D2\",\"nap\":\"\\u2249\",\"napE\":\"\\u2A70\\u0338\",\"napid\":\"\\u224B\\u0338\",\"napos\":\"\\u0149\",\"napprox\":\"\\u2249\",\"natural\":\"\\u266E\",\"naturals\":\"\\u2115\",\"natur\":\"\\u266E\",\"nbsp\":\"\\u00A0\",\"nbump\":\"\\u224E\\u0338\",\"nbumpe\":\"\\u224F\\u0338\",\"ncap\":\"\\u2A43\",\"Ncaron\":\"\\u0147\",\"ncaron\":\"\\u0148\",\"Ncedil\":\"\\u0145\",\"ncedil\":\"\\u0146\",\"ncong\":\"\\u2247\",\"ncongdot\":\"\\u2A6D\\u0338\",\"ncup\":\"\\u2A42\",\"Ncy\":\"\\u041D\",\"ncy\":\"\\u043D\",\"ndash\":\"\\u2013\",\"nearhk\":\"\\u2924\",\"nearr\":\"\\u2197\",\"neArr\":\"\\u21D7\",\"nearrow\":\"\\u2197\",\"ne\":\"\\u2260\",\"nedot\":\"\\u2250\\u0338\",\"NegativeMediumSpace\":\"\\u200B\",\"NegativeThickSpace\":\"\\u200B\",\"NegativeThinSpace\":\"\\u200B\",\"NegativeVeryThinSpace\":\"\\u200B\",\"nequiv\":\"\\u2262\",\"nesear\":\"\\u2928\",\"nesim\":\"\\u2242\\u0338\",\"NestedGreaterGreater\":\"\\u226B\",\"NestedLessLess\":\"\\u226A\",\"NewLine\":\"\\n\",\"nexist\":\"\\u2204\",\"nexists\":\"\\u2204\",\"Nfr\":\"\\uD835\\uDD11\",\"nfr\":\"\\uD835\\uDD2B\",\"ngE\":\"\\u2267\\u0338\",\"nge\":\"\\u2271\",\"ngeq\":\"\\u2271\",\"ngeqq\":\"\\u2267\\u0338\",\"ngeqslant\":\"\\u2A7E\\u0338\",\"nges\":\"\\u2A7E\\u0338\",\"nGg\":\"\\u22D9\\u0338\",\"ngsim\":\"\\u2275\",\"nGt\":\"\\u226B\\u20D2\",\"ngt\":\"\\u226F\",\"ngtr\":\"\\u226F\",\"nGtv\":\"\\u226B\\u0338\",\"nharr\":\"\\u21AE\",\"nhArr\":\"\\u21CE\",\"nhpar\":\"\\u2AF2\",\"ni\":\"\\u220B\",\"nis\":\"\\u22FC\",\"nisd\":\"\\u22FA\",\"niv\":\"\\u220B\",\"NJcy\":\"\\u040A\",\"njcy\":\"\\u045A\",\"nlarr\":\"\\u219A\",\"nlArr\":\"\\u21CD\",\"nldr\":\"\\u2025\",\"nlE\":\"\\u2266\\u0338\",\"nle\":\"\\u2270\",\"nleftarrow\":\"\\u219A\",\"nLeftarrow\":\"\\u21CD\",\"nleftrightarrow\":\"\\u21AE\",\"nLeftrightarrow\":\"\\u21CE\",\"nleq\":\"\\u2270\",\"nleqq\":\"\\u2266\\u0338\",\"nleqslant\":\"\\u2A7D\\u0338\",\"nles\":\"\\u2A7D\\u0338\",\"nless\":\"\\u226E\",\"nLl\":\"\\u22D8\\u0338\",\"nlsim\":\"\\u2274\",\"nLt\":\"\\u226A\\u20D2\",\"nlt\":\"\\u226E\",\"nltri\":\"\\u22EA\",\"nltrie\":\"\\u22EC\",\"nLtv\":\"\\u226A\\u0338\",\"nmid\":\"\\u2224\",\"NoBreak\":\"\\u2060\",\"NonBreakingSpace\":\"\\u00A0\",\"nopf\":\"\\uD835\\uDD5F\",\"Nopf\":\"\\u2115\",\"Not\":\"\\u2AEC\",\"not\":\"\\u00AC\",\"NotCongruent\":\"\\u2262\",\"NotCupCap\":\"\\u226D\",\"NotDoubleVerticalBar\":\"\\u2226\",\"NotElement\":\"\\u2209\",\"NotEqual\":\"\\u2260\",\"NotEqualTilde\":\"\\u2242\\u0338\",\"NotExists\":\"\\u2204\",\"NotGreater\":\"\\u226F\",\"NotGreaterEqual\":\"\\u2271\",\"NotGreaterFullEqual\":\"\\u2267\\u0338\",\"NotGreaterGreater\":\"\\u226B\\u0338\",\"NotGreaterLess\":\"\\u2279\",\"NotGreaterSlantEqual\":\"\\u2A7E\\u0338\",\"NotGreaterTilde\":\"\\u2275\",\"NotHumpDownHump\":\"\\u224E\\u0338\",\"NotHumpEqual\":\"\\u224F\\u0338\",\"notin\":\"\\u2209\",\"notindot\":\"\\u22F5\\u0338\",\"notinE\":\"\\u22F9\\u0338\",\"notinva\":\"\\u2209\",\"notinvb\":\"\\u22F7\",\"notinvc\":\"\\u22F6\",\"NotLeftTriangleBar\":\"\\u29CF\\u0338\",\"NotLeftTriangle\":\"\\u22EA\",\"NotLeftTriangleEqual\":\"\\u22EC\",\"NotLess\":\"\\u226E\",\"NotLessEqual\":\"\\u2270\",\"NotLessGreater\":\"\\u2278\",\"NotLessLess\":\"\\u226A\\u0338\",\"NotLessSlantEqual\":\"\\u2A7D\\u0338\",\"NotLessTilde\":\"\\u2274\",\"NotNestedGreaterGreater\":\"\\u2AA2\\u0338\",\"NotNestedLessLess\":\"\\u2AA1\\u0338\",\"notni\":\"\\u220C\",\"notniva\":\"\\u220C\",\"notnivb\":\"\\u22FE\",\"notnivc\":\"\\u22FD\",\"NotPrecedes\":\"\\u2280\",\"NotPrecedesEqual\":\"\\u2AAF\\u0338\",\"NotPrecedesSlantEqual\":\"\\u22E0\",\"NotReverseElement\":\"\\u220C\",\"NotRightTriangleBar\":\"\\u29D0\\u0338\",\"NotRightTriangle\":\"\\u22EB\",\"NotRightTriangleEqual\":\"\\u22ED\",\"NotSquareSubset\":\"\\u228F\\u0338\",\"NotSquareSubsetEqual\":\"\\u22E2\",\"NotSquareSuperset\":\"\\u2290\\u0338\",\"NotSquareSupersetEqual\":\"\\u22E3\",\"NotSubset\":\"\\u2282\\u20D2\",\"NotSubsetEqual\":\"\\u2288\",\"NotSucceeds\":\"\\u2281\",\"NotSucceedsEqual\":\"\\u2AB0\\u0338\",\"NotSucceedsSlantEqual\":\"\\u22E1\",\"NotSucceedsTilde\":\"\\u227F\\u0338\",\"NotSuperset\":\"\\u2283\\u20D2\",\"NotSupersetEqual\":\"\\u2289\",\"NotTilde\":\"\\u2241\",\"NotTildeEqual\":\"\\u2244\",\"NotTildeFullEqual\":\"\\u2247\",\"NotTildeTilde\":\"\\u2249\",\"NotVerticalBar\":\"\\u2224\",\"nparallel\":\"\\u2226\",\"npar\":\"\\u2226\",\"nparsl\":\"\\u2AFD\\u20E5\",\"npart\":\"\\u2202\\u0338\",\"npolint\":\"\\u2A14\",\"npr\":\"\\u2280\",\"nprcue\":\"\\u22E0\",\"nprec\":\"\\u2280\",\"npreceq\":\"\\u2AAF\\u0338\",\"npre\":\"\\u2AAF\\u0338\",\"nrarrc\":\"\\u2933\\u0338\",\"nrarr\":\"\\u219B\",\"nrArr\":\"\\u21CF\",\"nrarrw\":\"\\u219D\\u0338\",\"nrightarrow\":\"\\u219B\",\"nRightarrow\":\"\\u21CF\",\"nrtri\":\"\\u22EB\",\"nrtrie\":\"\\u22ED\",\"nsc\":\"\\u2281\",\"nsccue\":\"\\u22E1\",\"nsce\":\"\\u2AB0\\u0338\",\"Nscr\":\"\\uD835\\uDCA9\",\"nscr\":\"\\uD835\\uDCC3\",\"nshortmid\":\"\\u2224\",\"nshortparallel\":\"\\u2226\",\"nsim\":\"\\u2241\",\"nsime\":\"\\u2244\",\"nsimeq\":\"\\u2244\",\"nsmid\":\"\\u2224\",\"nspar\":\"\\u2226\",\"nsqsube\":\"\\u22E2\",\"nsqsupe\":\"\\u22E3\",\"nsub\":\"\\u2284\",\"nsubE\":\"\\u2AC5\\u0338\",\"nsube\":\"\\u2288\",\"nsubset\":\"\\u2282\\u20D2\",\"nsubseteq\":\"\\u2288\",\"nsubseteqq\":\"\\u2AC5\\u0338\",\"nsucc\":\"\\u2281\",\"nsucceq\":\"\\u2AB0\\u0338\",\"nsup\":\"\\u2285\",\"nsupE\":\"\\u2AC6\\u0338\",\"nsupe\":\"\\u2289\",\"nsupset\":\"\\u2283\\u20D2\",\"nsupseteq\":\"\\u2289\",\"nsupseteqq\":\"\\u2AC6\\u0338\",\"ntgl\":\"\\u2279\",\"Ntilde\":\"\\u00D1\",\"ntilde\":\"\\u00F1\",\"ntlg\":\"\\u2278\",\"ntriangleleft\":\"\\u22EA\",\"ntrianglelefteq\":\"\\u22EC\",\"ntriangleright\":\"\\u22EB\",\"ntrianglerighteq\":\"\\u22ED\",\"Nu\":\"\\u039D\",\"nu\":\"\\u03BD\",\"num\":\"#\",\"numero\":\"\\u2116\",\"numsp\":\"\\u2007\",\"nvap\":\"\\u224D\\u20D2\",\"nvdash\":\"\\u22AC\",\"nvDash\":\"\\u22AD\",\"nVdash\":\"\\u22AE\",\"nVDash\":\"\\u22AF\",\"nvge\":\"\\u2265\\u20D2\",\"nvgt\":\">\\u20D2\",\"nvHarr\":\"\\u2904\",\"nvinfin\":\"\\u29DE\",\"nvlArr\":\"\\u2902\",\"nvle\":\"\\u2264\\u20D2\",\"nvlt\":\"<\\u20D2\",\"nvltrie\":\"\\u22B4\\u20D2\",\"nvrArr\":\"\\u2903\",\"nvrtrie\":\"\\u22B5\\u20D2\",\"nvsim\":\"\\u223C\\u20D2\",\"nwarhk\":\"\\u2923\",\"nwarr\":\"\\u2196\",\"nwArr\":\"\\u21D6\",\"nwarrow\":\"\\u2196\",\"nwnear\":\"\\u2927\",\"Oacute\":\"\\u00D3\",\"oacute\":\"\\u00F3\",\"oast\":\"\\u229B\",\"Ocirc\":\"\\u00D4\",\"ocirc\":\"\\u00F4\",\"ocir\":\"\\u229A\",\"Ocy\":\"\\u041E\",\"ocy\":\"\\u043E\",\"odash\":\"\\u229D\",\"Odblac\":\"\\u0150\",\"odblac\":\"\\u0151\",\"odiv\":\"\\u2A38\",\"odot\":\"\\u2299\",\"odsold\":\"\\u29BC\",\"OElig\":\"\\u0152\",\"oelig\":\"\\u0153\",\"ofcir\":\"\\u29BF\",\"Ofr\":\"\\uD835\\uDD12\",\"ofr\":\"\\uD835\\uDD2C\",\"ogon\":\"\\u02DB\",\"Ograve\":\"\\u00D2\",\"ograve\":\"\\u00F2\",\"ogt\":\"\\u29C1\",\"ohbar\":\"\\u29B5\",\"ohm\":\"\\u03A9\",\"oint\":\"\\u222E\",\"olarr\":\"\\u21BA\",\"olcir\":\"\\u29BE\",\"olcross\":\"\\u29BB\",\"oline\":\"\\u203E\",\"olt\":\"\\u29C0\",\"Omacr\":\"\\u014C\",\"omacr\":\"\\u014D\",\"Omega\":\"\\u03A9\",\"omega\":\"\\u03C9\",\"Omicron\":\"\\u039F\",\"omicron\":\"\\u03BF\",\"omid\":\"\\u29B6\",\"ominus\":\"\\u2296\",\"Oopf\":\"\\uD835\\uDD46\",\"oopf\":\"\\uD835\\uDD60\",\"opar\":\"\\u29B7\",\"OpenCurlyDoubleQuote\":\"\\u201C\",\"OpenCurlyQuote\":\"\\u2018\",\"operp\":\"\\u29B9\",\"oplus\":\"\\u2295\",\"orarr\":\"\\u21BB\",\"Or\":\"\\u2A54\",\"or\":\"\\u2228\",\"ord\":\"\\u2A5D\",\"order\":\"\\u2134\",\"orderof\":\"\\u2134\",\"ordf\":\"\\u00AA\",\"ordm\":\"\\u00BA\",\"origof\":\"\\u22B6\",\"oror\":\"\\u2A56\",\"orslope\":\"\\u2A57\",\"orv\":\"\\u2A5B\",\"oS\":\"\\u24C8\",\"Oscr\":\"\\uD835\\uDCAA\",\"oscr\":\"\\u2134\",\"Oslash\":\"\\u00D8\",\"oslash\":\"\\u00F8\",\"osol\":\"\\u2298\",\"Otilde\":\"\\u00D5\",\"otilde\":\"\\u00F5\",\"otimesas\":\"\\u2A36\",\"Otimes\":\"\\u2A37\",\"otimes\":\"\\u2297\",\"Ouml\":\"\\u00D6\",\"ouml\":\"\\u00F6\",\"ovbar\":\"\\u233D\",\"OverBar\":\"\\u203E\",\"OverBrace\":\"\\u23DE\",\"OverBracket\":\"\\u23B4\",\"OverParenthesis\":\"\\u23DC\",\"para\":\"\\u00B6\",\"parallel\":\"\\u2225\",\"par\":\"\\u2225\",\"parsim\":\"\\u2AF3\",\"parsl\":\"\\u2AFD\",\"part\":\"\\u2202\",\"PartialD\":\"\\u2202\",\"Pcy\":\"\\u041F\",\"pcy\":\"\\u043F\",\"percnt\":\"%\",\"period\":\".\",\"permil\":\"\\u2030\",\"perp\":\"\\u22A5\",\"pertenk\":\"\\u2031\",\"Pfr\":\"\\uD835\\uDD13\",\"pfr\":\"\\uD835\\uDD2D\",\"Phi\":\"\\u03A6\",\"phi\":\"\\u03C6\",\"phiv\":\"\\u03D5\",\"phmmat\":\"\\u2133\",\"phone\":\"\\u260E\",\"Pi\":\"\\u03A0\",\"pi\":\"\\u03C0\",\"pitchfork\":\"\\u22D4\",\"piv\":\"\\u03D6\",\"planck\":\"\\u210F\",\"planckh\":\"\\u210E\",\"plankv\":\"\\u210F\",\"plusacir\":\"\\u2A23\",\"plusb\":\"\\u229E\",\"pluscir\":\"\\u2A22\",\"plus\":\"+\",\"plusdo\":\"\\u2214\",\"plusdu\":\"\\u2A25\",\"pluse\":\"\\u2A72\",\"PlusMinus\":\"\\u00B1\",\"plusmn\":\"\\u00B1\",\"plussim\":\"\\u2A26\",\"plustwo\":\"\\u2A27\",\"pm\":\"\\u00B1\",\"Poincareplane\":\"\\u210C\",\"pointint\":\"\\u2A15\",\"popf\":\"\\uD835\\uDD61\",\"Popf\":\"\\u2119\",\"pound\":\"\\u00A3\",\"prap\":\"\\u2AB7\",\"Pr\":\"\\u2ABB\",\"pr\":\"\\u227A\",\"prcue\":\"\\u227C\",\"precapprox\":\"\\u2AB7\",\"prec\":\"\\u227A\",\"preccurlyeq\":\"\\u227C\",\"Precedes\":\"\\u227A\",\"PrecedesEqual\":\"\\u2AAF\",\"PrecedesSlantEqual\":\"\\u227C\",\"PrecedesTilde\":\"\\u227E\",\"preceq\":\"\\u2AAF\",\"precnapprox\":\"\\u2AB9\",\"precneqq\":\"\\u2AB5\",\"precnsim\":\"\\u22E8\",\"pre\":\"\\u2AAF\",\"prE\":\"\\u2AB3\",\"precsim\":\"\\u227E\",\"prime\":\"\\u2032\",\"Prime\":\"\\u2033\",\"primes\":\"\\u2119\",\"prnap\":\"\\u2AB9\",\"prnE\":\"\\u2AB5\",\"prnsim\":\"\\u22E8\",\"prod\":\"\\u220F\",\"Product\":\"\\u220F\",\"profalar\":\"\\u232E\",\"profline\":\"\\u2312\",\"profsurf\":\"\\u2313\",\"prop\":\"\\u221D\",\"Proportional\":\"\\u221D\",\"Proportion\":\"\\u2237\",\"propto\":\"\\u221D\",\"prsim\":\"\\u227E\",\"prurel\":\"\\u22B0\",\"Pscr\":\"\\uD835\\uDCAB\",\"pscr\":\"\\uD835\\uDCC5\",\"Psi\":\"\\u03A8\",\"psi\":\"\\u03C8\",\"puncsp\":\"\\u2008\",\"Qfr\":\"\\uD835\\uDD14\",\"qfr\":\"\\uD835\\uDD2E\",\"qint\":\"\\u2A0C\",\"qopf\":\"\\uD835\\uDD62\",\"Qopf\":\"\\u211A\",\"qprime\":\"\\u2057\",\"Qscr\":\"\\uD835\\uDCAC\",\"qscr\":\"\\uD835\\uDCC6\",\"quaternions\":\"\\u210D\",\"quatint\":\"\\u2A16\",\"quest\":\"?\",\"questeq\":\"\\u225F\",\"quot\":\"\\\"\",\"QUOT\":\"\\\"\",\"rAarr\":\"\\u21DB\",\"race\":\"\\u223D\\u0331\",\"Racute\":\"\\u0154\",\"racute\":\"\\u0155\",\"radic\":\"\\u221A\",\"raemptyv\":\"\\u29B3\",\"rang\":\"\\u27E9\",\"Rang\":\"\\u27EB\",\"rangd\":\"\\u2992\",\"range\":\"\\u29A5\",\"rangle\":\"\\u27E9\",\"raquo\":\"\\u00BB\",\"rarrap\":\"\\u2975\",\"rarrb\":\"\\u21E5\",\"rarrbfs\":\"\\u2920\",\"rarrc\":\"\\u2933\",\"rarr\":\"\\u2192\",\"Rarr\":\"\\u21A0\",\"rArr\":\"\\u21D2\",\"rarrfs\":\"\\u291E\",\"rarrhk\":\"\\u21AA\",\"rarrlp\":\"\\u21AC\",\"rarrpl\":\"\\u2945\",\"rarrsim\":\"\\u2974\",\"Rarrtl\":\"\\u2916\",\"rarrtl\":\"\\u21A3\",\"rarrw\":\"\\u219D\",\"ratail\":\"\\u291A\",\"rAtail\":\"\\u291C\",\"ratio\":\"\\u2236\",\"rationals\":\"\\u211A\",\"rbarr\":\"\\u290D\",\"rBarr\":\"\\u290F\",\"RBarr\":\"\\u2910\",\"rbbrk\":\"\\u2773\",\"rbrace\":\"}\",\"rbrack\":\"]\",\"rbrke\":\"\\u298C\",\"rbrksld\":\"\\u298E\",\"rbrkslu\":\"\\u2990\",\"Rcaron\":\"\\u0158\",\"rcaron\":\"\\u0159\",\"Rcedil\":\"\\u0156\",\"rcedil\":\"\\u0157\",\"rceil\":\"\\u2309\",\"rcub\":\"}\",\"Rcy\":\"\\u0420\",\"rcy\":\"\\u0440\",\"rdca\":\"\\u2937\",\"rdldhar\":\"\\u2969\",\"rdquo\":\"\\u201D\",\"rdquor\":\"\\u201D\",\"rdsh\":\"\\u21B3\",\"real\":\"\\u211C\",\"realine\":\"\\u211B\",\"realpart\":\"\\u211C\",\"reals\":\"\\u211D\",\"Re\":\"\\u211C\",\"rect\":\"\\u25AD\",\"reg\":\"\\u00AE\",\"REG\":\"\\u00AE\",\"ReverseElement\":\"\\u220B\",\"ReverseEquilibrium\":\"\\u21CB\",\"ReverseUpEquilibrium\":\"\\u296F\",\"rfisht\":\"\\u297D\",\"rfloor\":\"\\u230B\",\"rfr\":\"\\uD835\\uDD2F\",\"Rfr\":\"\\u211C\",\"rHar\":\"\\u2964\",\"rhard\":\"\\u21C1\",\"rharu\":\"\\u21C0\",\"rharul\":\"\\u296C\",\"Rho\":\"\\u03A1\",\"rho\":\"\\u03C1\",\"rhov\":\"\\u03F1\",\"RightAngleBracket\":\"\\u27E9\",\"RightArrowBar\":\"\\u21E5\",\"rightarrow\":\"\\u2192\",\"RightArrow\":\"\\u2192\",\"Rightarrow\":\"\\u21D2\",\"RightArrowLeftArrow\":\"\\u21C4\",\"rightarrowtail\":\"\\u21A3\",\"RightCeiling\":\"\\u2309\",\"RightDoubleBracket\":\"\\u27E7\",\"RightDownTeeVector\":\"\\u295D\",\"RightDownVectorBar\":\"\\u2955\",\"RightDownVector\":\"\\u21C2\",\"RightFloor\":\"\\u230B\",\"rightharpoondown\":\"\\u21C1\",\"rightharpoonup\":\"\\u21C0\",\"rightleftarrows\":\"\\u21C4\",\"rightleftharpoons\":\"\\u21CC\",\"rightrightarrows\":\"\\u21C9\",\"rightsquigarrow\":\"\\u219D\",\"RightTeeArrow\":\"\\u21A6\",\"RightTee\":\"\\u22A2\",\"RightTeeVector\":\"\\u295B\",\"rightthreetimes\":\"\\u22CC\",\"RightTriangleBar\":\"\\u29D0\",\"RightTriangle\":\"\\u22B3\",\"RightTriangleEqual\":\"\\u22B5\",\"RightUpDownVector\":\"\\u294F\",\"RightUpTeeVector\":\"\\u295C\",\"RightUpVectorBar\":\"\\u2954\",\"RightUpVector\":\"\\u21BE\",\"RightVectorBar\":\"\\u2953\",\"RightVector\":\"\\u21C0\",\"ring\":\"\\u02DA\",\"risingdotseq\":\"\\u2253\",\"rlarr\":\"\\u21C4\",\"rlhar\":\"\\u21CC\",\"rlm\":\"\\u200F\",\"rmoustache\":\"\\u23B1\",\"rmoust\":\"\\u23B1\",\"rnmid\":\"\\u2AEE\",\"roang\":\"\\u27ED\",\"roarr\":\"\\u21FE\",\"robrk\":\"\\u27E7\",\"ropar\":\"\\u2986\",\"ropf\":\"\\uD835\\uDD63\",\"Ropf\":\"\\u211D\",\"roplus\":\"\\u2A2E\",\"rotimes\":\"\\u2A35\",\"RoundImplies\":\"\\u2970\",\"rpar\":\")\",\"rpargt\":\"\\u2994\",\"rppolint\":\"\\u2A12\",\"rrarr\":\"\\u21C9\",\"Rrightarrow\":\"\\u21DB\",\"rsaquo\":\"\\u203A\",\"rscr\":\"\\uD835\\uDCC7\",\"Rscr\":\"\\u211B\",\"rsh\":\"\\u21B1\",\"Rsh\":\"\\u21B1\",\"rsqb\":\"]\",\"rsquo\":\"\\u2019\",\"rsquor\":\"\\u2019\",\"rthree\":\"\\u22CC\",\"rtimes\":\"\\u22CA\",\"rtri\":\"\\u25B9\",\"rtrie\":\"\\u22B5\",\"rtrif\":\"\\u25B8\",\"rtriltri\":\"\\u29CE\",\"RuleDelayed\":\"\\u29F4\",\"ruluhar\":\"\\u2968\",\"rx\":\"\\u211E\",\"Sacute\":\"\\u015A\",\"sacute\":\"\\u015B\",\"sbquo\":\"\\u201A\",\"scap\":\"\\u2AB8\",\"Scaron\":\"\\u0160\",\"scaron\":\"\\u0161\",\"Sc\":\"\\u2ABC\",\"sc\":\"\\u227B\",\"sccue\":\"\\u227D\",\"sce\":\"\\u2AB0\",\"scE\":\"\\u2AB4\",\"Scedil\":\"\\u015E\",\"scedil\":\"\\u015F\",\"Scirc\":\"\\u015C\",\"scirc\":\"\\u015D\",\"scnap\":\"\\u2ABA\",\"scnE\":\"\\u2AB6\",\"scnsim\":\"\\u22E9\",\"scpolint\":\"\\u2A13\",\"scsim\":\"\\u227F\",\"Scy\":\"\\u0421\",\"scy\":\"\\u0441\",\"sdotb\":\"\\u22A1\",\"sdot\":\"\\u22C5\",\"sdote\":\"\\u2A66\",\"searhk\":\"\\u2925\",\"searr\":\"\\u2198\",\"seArr\":\"\\u21D8\",\"searrow\":\"\\u2198\",\"sect\":\"\\u00A7\",\"semi\":\";\",\"seswar\":\"\\u2929\",\"setminus\":\"\\u2216\",\"setmn\":\"\\u2216\",\"sext\":\"\\u2736\",\"Sfr\":\"\\uD835\\uDD16\",\"sfr\":\"\\uD835\\uDD30\",\"sfrown\":\"\\u2322\",\"sharp\":\"\\u266F\",\"SHCHcy\":\"\\u0429\",\"shchcy\":\"\\u0449\",\"SHcy\":\"\\u0428\",\"shcy\":\"\\u0448\",\"ShortDownArrow\":\"\\u2193\",\"ShortLeftArrow\":\"\\u2190\",\"shortmid\":\"\\u2223\",\"shortparallel\":\"\\u2225\",\"ShortRightArrow\":\"\\u2192\",\"ShortUpArrow\":\"\\u2191\",\"shy\":\"\\u00AD\",\"Sigma\":\"\\u03A3\",\"sigma\":\"\\u03C3\",\"sigmaf\":\"\\u03C2\",\"sigmav\":\"\\u03C2\",\"sim\":\"\\u223C\",\"simdot\":\"\\u2A6A\",\"sime\":\"\\u2243\",\"simeq\":\"\\u2243\",\"simg\":\"\\u2A9E\",\"simgE\":\"\\u2AA0\",\"siml\":\"\\u2A9D\",\"simlE\":\"\\u2A9F\",\"simne\":\"\\u2246\",\"simplus\":\"\\u2A24\",\"simrarr\":\"\\u2972\",\"slarr\":\"\\u2190\",\"SmallCircle\":\"\\u2218\",\"smallsetminus\":\"\\u2216\",\"smashp\":\"\\u2A33\",\"smeparsl\":\"\\u29E4\",\"smid\":\"\\u2223\",\"smile\":\"\\u2323\",\"smt\":\"\\u2AAA\",\"smte\":\"\\u2AAC\",\"smtes\":\"\\u2AAC\\uFE00\",\"SOFTcy\":\"\\u042C\",\"softcy\":\"\\u044C\",\"solbar\":\"\\u233F\",\"solb\":\"\\u29C4\",\"sol\":\"/\",\"Sopf\":\"\\uD835\\uDD4A\",\"sopf\":\"\\uD835\\uDD64\",\"spades\":\"\\u2660\",\"spadesuit\":\"\\u2660\",\"spar\":\"\\u2225\",\"sqcap\":\"\\u2293\",\"sqcaps\":\"\\u2293\\uFE00\",\"sqcup\":\"\\u2294\",\"sqcups\":\"\\u2294\\uFE00\",\"Sqrt\":\"\\u221A\",\"sqsub\":\"\\u228F\",\"sqsube\":\"\\u2291\",\"sqsubset\":\"\\u228F\",\"sqsubseteq\":\"\\u2291\",\"sqsup\":\"\\u2290\",\"sqsupe\":\"\\u2292\",\"sqsupset\":\"\\u2290\",\"sqsupseteq\":\"\\u2292\",\"square\":\"\\u25A1\",\"Square\":\"\\u25A1\",\"SquareIntersection\":\"\\u2293\",\"SquareSubset\":\"\\u228F\",\"SquareSubsetEqual\":\"\\u2291\",\"SquareSuperset\":\"\\u2290\",\"SquareSupersetEqual\":\"\\u2292\",\"SquareUnion\":\"\\u2294\",\"squarf\":\"\\u25AA\",\"squ\":\"\\u25A1\",\"squf\":\"\\u25AA\",\"srarr\":\"\\u2192\",\"Sscr\":\"\\uD835\\uDCAE\",\"sscr\":\"\\uD835\\uDCC8\",\"ssetmn\":\"\\u2216\",\"ssmile\":\"\\u2323\",\"sstarf\":\"\\u22C6\",\"Star\":\"\\u22C6\",\"star\":\"\\u2606\",\"starf\":\"\\u2605\",\"straightepsilon\":\"\\u03F5\",\"straightphi\":\"\\u03D5\",\"strns\":\"\\u00AF\",\"sub\":\"\\u2282\",\"Sub\":\"\\u22D0\",\"subdot\":\"\\u2ABD\",\"subE\":\"\\u2AC5\",\"sube\":\"\\u2286\",\"subedot\":\"\\u2AC3\",\"submult\":\"\\u2AC1\",\"subnE\":\"\\u2ACB\",\"subne\":\"\\u228A\",\"subplus\":\"\\u2ABF\",\"subrarr\":\"\\u2979\",\"subset\":\"\\u2282\",\"Subset\":\"\\u22D0\",\"subseteq\":\"\\u2286\",\"subseteqq\":\"\\u2AC5\",\"SubsetEqual\":\"\\u2286\",\"subsetneq\":\"\\u228A\",\"subsetneqq\":\"\\u2ACB\",\"subsim\":\"\\u2AC7\",\"subsub\":\"\\u2AD5\",\"subsup\":\"\\u2AD3\",\"succapprox\":\"\\u2AB8\",\"succ\":\"\\u227B\",\"succcurlyeq\":\"\\u227D\",\"Succeeds\":\"\\u227B\",\"SucceedsEqual\":\"\\u2AB0\",\"SucceedsSlantEqual\":\"\\u227D\",\"SucceedsTilde\":\"\\u227F\",\"succeq\":\"\\u2AB0\",\"succnapprox\":\"\\u2ABA\",\"succneqq\":\"\\u2AB6\",\"succnsim\":\"\\u22E9\",\"succsim\":\"\\u227F\",\"SuchThat\":\"\\u220B\",\"sum\":\"\\u2211\",\"Sum\":\"\\u2211\",\"sung\":\"\\u266A\",\"sup1\":\"\\u00B9\",\"sup2\":\"\\u00B2\",\"sup3\":\"\\u00B3\",\"sup\":\"\\u2283\",\"Sup\":\"\\u22D1\",\"supdot\":\"\\u2ABE\",\"supdsub\":\"\\u2AD8\",\"supE\":\"\\u2AC6\",\"supe\":\"\\u2287\",\"supedot\":\"\\u2AC4\",\"Superset\":\"\\u2283\",\"SupersetEqual\":\"\\u2287\",\"suphsol\":\"\\u27C9\",\"suphsub\":\"\\u2AD7\",\"suplarr\":\"\\u297B\",\"supmult\":\"\\u2AC2\",\"supnE\":\"\\u2ACC\",\"supne\":\"\\u228B\",\"supplus\":\"\\u2AC0\",\"supset\":\"\\u2283\",\"Supset\":\"\\u22D1\",\"supseteq\":\"\\u2287\",\"supseteqq\":\"\\u2AC6\",\"supsetneq\":\"\\u228B\",\"supsetneqq\":\"\\u2ACC\",\"supsim\":\"\\u2AC8\",\"supsub\":\"\\u2AD4\",\"supsup\":\"\\u2AD6\",\"swarhk\":\"\\u2926\",\"swarr\":\"\\u2199\",\"swArr\":\"\\u21D9\",\"swarrow\":\"\\u2199\",\"swnwar\":\"\\u292A\",\"szlig\":\"\\u00DF\",\"Tab\":\"\\t\",\"target\":\"\\u2316\",\"Tau\":\"\\u03A4\",\"tau\":\"\\u03C4\",\"tbrk\":\"\\u23B4\",\"Tcaron\":\"\\u0164\",\"tcaron\":\"\\u0165\",\"Tcedil\":\"\\u0162\",\"tcedil\":\"\\u0163\",\"Tcy\":\"\\u0422\",\"tcy\":\"\\u0442\",\"tdot\":\"\\u20DB\",\"telrec\":\"\\u2315\",\"Tfr\":\"\\uD835\\uDD17\",\"tfr\":\"\\uD835\\uDD31\",\"there4\":\"\\u2234\",\"therefore\":\"\\u2234\",\"Therefore\":\"\\u2234\",\"Theta\":\"\\u0398\",\"theta\":\"\\u03B8\",\"thetasym\":\"\\u03D1\",\"thetav\":\"\\u03D1\",\"thickapprox\":\"\\u2248\",\"thicksim\":\"\\u223C\",\"ThickSpace\":\"\\u205F\\u200A\",\"ThinSpace\":\"\\u2009\",\"thinsp\":\"\\u2009\",\"thkap\":\"\\u2248\",\"thksim\":\"\\u223C\",\"THORN\":\"\\u00DE\",\"thorn\":\"\\u00FE\",\"tilde\":\"\\u02DC\",\"Tilde\":\"\\u223C\",\"TildeEqual\":\"\\u2243\",\"TildeFullEqual\":\"\\u2245\",\"TildeTilde\":\"\\u2248\",\"timesbar\":\"\\u2A31\",\"timesb\":\"\\u22A0\",\"times\":\"\\u00D7\",\"timesd\":\"\\u2A30\",\"tint\":\"\\u222D\",\"toea\":\"\\u2928\",\"topbot\":\"\\u2336\",\"topcir\":\"\\u2AF1\",\"top\":\"\\u22A4\",\"Topf\":\"\\uD835\\uDD4B\",\"topf\":\"\\uD835\\uDD65\",\"topfork\":\"\\u2ADA\",\"tosa\":\"\\u2929\",\"tprime\":\"\\u2034\",\"trade\":\"\\u2122\",\"TRADE\":\"\\u2122\",\"triangle\":\"\\u25B5\",\"triangledown\":\"\\u25BF\",\"triangleleft\":\"\\u25C3\",\"trianglelefteq\":\"\\u22B4\",\"triangleq\":\"\\u225C\",\"triangleright\":\"\\u25B9\",\"trianglerighteq\":\"\\u22B5\",\"tridot\":\"\\u25EC\",\"trie\":\"\\u225C\",\"triminus\":\"\\u2A3A\",\"TripleDot\":\"\\u20DB\",\"triplus\":\"\\u2A39\",\"trisb\":\"\\u29CD\",\"tritime\":\"\\u2A3B\",\"trpezium\":\"\\u23E2\",\"Tscr\":\"\\uD835\\uDCAF\",\"tscr\":\"\\uD835\\uDCC9\",\"TScy\":\"\\u0426\",\"tscy\":\"\\u0446\",\"TSHcy\":\"\\u040B\",\"tshcy\":\"\\u045B\",\"Tstrok\":\"\\u0166\",\"tstrok\":\"\\u0167\",\"twixt\":\"\\u226C\",\"twoheadleftarrow\":\"\\u219E\",\"twoheadrightarrow\":\"\\u21A0\",\"Uacute\":\"\\u00DA\",\"uacute\":\"\\u00FA\",\"uarr\":\"\\u2191\",\"Uarr\":\"\\u219F\",\"uArr\":\"\\u21D1\",\"Uarrocir\":\"\\u2949\",\"Ubrcy\":\"\\u040E\",\"ubrcy\":\"\\u045E\",\"Ubreve\":\"\\u016C\",\"ubreve\":\"\\u016D\",\"Ucirc\":\"\\u00DB\",\"ucirc\":\"\\u00FB\",\"Ucy\":\"\\u0423\",\"ucy\":\"\\u0443\",\"udarr\":\"\\u21C5\",\"Udblac\":\"\\u0170\",\"udblac\":\"\\u0171\",\"udhar\":\"\\u296E\",\"ufisht\":\"\\u297E\",\"Ufr\":\"\\uD835\\uDD18\",\"ufr\":\"\\uD835\\uDD32\",\"Ugrave\":\"\\u00D9\",\"ugrave\":\"\\u00F9\",\"uHar\":\"\\u2963\",\"uharl\":\"\\u21BF\",\"uharr\":\"\\u21BE\",\"uhblk\":\"\\u2580\",\"ulcorn\":\"\\u231C\",\"ulcorner\":\"\\u231C\",\"ulcrop\":\"\\u230F\",\"ultri\":\"\\u25F8\",\"Umacr\":\"\\u016A\",\"umacr\":\"\\u016B\",\"uml\":\"\\u00A8\",\"UnderBar\":\"_\",\"UnderBrace\":\"\\u23DF\",\"UnderBracket\":\"\\u23B5\",\"UnderParenthesis\":\"\\u23DD\",\"Union\":\"\\u22C3\",\"UnionPlus\":\"\\u228E\",\"Uogon\":\"\\u0172\",\"uogon\":\"\\u0173\",\"Uopf\":\"\\uD835\\uDD4C\",\"uopf\":\"\\uD835\\uDD66\",\"UpArrowBar\":\"\\u2912\",\"uparrow\":\"\\u2191\",\"UpArrow\":\"\\u2191\",\"Uparrow\":\"\\u21D1\",\"UpArrowDownArrow\":\"\\u21C5\",\"updownarrow\":\"\\u2195\",\"UpDownArrow\":\"\\u2195\",\"Updownarrow\":\"\\u21D5\",\"UpEquilibrium\":\"\\u296E\",\"upharpoonleft\":\"\\u21BF\",\"upharpoonright\":\"\\u21BE\",\"uplus\":\"\\u228E\",\"UpperLeftArrow\":\"\\u2196\",\"UpperRightArrow\":\"\\u2197\",\"upsi\":\"\\u03C5\",\"Upsi\":\"\\u03D2\",\"upsih\":\"\\u03D2\",\"Upsilon\":\"\\u03A5\",\"upsilon\":\"\\u03C5\",\"UpTeeArrow\":\"\\u21A5\",\"UpTee\":\"\\u22A5\",\"upuparrows\":\"\\u21C8\",\"urcorn\":\"\\u231D\",\"urcorner\":\"\\u231D\",\"urcrop\":\"\\u230E\",\"Uring\":\"\\u016E\",\"uring\":\"\\u016F\",\"urtri\":\"\\u25F9\",\"Uscr\":\"\\uD835\\uDCB0\",\"uscr\":\"\\uD835\\uDCCA\",\"utdot\":\"\\u22F0\",\"Utilde\":\"\\u0168\",\"utilde\":\"\\u0169\",\"utri\":\"\\u25B5\",\"utrif\":\"\\u25B4\",\"uuarr\":\"\\u21C8\",\"Uuml\":\"\\u00DC\",\"uuml\":\"\\u00FC\",\"uwangle\":\"\\u29A7\",\"vangrt\":\"\\u299C\",\"varepsilon\":\"\\u03F5\",\"varkappa\":\"\\u03F0\",\"varnothing\":\"\\u2205\",\"varphi\":\"\\u03D5\",\"varpi\":\"\\u03D6\",\"varpropto\":\"\\u221D\",\"varr\":\"\\u2195\",\"vArr\":\"\\u21D5\",\"varrho\":\"\\u03F1\",\"varsigma\":\"\\u03C2\",\"varsubsetneq\":\"\\u228A\\uFE00\",\"varsubsetneqq\":\"\\u2ACB\\uFE00\",\"varsupsetneq\":\"\\u228B\\uFE00\",\"varsupsetneqq\":\"\\u2ACC\\uFE00\",\"vartheta\":\"\\u03D1\",\"vartriangleleft\":\"\\u22B2\",\"vartriangleright\":\"\\u22B3\",\"vBar\":\"\\u2AE8\",\"Vbar\":\"\\u2AEB\",\"vBarv\":\"\\u2AE9\",\"Vcy\":\"\\u0412\",\"vcy\":\"\\u0432\",\"vdash\":\"\\u22A2\",\"vDash\":\"\\u22A8\",\"Vdash\":\"\\u22A9\",\"VDash\":\"\\u22AB\",\"Vdashl\":\"\\u2AE6\",\"veebar\":\"\\u22BB\",\"vee\":\"\\u2228\",\"Vee\":\"\\u22C1\",\"veeeq\":\"\\u225A\",\"vellip\":\"\\u22EE\",\"verbar\":\"|\",\"Verbar\":\"\\u2016\",\"vert\":\"|\",\"Vert\":\"\\u2016\",\"VerticalBar\":\"\\u2223\",\"VerticalLine\":\"|\",\"VerticalSeparator\":\"\\u2758\",\"VerticalTilde\":\"\\u2240\",\"VeryThinSpace\":\"\\u200A\",\"Vfr\":\"\\uD835\\uDD19\",\"vfr\":\"\\uD835\\uDD33\",\"vltri\":\"\\u22B2\",\"vnsub\":\"\\u2282\\u20D2\",\"vnsup\":\"\\u2283\\u20D2\",\"Vopf\":\"\\uD835\\uDD4D\",\"vopf\":\"\\uD835\\uDD67\",\"vprop\":\"\\u221D\",\"vrtri\":\"\\u22B3\",\"Vscr\":\"\\uD835\\uDCB1\",\"vscr\":\"\\uD835\\uDCCB\",\"vsubnE\":\"\\u2ACB\\uFE00\",\"vsubne\":\"\\u228A\\uFE00\",\"vsupnE\":\"\\u2ACC\\uFE00\",\"vsupne\":\"\\u228B\\uFE00\",\"Vvdash\":\"\\u22AA\",\"vzigzag\":\"\\u299A\",\"Wcirc\":\"\\u0174\",\"wcirc\":\"\\u0175\",\"wedbar\":\"\\u2A5F\",\"wedge\":\"\\u2227\",\"Wedge\":\"\\u22C0\",\"wedgeq\":\"\\u2259\",\"weierp\":\"\\u2118\",\"Wfr\":\"\\uD835\\uDD1A\",\"wfr\":\"\\uD835\\uDD34\",\"Wopf\":\"\\uD835\\uDD4E\",\"wopf\":\"\\uD835\\uDD68\",\"wp\":\"\\u2118\",\"wr\":\"\\u2240\",\"wreath\":\"\\u2240\",\"Wscr\":\"\\uD835\\uDCB2\",\"wscr\":\"\\uD835\\uDCCC\",\"xcap\":\"\\u22C2\",\"xcirc\":\"\\u25EF\",\"xcup\":\"\\u22C3\",\"xdtri\":\"\\u25BD\",\"Xfr\":\"\\uD835\\uDD1B\",\"xfr\":\"\\uD835\\uDD35\",\"xharr\":\"\\u27F7\",\"xhArr\":\"\\u27FA\",\"Xi\":\"\\u039E\",\"xi\":\"\\u03BE\",\"xlarr\":\"\\u27F5\",\"xlArr\":\"\\u27F8\",\"xmap\":\"\\u27FC\",\"xnis\":\"\\u22FB\",\"xodot\":\"\\u2A00\",\"Xopf\":\"\\uD835\\uDD4F\",\"xopf\":\"\\uD835\\uDD69\",\"xoplus\":\"\\u2A01\",\"xotime\":\"\\u2A02\",\"xrarr\":\"\\u27F6\",\"xrArr\":\"\\u27F9\",\"Xscr\":\"\\uD835\\uDCB3\",\"xscr\":\"\\uD835\\uDCCD\",\"xsqcup\":\"\\u2A06\",\"xuplus\":\"\\u2A04\",\"xutri\":\"\\u25B3\",\"xvee\":\"\\u22C1\",\"xwedge\":\"\\u22C0\",\"Yacute\":\"\\u00DD\",\"yacute\":\"\\u00FD\",\"YAcy\":\"\\u042F\",\"yacy\":\"\\u044F\",\"Ycirc\":\"\\u0176\",\"ycirc\":\"\\u0177\",\"Ycy\":\"\\u042B\",\"ycy\":\"\\u044B\",\"yen\":\"\\u00A5\",\"Yfr\":\"\\uD835\\uDD1C\",\"yfr\":\"\\uD835\\uDD36\",\"YIcy\":\"\\u0407\",\"yicy\":\"\\u0457\",\"Yopf\":\"\\uD835\\uDD50\",\"yopf\":\"\\uD835\\uDD6A\",\"Yscr\":\"\\uD835\\uDCB4\",\"yscr\":\"\\uD835\\uDCCE\",\"YUcy\":\"\\u042E\",\"yucy\":\"\\u044E\",\"yuml\":\"\\u00FF\",\"Yuml\":\"\\u0178\",\"Zacute\":\"\\u0179\",\"zacute\":\"\\u017A\",\"Zcaron\":\"\\u017D\",\"zcaron\":\"\\u017E\",\"Zcy\":\"\\u0417\",\"zcy\":\"\\u0437\",\"Zdot\":\"\\u017B\",\"zdot\":\"\\u017C\",\"zeetrf\":\"\\u2128\",\"ZeroWidthSpace\":\"\\u200B\",\"Zeta\":\"\\u0396\",\"zeta\":\"\\u03B6\",\"zfr\":\"\\uD835\\uDD37\",\"Zfr\":\"\\u2128\",\"ZHcy\":\"\\u0416\",\"zhcy\":\"\\u0436\",\"zigrarr\":\"\\u21DD\",\"zopf\":\"\\uD835\\uDD6B\",\"Zopf\":\"\\u2124\",\"Zscr\":\"\\uD835\\uDCB5\",\"zscr\":\"\\uD835\\uDCCF\",\"zwj\":\"\\u200D\",\"zwnj\":\"\\u200C\"}","{\"Aacute\":\"\\u00C1\",\"aacute\":\"\\u00E1\",\"Acirc\":\"\\u00C2\",\"acirc\":\"\\u00E2\",\"acute\":\"\\u00B4\",\"AElig\":\"\\u00C6\",\"aelig\":\"\\u00E6\",\"Agrave\":\"\\u00C0\",\"agrave\":\"\\u00E0\",\"amp\":\"&\",\"AMP\":\"&\",\"Aring\":\"\\u00C5\",\"aring\":\"\\u00E5\",\"Atilde\":\"\\u00C3\",\"atilde\":\"\\u00E3\",\"Auml\":\"\\u00C4\",\"auml\":\"\\u00E4\",\"brvbar\":\"\\u00A6\",\"Ccedil\":\"\\u00C7\",\"ccedil\":\"\\u00E7\",\"cedil\":\"\\u00B8\",\"cent\":\"\\u00A2\",\"copy\":\"\\u00A9\",\"COPY\":\"\\u00A9\",\"curren\":\"\\u00A4\",\"deg\":\"\\u00B0\",\"divide\":\"\\u00F7\",\"Eacute\":\"\\u00C9\",\"eacute\":\"\\u00E9\",\"Ecirc\":\"\\u00CA\",\"ecirc\":\"\\u00EA\",\"Egrave\":\"\\u00C8\",\"egrave\":\"\\u00E8\",\"ETH\":\"\\u00D0\",\"eth\":\"\\u00F0\",\"Euml\":\"\\u00CB\",\"euml\":\"\\u00EB\",\"frac12\":\"\\u00BD\",\"frac14\":\"\\u00BC\",\"frac34\":\"\\u00BE\",\"gt\":\">\",\"GT\":\">\",\"Iacute\":\"\\u00CD\",\"iacute\":\"\\u00ED\",\"Icirc\":\"\\u00CE\",\"icirc\":\"\\u00EE\",\"iexcl\":\"\\u00A1\",\"Igrave\":\"\\u00CC\",\"igrave\":\"\\u00EC\",\"iquest\":\"\\u00BF\",\"Iuml\":\"\\u00CF\",\"iuml\":\"\\u00EF\",\"laquo\":\"\\u00AB\",\"lt\":\"<\",\"LT\":\"<\",\"macr\":\"\\u00AF\",\"micro\":\"\\u00B5\",\"middot\":\"\\u00B7\",\"nbsp\":\"\\u00A0\",\"not\":\"\\u00AC\",\"Ntilde\":\"\\u00D1\",\"ntilde\":\"\\u00F1\",\"Oacute\":\"\\u00D3\",\"oacute\":\"\\u00F3\",\"Ocirc\":\"\\u00D4\",\"ocirc\":\"\\u00F4\",\"Ograve\":\"\\u00D2\",\"ograve\":\"\\u00F2\",\"ordf\":\"\\u00AA\",\"ordm\":\"\\u00BA\",\"Oslash\":\"\\u00D8\",\"oslash\":\"\\u00F8\",\"Otilde\":\"\\u00D5\",\"otilde\":\"\\u00F5\",\"Ouml\":\"\\u00D6\",\"ouml\":\"\\u00F6\",\"para\":\"\\u00B6\",\"plusmn\":\"\\u00B1\",\"pound\":\"\\u00A3\",\"quot\":\"\\\"\",\"QUOT\":\"\\\"\",\"raquo\":\"\\u00BB\",\"reg\":\"\\u00AE\",\"REG\":\"\\u00AE\",\"sect\":\"\\u00A7\",\"shy\":\"\\u00AD\",\"sup1\":\"\\u00B9\",\"sup2\":\"\\u00B2\",\"sup3\":\"\\u00B3\",\"szlig\":\"\\u00DF\",\"THORN\":\"\\u00DE\",\"thorn\":\"\\u00FE\",\"times\":\"\\u00D7\",\"Uacute\":\"\\u00DA\",\"uacute\":\"\\u00FA\",\"Ucirc\":\"\\u00DB\",\"ucirc\":\"\\u00FB\",\"Ugrave\":\"\\u00D9\",\"ugrave\":\"\\u00F9\",\"uml\":\"\\u00A8\",\"Uuml\":\"\\u00DC\",\"uuml\":\"\\u00FC\",\"Yacute\":\"\\u00DD\",\"yacute\":\"\\u00FD\",\"yen\":\"\\u00A5\",\"yuml\":\"\\u00FF\"}","{\"amp\":\"&\",\"apos\":\"'\",\"gt\":\">\",\"lt\":\"<\",\"quot\":\"\\\"\"}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","/*!\r\n * EventEmitter2\r\n * https://github.com/hij1nx/EventEmitter2\r\n *\r\n * Copyright (c) 2013 hij1nx\r\n * Licensed under the MIT license.\r\n */\r\n;!function(undefined) {\r\n\r\n var isArray = Array.isArray ? Array.isArray : function _isArray(obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n };\r\n var defaultMaxListeners = 10;\r\n\r\n function init() {\r\n this._events = {};\r\n if (this._conf) {\r\n configure.call(this, this._conf);\r\n }\r\n }\r\n\r\n function configure(conf) {\r\n if (conf) {\r\n\r\n this._conf = conf;\r\n\r\n conf.delimiter && (this.delimiter = conf.delimiter);\r\n conf.maxListeners && (this._events.maxListeners = conf.maxListeners);\r\n conf.wildcard && (this.wildcard = conf.wildcard);\r\n conf.newListener && (this.newListener = conf.newListener);\r\n\r\n if (this.wildcard) {\r\n this.listenerTree = {};\r\n }\r\n }\r\n }\r\n\r\n function EventEmitter(conf) {\r\n this._events = {};\r\n this.newListener = false;\r\n configure.call(this, conf);\r\n }\r\n EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property\r\n\r\n //\r\n // Attention, function return type now is array, always !\r\n // It has zero elements if no any matches found and one or more\r\n // elements (leafs) if there are matches\r\n //\r\n function searchListenerTree(handlers, type, tree, i) {\r\n if (!tree) {\r\n return [];\r\n }\r\n var listeners=[], leaf, len, branch, xTree, xxTree, isolatedBranch, endReached,\r\n typeLength = type.length, currentType = type[i], nextType = type[i+1];\r\n if (i === typeLength && tree._listeners) {\r\n //\r\n // If at the end of the event(s) list and the tree has listeners\r\n // invoke those listeners.\r\n //\r\n if (typeof tree._listeners === 'function') {\r\n handlers && handlers.push(tree._listeners);\r\n return [tree];\r\n } else {\r\n for (leaf = 0, len = tree._listeners.length; leaf < len; leaf++) {\r\n handlers && handlers.push(tree._listeners[leaf]);\r\n }\r\n return [tree];\r\n }\r\n }\r\n\r\n if ((currentType === '*' || currentType === '**') || tree[currentType]) {\r\n //\r\n // If the event emitted is '*' at this part\r\n // or there is a concrete match at this patch\r\n //\r\n if (currentType === '*') {\r\n for (branch in tree) {\r\n if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+1));\r\n }\r\n }\r\n return listeners;\r\n } else if(currentType === '**') {\r\n endReached = (i+1 === typeLength || (i+2 === typeLength && nextType === '*'));\r\n if(endReached && tree._listeners) {\r\n // The next element has a _listeners, add it to the handlers.\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree, typeLength));\r\n }\r\n\r\n for (branch in tree) {\r\n if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {\r\n if(branch === '*' || branch === '**') {\r\n if(tree[branch]._listeners && !endReached) {\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], typeLength));\r\n }\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));\r\n } else if(branch === nextType) {\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+2));\r\n } else {\r\n // No match on this one, shift into the tree but not in the type array.\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));\r\n }\r\n }\r\n }\r\n return listeners;\r\n }\r\n\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[currentType], i+1));\r\n }\r\n\r\n xTree = tree['*'];\r\n if (xTree) {\r\n //\r\n // If the listener tree will allow any match for this part,\r\n // then recursively explore all branches of the tree\r\n //\r\n searchListenerTree(handlers, type, xTree, i+1);\r\n }\r\n\r\n xxTree = tree['**'];\r\n if(xxTree) {\r\n if(i < typeLength) {\r\n if(xxTree._listeners) {\r\n // If we have a listener on a '**', it will catch all, so add its handler.\r\n searchListenerTree(handlers, type, xxTree, typeLength);\r\n }\r\n\r\n // Build arrays of matching next branches and others.\r\n for(branch in xxTree) {\r\n if(branch !== '_listeners' && xxTree.hasOwnProperty(branch)) {\r\n if(branch === nextType) {\r\n // We know the next element will match, so jump twice.\r\n searchListenerTree(handlers, type, xxTree[branch], i+2);\r\n } else if(branch === currentType) {\r\n // Current node matches, move into the tree.\r\n searchListenerTree(handlers, type, xxTree[branch], i+1);\r\n } else {\r\n isolatedBranch = {};\r\n isolatedBranch[branch] = xxTree[branch];\r\n searchListenerTree(handlers, type, { '**': isolatedBranch }, i+1);\r\n }\r\n }\r\n }\r\n } else if(xxTree._listeners) {\r\n // We have reached the end and still on a '**'\r\n searchListenerTree(handlers, type, xxTree, typeLength);\r\n } else if(xxTree['*'] && xxTree['*']._listeners) {\r\n searchListenerTree(handlers, type, xxTree['*'], typeLength);\r\n }\r\n }\r\n\r\n return listeners;\r\n }\r\n\r\n function growListenerTree(type, listener) {\r\n\r\n type = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n\r\n //\r\n // Looks for two consecutive '**', if so, don't add the event at all.\r\n //\r\n for(var i = 0, len = type.length; i+1 < len; i++) {\r\n if(type[i] === '**' && type[i+1] === '**') {\r\n return;\r\n }\r\n }\r\n\r\n var tree = this.listenerTree;\r\n var name = type.shift();\r\n\r\n while (name) {\r\n\r\n if (!tree[name]) {\r\n tree[name] = {};\r\n }\r\n\r\n tree = tree[name];\r\n\r\n if (type.length === 0) {\r\n\r\n if (!tree._listeners) {\r\n tree._listeners = listener;\r\n }\r\n else if(typeof tree._listeners === 'function') {\r\n tree._listeners = [tree._listeners, listener];\r\n }\r\n else if (isArray(tree._listeners)) {\r\n\r\n tree._listeners.push(listener);\r\n\r\n if (!tree._listeners.warned) {\r\n\r\n var m = defaultMaxListeners;\r\n\r\n if (typeof this._events.maxListeners !== 'undefined') {\r\n m = this._events.maxListeners;\r\n }\r\n\r\n if (m > 0 && tree._listeners.length > m) {\r\n\r\n tree._listeners.warned = true;\r\n console.error('(node) warning: possible EventEmitter memory ' +\r\n 'leak detected. %d listeners added. ' +\r\n 'Use emitter.setMaxListeners() to increase limit.',\r\n tree._listeners.length);\r\n if(console.trace){\r\n console.trace();\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n name = type.shift();\r\n }\r\n return true;\r\n }\r\n\r\n // By default EventEmitters will print a warning if more than\r\n // 10 listeners are added to it. This is a useful default which\r\n // helps finding memory leaks.\r\n //\r\n // Obviously not all Emitters should be limited to 10. This function allows\r\n // that to be increased. Set to zero for unlimited.\r\n\r\n EventEmitter.prototype.delimiter = '.';\r\n\r\n EventEmitter.prototype.setMaxListeners = function(n) {\r\n this._events || init.call(this);\r\n this._events.maxListeners = n;\r\n if (!this._conf) this._conf = {};\r\n this._conf.maxListeners = n;\r\n };\r\n\r\n EventEmitter.prototype.event = '';\r\n\r\n EventEmitter.prototype.once = function(event, fn) {\r\n this.many(event, 1, fn);\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.many = function(event, ttl, fn) {\r\n var self = this;\r\n\r\n if (typeof fn !== 'function') {\r\n throw new Error('many only accepts instances of Function');\r\n }\r\n\r\n function listener() {\r\n if (--ttl === 0) {\r\n self.off(event, listener);\r\n }\r\n fn.apply(this, arguments);\r\n }\r\n\r\n listener._origin = fn;\r\n\r\n this.on(event, listener);\r\n\r\n return self;\r\n };\r\n\r\n EventEmitter.prototype.emit = function() {\r\n\r\n this._events || init.call(this);\r\n\r\n var type = arguments[0];\r\n\r\n if (type === 'newListener' && !this.newListener) {\r\n if (!this._events.newListener) {\r\n return false;\r\n }\r\n }\r\n\r\n var al = arguments.length;\r\n var args,l,i,j;\r\n var handler;\r\n\r\n if (this._all && this._all.length) {\r\n handler = this._all.slice();\r\n if (al > 3) {\r\n args = new Array(al);\r\n for (j = 1; j < al; j++) args[j] = arguments[j];\r\n }\r\n\r\n for (i = 0, l = handler.length; i < l; i++) {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n handler[i].call(this, type);\r\n break;\r\n case 2:\r\n handler[i].call(this, type, arguments[1]);\r\n break;\r\n case 3:\r\n handler[i].call(this, type, arguments[1], arguments[2]);\r\n break;\r\n default:\r\n handler[i].apply(this, args);\r\n }\r\n }\r\n }\r\n\r\n if (this.wildcard) {\r\n handler = [];\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n searchListenerTree.call(this, handler, ns, this.listenerTree, 0);\r\n } else {\r\n handler = this._events[type];\r\n if (typeof handler === 'function') {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n handler.call(this);\r\n break;\r\n case 2:\r\n handler.call(this, arguments[1]);\r\n break;\r\n case 3:\r\n handler.call(this, arguments[1], arguments[2]);\r\n break;\r\n default:\r\n args = new Array(al - 1);\r\n for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n handler.apply(this, args);\r\n }\r\n return true;\r\n } else if (handler) {\r\n // need to make copy of handlers because list can change in the middle\r\n // of emit call\r\n handler = handler.slice();\r\n }\r\n }\r\n\r\n if (handler && handler.length) {\r\n if (al > 3) {\r\n args = new Array(al - 1);\r\n for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n }\r\n for (i = 0, l = handler.length; i < l; i++) {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n handler[i].call(this);\r\n break;\r\n case 2:\r\n handler[i].call(this, arguments[1]);\r\n break;\r\n case 3:\r\n handler[i].call(this, arguments[1], arguments[2]);\r\n break;\r\n default:\r\n handler[i].apply(this, args);\r\n }\r\n }\r\n return true;\r\n } else if (!this._all && type === 'error') {\r\n if (arguments[1] instanceof Error) {\r\n throw arguments[1]; // Unhandled 'error' event\r\n } else {\r\n throw new Error(\"Uncaught, unspecified 'error' event.\");\r\n }\r\n return false;\r\n }\r\n\r\n return !!this._all;\r\n };\r\n\r\n EventEmitter.prototype.emitAsync = function() {\r\n\r\n this._events || init.call(this);\r\n\r\n var type = arguments[0];\r\n\r\n if (type === 'newListener' && !this.newListener) {\r\n if (!this._events.newListener) { return Promise.resolve([false]); }\r\n }\r\n\r\n var promises= [];\r\n\r\n var al = arguments.length;\r\n var args,l,i,j;\r\n var handler;\r\n\r\n if (this._all) {\r\n if (al > 3) {\r\n args = new Array(al);\r\n for (j = 1; j < al; j++) args[j] = arguments[j];\r\n }\r\n for (i = 0, l = this._all.length; i < l; i++) {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n promises.push(this._all[i].call(this, type));\r\n break;\r\n case 2:\r\n promises.push(this._all[i].call(this, type, arguments[1]));\r\n break;\r\n case 3:\r\n promises.push(this._all[i].call(this, type, arguments[1], arguments[2]));\r\n break;\r\n default:\r\n promises.push(this._all[i].apply(this, args));\r\n }\r\n }\r\n }\r\n\r\n if (this.wildcard) {\r\n handler = [];\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n searchListenerTree.call(this, handler, ns, this.listenerTree, 0);\r\n } else {\r\n handler = this._events[type];\r\n }\r\n\r\n if (typeof handler === 'function') {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n promises.push(handler.call(this));\r\n break;\r\n case 2:\r\n promises.push(handler.call(this, arguments[1]));\r\n break;\r\n case 3:\r\n promises.push(handler.call(this, arguments[1], arguments[2]));\r\n break;\r\n default:\r\n args = new Array(al - 1);\r\n for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n promises.push(handler.apply(this, args));\r\n }\r\n } else if (handler && handler.length) {\r\n if (al > 3) {\r\n args = new Array(al - 1);\r\n for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n }\r\n for (i = 0, l = handler.length; i < l; i++) {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n promises.push(handler[i].call(this));\r\n break;\r\n case 2:\r\n promises.push(handler[i].call(this, arguments[1]));\r\n break;\r\n case 3:\r\n promises.push(handler[i].call(this, arguments[1], arguments[2]));\r\n break;\r\n default:\r\n promises.push(handler[i].apply(this, args));\r\n }\r\n }\r\n } else if (!this._all && type === 'error') {\r\n if (arguments[1] instanceof Error) {\r\n return Promise.reject(arguments[1]); // Unhandled 'error' event\r\n } else {\r\n return Promise.reject(\"Uncaught, unspecified 'error' event.\");\r\n }\r\n }\r\n\r\n return Promise.all(promises);\r\n };\r\n\r\n EventEmitter.prototype.on = function(type, listener) {\r\n\r\n if (typeof type === 'function') {\r\n this.onAny(type);\r\n return this;\r\n }\r\n\r\n if (typeof listener !== 'function') {\r\n throw new Error('on only accepts instances of Function');\r\n }\r\n this._events || init.call(this);\r\n\r\n // To avoid recursion in the case that type == \"newListeners\"! Before\r\n // adding it to the listeners, first emit \"newListeners\".\r\n this.emit('newListener', type, listener);\r\n\r\n if(this.wildcard) {\r\n growListenerTree.call(this, type, listener);\r\n return this;\r\n }\r\n\r\n if (!this._events[type]) {\r\n // Optimize the case of one listener. Don't need the extra array object.\r\n this._events[type] = listener;\r\n }\r\n else if(typeof this._events[type] === 'function') {\r\n // Adding the second element, need to change to array.\r\n this._events[type] = [this._events[type], listener];\r\n }\r\n else if (isArray(this._events[type])) {\r\n // If we've already got an array, just append.\r\n this._events[type].push(listener);\r\n\r\n // Check for listener leak\r\n if (!this._events[type].warned) {\r\n\r\n var m = defaultMaxListeners;\r\n\r\n if (typeof this._events.maxListeners !== 'undefined') {\r\n m = this._events.maxListeners;\r\n }\r\n\r\n if (m > 0 && this._events[type].length > m) {\r\n\r\n this._events[type].warned = true;\r\n console.error('(node) warning: possible EventEmitter memory ' +\r\n 'leak detected. %d listeners added. ' +\r\n 'Use emitter.setMaxListeners() to increase limit.',\r\n this._events[type].length);\r\n if(console.trace){\r\n console.trace();\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.onAny = function(fn) {\r\n\r\n if (typeof fn !== 'function') {\r\n throw new Error('onAny only accepts instances of Function');\r\n }\r\n\r\n if(!this._all) {\r\n this._all = [];\r\n }\r\n\r\n // Add the function to the event listener collection.\r\n this._all.push(fn);\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.addListener = EventEmitter.prototype.on;\r\n\r\n EventEmitter.prototype.off = function(type, listener) {\r\n if (typeof listener !== 'function') {\r\n throw new Error('removeListener only takes instances of Function');\r\n }\r\n\r\n var handlers,leafs=[];\r\n\r\n if(this.wildcard) {\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);\r\n }\r\n else {\r\n // does not use listeners(), so no side effect of creating _events[type]\r\n if (!this._events[type]) return this;\r\n handlers = this._events[type];\r\n leafs.push({_listeners:handlers});\r\n }\r\n\r\n for (var iLeaf=0; iLeaf 0) {\r\n recursivelyGarbageCollect(root[key]);\r\n }\r\n if (Object.keys(obj).length === 0) {\r\n delete root[key];\r\n }\r\n }\r\n }\r\n recursivelyGarbageCollect(this.listenerTree);\r\n\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.offAny = function(fn) {\r\n var i = 0, l = 0, fns;\r\n if (fn && this._all && this._all.length > 0) {\r\n fns = this._all;\r\n for(i = 0, l = fns.length; i < l; i++) {\r\n if(fn === fns[i]) {\r\n fns.splice(i, 1);\r\n this.emit(\"removeListenerAny\", fn);\r\n return this;\r\n }\r\n }\r\n } else {\r\n fns = this._all;\r\n for(i = 0, l = fns.length; i < l; i++)\r\n this.emit(\"removeListenerAny\", fns[i]);\r\n this._all = [];\r\n }\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.removeListener = EventEmitter.prototype.off;\r\n\r\n EventEmitter.prototype.removeAllListeners = function(type) {\r\n if (arguments.length === 0) {\r\n !this._events || init.call(this);\r\n return this;\r\n }\r\n\r\n if(this.wildcard) {\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n var leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);\r\n\r\n for (var iLeaf=0; iLeaf\n\tComment: \"comment\", //\n\tScript: \"script\", //