react-native-acoustic-connect-beta 18.0.7 → 18.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Examples/SampleUI/.bundle/config +2 -0
- package/Examples/SampleUI/.eslintrc.js +4 -0
- package/Examples/SampleUI/.prettierrc.js +7 -0
- package/Examples/SampleUI/.watchmanconfig +1 -0
- package/Examples/SampleUI/App.js +1 -0
- package/Examples/SampleUI/Gemfile +10 -0
- package/Examples/SampleUI/Gemfile.lock +121 -0
- package/Examples/SampleUI/README.md +79 -0
- package/Examples/SampleUI/__tests__/App.test.tsx +17 -0
- package/Examples/SampleUI/android/app/build.gradle +124 -0
- package/Examples/SampleUI/android/app/debug.keystore +0 -0
- package/Examples/SampleUI/android/app/proguard-rules.pro +10 -0
- package/Examples/SampleUI/android/app/src/debug/AndroidManifest.xml +9 -0
- package/Examples/SampleUI/android/app/src/main/AndroidManifest.xml +26 -0
- package/Examples/SampleUI/android/app/src/main/java/com/sampleui/MainActivity.kt +23 -0
- package/Examples/SampleUI/android/app/src/main/java/com/sampleui/MainApplication.kt +53 -0
- package/Examples/SampleUI/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/values/strings.xml +3 -0
- package/Examples/SampleUI/android/app/src/main/res/values/styles.xml +9 -0
- package/Examples/SampleUI/android/build.gradle +21 -0
- package/Examples/SampleUI/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/Examples/SampleUI/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/Examples/SampleUI/android/gradle.properties +39 -0
- package/Examples/SampleUI/android/gradlew +252 -0
- package/Examples/SampleUI/android/gradlew.bat +94 -0
- package/Examples/SampleUI/android/settings.gradle +21 -0
- package/Examples/SampleUI/app.json +51 -0
- package/Examples/SampleUI/assets/fonts/Abel-Regular.ttf +0 -0
- package/Examples/SampleUI/assets/fonts/NotoSans-Regular.ttf +0 -0
- package/Examples/SampleUI/assets/images/android-icon.png +0 -0
- package/Examples/SampleUI/assets/images/artist-1.jpg +0 -0
- package/Examples/SampleUI/assets/images/artist-2.jpg +0 -0
- package/Examples/SampleUI/assets/images/avatar.png +0 -0
- package/Examples/SampleUI/assets/images/beach.jpg +0 -0
- package/Examples/SampleUI/assets/images/bridge.jpg +0 -0
- package/Examples/SampleUI/assets/images/chameleon.jpg +0 -0
- package/Examples/SampleUI/assets/images/city.jpg +0 -0
- package/Examples/SampleUI/assets/images/email-icon.png +0 -0
- package/Examples/SampleUI/assets/images/favorite.png +0 -0
- package/Examples/SampleUI/assets/images/forest.jpg +0 -0
- package/Examples/SampleUI/assets/images/paper-icon.png +0 -0
- package/Examples/SampleUI/assets/images/players-2.jpg +0 -0
- package/Examples/SampleUI/assets/images/players.jpg +0 -0
- package/Examples/SampleUI/assets/images/restaurant-1.jpg +0 -0
- package/Examples/SampleUI/assets/images/restaurant-2.jpg +0 -0
- package/Examples/SampleUI/assets/images/song-1.jpg +0 -0
- package/Examples/SampleUI/assets/images/song-2.jpg +0 -0
- package/Examples/SampleUI/assets/images/splash.png +0 -0
- package/Examples/SampleUI/assets/images/strawberries.jpg +0 -0
- package/Examples/SampleUI/assets/images/wrecked-ship.jpg +0 -0
- package/Examples/SampleUI/assets/styles/fonts.css +47 -0
- package/Examples/SampleUI/babel.config.js +22 -0
- package/Examples/SampleUI/index.js +9 -0
- package/Examples/SampleUI/ios/.xcode.env +11 -0
- package/Examples/SampleUI/ios/Podfile +58 -0
- package/Examples/SampleUI/ios/SampleUI/AppDelegate.h +7 -0
- package/Examples/SampleUI/ios/SampleUI/AppDelegate.mm +31 -0
- package/Examples/SampleUI/ios/SampleUI/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
- package/Examples/SampleUI/ios/SampleUI/Images.xcassets/Contents.json +6 -0
- package/Examples/SampleUI/ios/SampleUI/Info.plist +52 -0
- package/Examples/SampleUI/ios/SampleUI/LaunchScreen.storyboard +47 -0
- package/Examples/SampleUI/ios/SampleUI/PrivacyInfo.xcprivacy +48 -0
- package/Examples/SampleUI/ios/SampleUI/main.m +10 -0
- package/Examples/SampleUI/ios/SampleUI.xcodeproj/project.pbxproj +785 -0
- package/Examples/SampleUI/ios/SampleUI.xcodeproj/xcshareddata/xcschemes/SampleUI.xcscheme +88 -0
- package/Examples/SampleUI/ios/SampleUI.xcworkspace/contents.xcworkspacedata +10 -0
- package/Examples/SampleUI/ios/SampleUITests/Info.plist +24 -0
- package/Examples/SampleUI/ios/SampleUITests/SampleUITests.m +66 -0
- package/Examples/SampleUI/jest.config.js +3 -0
- package/Examples/SampleUI/metro.config.js +53 -0
- package/Examples/SampleUI/package-lock.json +17033 -0
- package/Examples/SampleUI/package.json +62 -0
- package/Examples/SampleUI/src/DrawerItems.tsx +322 -0
- package/Examples/SampleUI/src/ExampleList.tsx +175 -0
- package/Examples/SampleUI/src/Examples/ActivityIndicatorExample.tsx +73 -0
- package/Examples/SampleUI/src/Examples/AnimatedFABExample/AnimatedFABExample.tsx +220 -0
- package/Examples/SampleUI/src/Examples/AnimatedFABExample/CustomFAB.tsx +70 -0
- package/Examples/SampleUI/src/Examples/AnimatedFABExample/CustomFABControls.tsx +146 -0
- package/Examples/SampleUI/src/Examples/AnimatedFABExample/index.ts +1 -0
- package/Examples/SampleUI/src/Examples/AppbarExample.tsx +263 -0
- package/Examples/SampleUI/src/Examples/AvatarExample.tsx +76 -0
- package/Examples/SampleUI/src/Examples/BadgeExample.tsx +97 -0
- package/Examples/SampleUI/src/Examples/BannerExample.tsx +152 -0
- package/Examples/SampleUI/src/Examples/BottomNavigationBarExample.tsx +94 -0
- package/Examples/SampleUI/src/Examples/BottomNavigationExample.tsx +205 -0
- package/Examples/SampleUI/src/Examples/ButtonExample.tsx +405 -0
- package/Examples/SampleUI/src/Examples/CardExample.tsx +245 -0
- package/Examples/SampleUI/src/Examples/CheckboxExample.tsx +87 -0
- package/Examples/SampleUI/src/Examples/CheckboxItemExample.tsx +72 -0
- package/Examples/SampleUI/src/Examples/ChipExample.tsx +432 -0
- package/Examples/SampleUI/src/Examples/DataTableExample.tsx +128 -0
- package/Examples/SampleUI/src/Examples/DialogExample.tsx +131 -0
- package/Examples/SampleUI/src/Examples/Dialogs/DialogTextComponent.tsx +31 -0
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithCustomColors.tsx +57 -0
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithDismissableBackButton.tsx +38 -0
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithIcon.tsx +42 -0
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithLoadingIndicator.tsx +48 -0
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithLongText.tsx +81 -0
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithRadioBtns.tsx +111 -0
- package/Examples/SampleUI/src/Examples/Dialogs/UndismissableDialog.tsx +30 -0
- package/Examples/SampleUI/src/Examples/Dialogs/index.tsx +7 -0
- package/Examples/SampleUI/src/Examples/DividerExample.tsx +30 -0
- package/Examples/SampleUI/src/Examples/FABExample.tsx +226 -0
- package/Examples/SampleUI/src/Examples/IconButtonExample.tsx +230 -0
- package/Examples/SampleUI/src/Examples/IconExample.tsx +50 -0
- package/Examples/SampleUI/src/Examples/ListAccordionExample.tsx +65 -0
- package/Examples/SampleUI/src/Examples/ListAccordionGroupExample.tsx +80 -0
- package/Examples/SampleUI/src/Examples/ListItemExample.tsx +310 -0
- package/Examples/SampleUI/src/Examples/ListSectionExample.tsx +159 -0
- package/Examples/SampleUI/src/Examples/MaterialBottomTabNavigatorExample.tsx +87 -0
- package/Examples/SampleUI/src/Examples/MenuExample.tsx +211 -0
- package/Examples/SampleUI/src/Examples/ProgressBarExample.tsx +142 -0
- package/Examples/SampleUI/src/Examples/RadioButtonExample.tsx +104 -0
- package/Examples/SampleUI/src/Examples/RadioButtonGroupExample.tsx +67 -0
- package/Examples/SampleUI/src/Examples/RadioButtonItemExample.tsx +77 -0
- package/Examples/SampleUI/src/Examples/SearchbarExample.tsx +249 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonCustomColorCheck.tsx +93 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonDefault.tsx +49 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonDisabled.tsx +47 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselect.tsx +50 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselectIcons.tsx +49 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselectRealCase.tsx +114 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonOnlyIcons.tsx +40 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonOnlyIconsWithCheck.tsx +43 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonRealCase.tsx +97 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonWithDensity.tsx +47 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonWithSelectedCheck.tsx +52 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtons/index.ts +9 -0
- package/Examples/SampleUI/src/Examples/SegmentedButtonsExample.tsx +57 -0
- package/Examples/SampleUI/src/Examples/SnackbarExample.tsx +141 -0
- package/Examples/SampleUI/src/Examples/SurfaceExample.tsx +130 -0
- package/Examples/SampleUI/src/Examples/SwitchExample.tsx +105 -0
- package/Examples/SampleUI/src/Examples/TeamDetails.tsx +291 -0
- package/Examples/SampleUI/src/Examples/TeamsList.tsx +57 -0
- package/Examples/SampleUI/src/Examples/TextExample.tsx +132 -0
- package/Examples/SampleUI/src/Examples/TextInputExample.tsx +914 -0
- package/Examples/SampleUI/src/Examples/ThemeExample.tsx +41 -0
- package/Examples/SampleUI/src/Examples/ThemingWithReactNavigation.tsx +75 -0
- package/Examples/SampleUI/src/Examples/ToggleButtonExample.tsx +128 -0
- package/Examples/SampleUI/src/Examples/TooltipExample.tsx +191 -0
- package/Examples/SampleUI/src/Examples/TouchableRippleExample.tsx +37 -0
- package/Examples/SampleUI/src/RootNavigator.tsx +86 -0
- package/Examples/SampleUI/src/ScreenWrapper.tsx +67 -0
- package/Examples/SampleUI/src/components/ActivityIndicator.tsx +254 -0
- package/Examples/SampleUI/src/components/Appbar/Appbar.tsx +364 -0
- package/Examples/SampleUI/src/components/Appbar/AppbarAction.tsx +132 -0
- package/Examples/SampleUI/src/components/Appbar/AppbarBackAction.tsx +77 -0
- package/Examples/SampleUI/src/components/Appbar/AppbarBackIcon.tsx +52 -0
- package/Examples/SampleUI/src/components/Appbar/AppbarContent.tsx +249 -0
- package/Examples/SampleUI/src/components/Appbar/AppbarHeader.tsx +174 -0
- package/Examples/SampleUI/src/components/Appbar/index.ts +22 -0
- package/Examples/SampleUI/src/components/Appbar/utils.ts +188 -0
- package/Examples/SampleUI/src/components/Avatar/Avatar.tsx +8 -0
- package/Examples/SampleUI/src/components/Avatar/AvatarIcon.tsx +87 -0
- package/Examples/SampleUI/src/components/Avatar/AvatarImage.tsx +128 -0
- package/Examples/SampleUI/src/components/Avatar/AvatarText.tsx +127 -0
- package/Examples/SampleUI/src/components/Badge.tsx +138 -0
- package/Examples/SampleUI/src/components/Banner.tsx +302 -0
- package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigation.tsx +643 -0
- package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigationBar.tsx +1039 -0
- package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigationRouteScreen.tsx +31 -0
- package/Examples/SampleUI/src/components/BottomNavigation/utils.ts +70 -0
- package/Examples/SampleUI/src/components/Button/Button.tsx +503 -0
- package/Examples/SampleUI/src/components/Button/utils.tsx +272 -0
- package/Examples/SampleUI/src/components/Card/Card.tsx +373 -0
- package/Examples/SampleUI/src/components/Card/CardActions.tsx +74 -0
- package/Examples/SampleUI/src/components/Card/CardContent.tsx +99 -0
- package/Examples/SampleUI/src/components/Card/CardCover.tsx +96 -0
- package/Examples/SampleUI/src/components/Card/CardTitle.tsx +236 -0
- package/Examples/SampleUI/src/components/Card/utils.tsx +110 -0
- package/Examples/SampleUI/src/components/Checkbox/Checkbox.tsx +78 -0
- package/Examples/SampleUI/src/components/Checkbox/CheckboxAndroid.tsx +180 -0
- package/Examples/SampleUI/src/components/Checkbox/CheckboxIOS.tsx +104 -0
- package/Examples/SampleUI/src/components/Checkbox/CheckboxItem.tsx +236 -0
- package/Examples/SampleUI/src/components/Checkbox/index.ts +19 -0
- package/Examples/SampleUI/src/components/Checkbox/utils.ts +183 -0
- package/Examples/SampleUI/src/components/Chip/Chip.tsx +513 -0
- package/Examples/SampleUI/src/components/Chip/helpers.tsx +322 -0
- package/Examples/SampleUI/src/components/CrossFadeIcon.tsx +140 -0
- package/Examples/SampleUI/src/components/DataTable/DataTable.tsx +138 -0
- package/Examples/SampleUI/src/components/DataTable/DataTableCell.tsx +132 -0
- package/Examples/SampleUI/src/components/DataTable/DataTableHeader.tsx +82 -0
- package/Examples/SampleUI/src/components/DataTable/DataTablePagination.tsx +407 -0
- package/Examples/SampleUI/src/components/DataTable/DataTableRow.tsx +107 -0
- package/Examples/SampleUI/src/components/DataTable/DataTableTitle.tsx +208 -0
- package/Examples/SampleUI/src/components/Dialog/Dialog.tsx +191 -0
- package/Examples/SampleUI/src/components/Dialog/DialogActions.tsx +94 -0
- package/Examples/SampleUI/src/components/Dialog/DialogContent.tsx +54 -0
- package/Examples/SampleUI/src/components/Dialog/DialogIcon.tsx +100 -0
- package/Examples/SampleUI/src/components/Dialog/DialogScrollArea.tsx +88 -0
- package/Examples/SampleUI/src/components/Dialog/DialogTitle.tsx +94 -0
- package/Examples/SampleUI/src/components/Divider.tsx +102 -0
- package/Examples/SampleUI/src/components/Drawer/Drawer.tsx +8 -0
- package/Examples/SampleUI/src/components/Drawer/DrawerCollapsedItem.tsx +282 -0
- package/Examples/SampleUI/src/components/Drawer/DrawerItem.tsx +209 -0
- package/Examples/SampleUI/src/components/Drawer/DrawerSection.tsx +138 -0
- package/Examples/SampleUI/src/components/FAB/AnimatedFAB.tsx +619 -0
- package/Examples/SampleUI/src/components/FAB/FAB.tsx +371 -0
- package/Examples/SampleUI/src/components/FAB/FABGroup.tsx +532 -0
- package/Examples/SampleUI/src/components/FAB/index.ts +13 -0
- package/Examples/SampleUI/src/components/FAB/utils.ts +474 -0
- package/Examples/SampleUI/src/components/HelperText/HelperText.tsx +168 -0
- package/Examples/SampleUI/src/components/HelperText/utils.ts +30 -0
- package/Examples/SampleUI/src/components/Icon.tsx +170 -0
- package/Examples/SampleUI/src/components/IconButton/IconButton.tsx +234 -0
- package/Examples/SampleUI/src/components/IconButton/utils.ts +190 -0
- package/Examples/SampleUI/src/components/List/List.tsx +20 -0
- package/Examples/SampleUI/src/components/List/ListAccordion.tsx +391 -0
- package/Examples/SampleUI/src/components/List/ListAccordionGroup.tsx +88 -0
- package/Examples/SampleUI/src/components/List/ListIcon.tsx +79 -0
- package/Examples/SampleUI/src/components/List/ListImage.tsx +89 -0
- package/Examples/SampleUI/src/components/List/ListItem.tsx +313 -0
- package/Examples/SampleUI/src/components/List/ListSection.tsx +87 -0
- package/Examples/SampleUI/src/components/List/ListSubheader.tsx +79 -0
- package/Examples/SampleUI/src/components/List/utils.ts +113 -0
- package/Examples/SampleUI/src/components/MaterialCommunityIcon.tsx +121 -0
- package/Examples/SampleUI/src/components/Menu/Menu.tsx +711 -0
- package/Examples/SampleUI/src/components/Menu/MenuItem.tsx +257 -0
- package/Examples/SampleUI/src/components/Menu/utils.ts +110 -0
- package/Examples/SampleUI/src/components/Modal.tsx +245 -0
- package/Examples/SampleUI/src/components/Portal/Portal.tsx +69 -0
- package/Examples/SampleUI/src/components/Portal/PortalConsumer.tsx +44 -0
- package/Examples/SampleUI/src/components/Portal/PortalHost.tsx +143 -0
- package/Examples/SampleUI/src/components/Portal/PortalManager.tsx +54 -0
- package/Examples/SampleUI/src/components/ProgressBar.tsx +292 -0
- package/Examples/SampleUI/src/components/RadioButton/RadioButton.tsx +86 -0
- package/Examples/SampleUI/src/components/RadioButton/RadioButtonAndroid.tsx +202 -0
- package/Examples/SampleUI/src/components/RadioButton/RadioButtonGroup.tsx +67 -0
- package/Examples/SampleUI/src/components/RadioButton/RadioButtonIOS.tsx +130 -0
- package/Examples/SampleUI/src/components/RadioButton/RadioButtonItem.tsx +268 -0
- package/Examples/SampleUI/src/components/RadioButton/index.ts +22 -0
- package/Examples/SampleUI/src/components/RadioButton/utils.ts +37 -0
- package/Examples/SampleUI/src/components/Searchbar.tsx +459 -0
- package/Examples/SampleUI/src/components/SegmentedButtons/SegmentedButtonItem.tsx +271 -0
- package/Examples/SampleUI/src/components/SegmentedButtons/SegmentedButtons.tsx +197 -0
- package/Examples/SampleUI/src/components/SegmentedButtons/utils.ts +179 -0
- package/Examples/SampleUI/src/components/Snackbar.tsx +430 -0
- package/Examples/SampleUI/src/components/Surface.tsx +376 -0
- package/Examples/SampleUI/src/components/Switch/Switch.tsx +108 -0
- package/Examples/SampleUI/src/components/Switch/utils.ts +113 -0
- package/Examples/SampleUI/src/components/TextInput/Addons/Outline.tsx +64 -0
- package/Examples/SampleUI/src/components/TextInput/Addons/Underline.tsx +78 -0
- package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputAdornment.tsx +208 -0
- package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputAffix.tsx +212 -0
- package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputIcon.tsx +195 -0
- package/Examples/SampleUI/src/components/TextInput/Adornment/enums.tsx +12 -0
- package/Examples/SampleUI/src/components/TextInput/Adornment/types.tsx +11 -0
- package/Examples/SampleUI/src/components/TextInput/Adornment/utils.ts +48 -0
- package/Examples/SampleUI/src/components/TextInput/Label/InputLabel.tsx +217 -0
- package/Examples/SampleUI/src/components/TextInput/Label/LabelBackground.tsx +100 -0
- package/Examples/SampleUI/src/components/TextInput/TextInput.tsx +572 -0
- package/Examples/SampleUI/src/components/TextInput/TextInputFlat.tsx +475 -0
- package/Examples/SampleUI/src/components/TextInput/TextInputOutlined.tsx +450 -0
- package/Examples/SampleUI/src/components/TextInput/constants.tsx +48 -0
- package/Examples/SampleUI/src/components/TextInput/helpers.tsx +612 -0
- package/Examples/SampleUI/src/components/TextInput/types.tsx +155 -0
- package/Examples/SampleUI/src/components/ToggleButton/ToggleButton.tsx +187 -0
- package/Examples/SampleUI/src/components/ToggleButton/ToggleButtonGroup.tsx +72 -0
- package/Examples/SampleUI/src/components/ToggleButton/ToggleButtonRow.tsx +107 -0
- package/Examples/SampleUI/src/components/ToggleButton/index.ts +16 -0
- package/Examples/SampleUI/src/components/ToggleButton/utils.ts +26 -0
- package/Examples/SampleUI/src/components/Tooltip/Tooltip.tsx +249 -0
- package/Examples/SampleUI/src/components/Tooltip/utils.ts +129 -0
- package/Examples/SampleUI/src/components/TouchableRipple/Pressable.tsx +41 -0
- package/Examples/SampleUI/src/components/TouchableRipple/TouchableRipple.native.tsx +145 -0
- package/Examples/SampleUI/src/components/TouchableRipple/TouchableRipple.tsx +317 -0
- package/Examples/SampleUI/src/components/TouchableRipple/utils.ts +66 -0
- package/Examples/SampleUI/src/components/Typography/AnimatedText.tsx +107 -0
- package/Examples/SampleUI/src/components/Typography/Text.tsx +184 -0
- package/Examples/SampleUI/src/components/Typography/types.tsx +5 -0
- package/Examples/SampleUI/src/components/Typography/v2/Caption.tsx +50 -0
- package/Examples/SampleUI/src/components/Typography/v2/Headline.tsx +52 -0
- package/Examples/SampleUI/src/components/Typography/v2/Paragraph.tsx +49 -0
- package/Examples/SampleUI/src/components/Typography/v2/StyledText.tsx +56 -0
- package/Examples/SampleUI/src/components/Typography/v2/Subheading.tsx +50 -0
- package/Examples/SampleUI/src/components/Typography/v2/Text.tsx +62 -0
- package/Examples/SampleUI/src/components/Typography/v2/Title.tsx +49 -0
- package/Examples/SampleUI/src/components/Typography/v2/index.ts +5 -0
- package/Examples/SampleUI/src/core/PaperProvider.tsx +122 -0
- package/Examples/SampleUI/src/core/SafeAreaProviderCompat.tsx +65 -0
- package/Examples/SampleUI/src/core/settings.tsx +23 -0
- package/Examples/SampleUI/src/core/theming.tsx +170 -0
- package/Examples/SampleUI/src/index.native.tsx +270 -0
- package/Examples/SampleUI/src/index.tsx +226 -0
- package/Examples/SampleUI/src/react-navigation/index.tsx +19 -0
- package/Examples/SampleUI/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx +72 -0
- package/Examples/SampleUI/src/react-navigation/types.tsx +126 -0
- package/Examples/SampleUI/src/react-navigation/views/MaterialBottomTabView.tsx +140 -0
- package/Examples/SampleUI/src/styles/__tests__/fonts.test.js +290 -0
- package/Examples/SampleUI/src/styles/fonts.tsx +143 -0
- package/Examples/SampleUI/src/styles/overlay.tsx +70 -0
- package/Examples/SampleUI/src/styles/shadow.tsx +109 -0
- package/Examples/SampleUI/src/styles/themes/index.ts +4 -0
- package/Examples/SampleUI/src/styles/themes/v2/DarkTheme.tsx +30 -0
- package/Examples/SampleUI/src/styles/themes/v2/LightTheme.tsx +30 -0
- package/Examples/SampleUI/src/styles/themes/v2/colors.tsx +277 -0
- package/Examples/SampleUI/src/styles/themes/v3/DarkTheme.tsx +66 -0
- package/Examples/SampleUI/src/styles/themes/v3/LightTheme.tsx +69 -0
- package/Examples/SampleUI/src/styles/themes/v3/tokens.tsx +230 -0
- package/Examples/SampleUI/src/utils/BackHandler/BackHandler.native.tsx +3 -0
- package/Examples/SampleUI/src/utils/BackHandler/BackHandler.tsx +11 -0
- package/Examples/SampleUI/src/utils/addEventListener.tsx +56 -0
- package/Examples/SampleUI/src/utils/forwardRef.tsx +23 -0
- package/Examples/SampleUI/src/utils/getContrastingColor.tsx +15 -0
- package/Examples/SampleUI/src/utils/hasTouchHandler.tsx +23 -0
- package/Examples/SampleUI/src/utils/roundLayoutSize.ts +2 -0
- package/Examples/SampleUI/src/utils/splitStyles.ts +60 -0
- package/Examples/SampleUI/src/utils/useAnimatedValue.tsx +9 -0
- package/Examples/SampleUI/src/utils/useAnimatedValueArray.tsx +13 -0
- package/Examples/SampleUI/src/utils/useIsKeyboardShown.tsx +55 -0
- package/Examples/SampleUI/src/utils/useLayout.tsx +29 -0
- package/Examples/SampleUI/src/utils/useLazyRef.tsx +11 -0
- package/Examples/SampleUI/tsconfig.json +3 -0
- package/Examples/SampleUI/utils/index.ts +1426 -0
- package/lib/typescript/jslib/TLTRN.d.ts +5 -5
- package/lib/typescript/jslib/TLTRN.d.ts.map +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
ColorValue,
|
|
4
|
+
GestureResponderEvent,
|
|
5
|
+
Platform,
|
|
6
|
+
StyleProp,
|
|
7
|
+
StyleSheet,
|
|
8
|
+
View,
|
|
9
|
+
ViewStyle,
|
|
10
|
+
} from 'react-native';
|
|
11
|
+
|
|
12
|
+
import color from 'color';
|
|
13
|
+
|
|
14
|
+
import type { PressableProps, PressableStateCallbackType } from './Pressable';
|
|
15
|
+
import { Pressable } from './Pressable';
|
|
16
|
+
import { getTouchableRippleColors } from './utils';
|
|
17
|
+
import { Settings, SettingsContext } from '../../core/settings';
|
|
18
|
+
import { useInternalTheme } from '../../core/theming';
|
|
19
|
+
import type { ThemeProp } from '../../types';
|
|
20
|
+
import { forwardRef } from '../../utils/forwardRef';
|
|
21
|
+
import hasTouchHandler from '../../utils/hasTouchHandler';
|
|
22
|
+
|
|
23
|
+
export type Props = PressableProps & {
|
|
24
|
+
/**
|
|
25
|
+
* Whether to render the ripple outside the view bounds.
|
|
26
|
+
*/
|
|
27
|
+
borderless?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Type of background drawabale to display the feedback (Android).
|
|
30
|
+
* https://reactnative.dev/docs/pressable#rippleconfig
|
|
31
|
+
*/
|
|
32
|
+
background?: Object;
|
|
33
|
+
/**
|
|
34
|
+
* Whether to start the ripple at the center (Web).
|
|
35
|
+
*/
|
|
36
|
+
centered?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Whether to prevent interaction with the touchable.
|
|
39
|
+
*/
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Function to execute on press. If not set, will cause the touchable to be disabled.
|
|
43
|
+
*/
|
|
44
|
+
onPress?: (e: GestureResponderEvent) => void;
|
|
45
|
+
/**
|
|
46
|
+
* Function to execute on long press.
|
|
47
|
+
*/
|
|
48
|
+
onLongPress?: (e: GestureResponderEvent) => void;
|
|
49
|
+
/**
|
|
50
|
+
* Function to execute immediately when a touch is engaged, before `onPressOut` and `onPress`.
|
|
51
|
+
*/
|
|
52
|
+
onPressIn?: (e: GestureResponderEvent) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Function to execute when a touch is released.
|
|
55
|
+
*/
|
|
56
|
+
onPressOut?: (e: GestureResponderEvent) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Color of the ripple effect (Android >= 5.0 and Web).
|
|
59
|
+
*/
|
|
60
|
+
rippleColor?: ColorValue;
|
|
61
|
+
/**
|
|
62
|
+
* Color of the underlay for the highlight effect (Android < 5.0 and iOS).
|
|
63
|
+
*/
|
|
64
|
+
underlayColor?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Content of the `TouchableRipple`.
|
|
67
|
+
*/
|
|
68
|
+
children:
|
|
69
|
+
| ((state: PressableStateCallbackType) => React.ReactNode)
|
|
70
|
+
| React.ReactNode;
|
|
71
|
+
style?:
|
|
72
|
+
| StyleProp<ViewStyle>
|
|
73
|
+
| ((state: PressableStateCallbackType) => StyleProp<ViewStyle>)
|
|
74
|
+
| undefined;
|
|
75
|
+
/**
|
|
76
|
+
* @optional
|
|
77
|
+
*/
|
|
78
|
+
theme?: ThemeProp;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* A wrapper for views that should respond to touches.
|
|
83
|
+
* Provides a material "ink ripple" interaction effect for supported platforms (>= Android Lollipop).
|
|
84
|
+
* On unsupported platforms, it falls back to a highlight effect.
|
|
85
|
+
*
|
|
86
|
+
* ## Usage
|
|
87
|
+
* ```js
|
|
88
|
+
* import * as React from 'react';
|
|
89
|
+
* import { View } from 'react-native';
|
|
90
|
+
* import { Text, TouchableRipple } from 'react-native-paper';
|
|
91
|
+
*
|
|
92
|
+
* const MyComponent = () => (
|
|
93
|
+
* <TouchableRipple
|
|
94
|
+
* onPress={() => console.log('Pressed')}
|
|
95
|
+
* rippleColor="rgba(0, 0, 0, .32)"
|
|
96
|
+
* >
|
|
97
|
+
* <Text>Press anywhere</Text>
|
|
98
|
+
* </TouchableRipple>
|
|
99
|
+
* );
|
|
100
|
+
*
|
|
101
|
+
* export default MyComponent;
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* @extends Pressable props https://reactnative.dev/docs/Pressable#props
|
|
105
|
+
*/
|
|
106
|
+
const TouchableRipple = (
|
|
107
|
+
{
|
|
108
|
+
style,
|
|
109
|
+
background: _background,
|
|
110
|
+
borderless = false,
|
|
111
|
+
disabled: disabledProp,
|
|
112
|
+
rippleColor,
|
|
113
|
+
underlayColor: _underlayColor,
|
|
114
|
+
children,
|
|
115
|
+
theme: themeOverrides,
|
|
116
|
+
...rest
|
|
117
|
+
}: Props,
|
|
118
|
+
ref: React.ForwardedRef<View>
|
|
119
|
+
) => {
|
|
120
|
+
const theme = useInternalTheme(themeOverrides);
|
|
121
|
+
const { calculatedRippleColor } = getTouchableRippleColors({
|
|
122
|
+
theme,
|
|
123
|
+
rippleColor,
|
|
124
|
+
});
|
|
125
|
+
const hoverColor = color(calculatedRippleColor).fade(0.5).rgb().string();
|
|
126
|
+
const { rippleEffectEnabled } = React.useContext<Settings>(SettingsContext);
|
|
127
|
+
|
|
128
|
+
const { onPress, onLongPress, onPressIn, onPressOut } = rest;
|
|
129
|
+
|
|
130
|
+
const handlePressIn = React.useCallback(
|
|
131
|
+
(e: any) => {
|
|
132
|
+
onPressIn?.(e);
|
|
133
|
+
|
|
134
|
+
if (rippleEffectEnabled) {
|
|
135
|
+
const { centered } = rest;
|
|
136
|
+
|
|
137
|
+
const button = e.currentTarget;
|
|
138
|
+
const style = window.getComputedStyle(button);
|
|
139
|
+
const dimensions = button.getBoundingClientRect();
|
|
140
|
+
|
|
141
|
+
let touchX;
|
|
142
|
+
let touchY;
|
|
143
|
+
|
|
144
|
+
const { changedTouches, touches } = e.nativeEvent;
|
|
145
|
+
const touch = touches?.[0] ?? changedTouches?.[0];
|
|
146
|
+
|
|
147
|
+
// If centered or it was pressed using keyboard - enter or space
|
|
148
|
+
if (centered || !touch) {
|
|
149
|
+
touchX = dimensions.width / 2;
|
|
150
|
+
touchY = dimensions.height / 2;
|
|
151
|
+
} else {
|
|
152
|
+
touchX = touch.locationX ?? e.pageX;
|
|
153
|
+
touchY = touch.locationY ?? e.pageY;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Get the size of the button to determine how big the ripple should be
|
|
157
|
+
const size = centered
|
|
158
|
+
? // If ripple is always centered, we don't need to make it too big
|
|
159
|
+
Math.min(dimensions.width, dimensions.height) * 1.5
|
|
160
|
+
: // Otherwise make it twice as big so clicking on one end spreads ripple to other
|
|
161
|
+
Math.max(dimensions.width, dimensions.height) * 2;
|
|
162
|
+
|
|
163
|
+
// Create a container for our ripple effect so we don't need to change the parent's style
|
|
164
|
+
const container = document.createElement('span');
|
|
165
|
+
|
|
166
|
+
container.setAttribute('data-paper-ripple', '');
|
|
167
|
+
|
|
168
|
+
Object.assign(container.style, {
|
|
169
|
+
position: 'absolute',
|
|
170
|
+
pointerEvents: 'none',
|
|
171
|
+
top: '0',
|
|
172
|
+
left: '0',
|
|
173
|
+
right: '0',
|
|
174
|
+
bottom: '0',
|
|
175
|
+
borderTopLeftRadius: style.borderTopLeftRadius,
|
|
176
|
+
borderTopRightRadius: style.borderTopRightRadius,
|
|
177
|
+
borderBottomRightRadius: style.borderBottomRightRadius,
|
|
178
|
+
borderBottomLeftRadius: style.borderBottomLeftRadius,
|
|
179
|
+
overflow: centered ? 'visible' : 'hidden',
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
// Create span to show the ripple effect
|
|
183
|
+
const ripple = document.createElement('span');
|
|
184
|
+
|
|
185
|
+
Object.assign(ripple.style, {
|
|
186
|
+
position: 'absolute',
|
|
187
|
+
pointerEvents: 'none',
|
|
188
|
+
backgroundColor: calculatedRippleColor,
|
|
189
|
+
borderRadius: '50%',
|
|
190
|
+
|
|
191
|
+
/* Transition configuration */
|
|
192
|
+
transitionProperty: 'transform opacity',
|
|
193
|
+
transitionDuration: `${Math.min(size * 1.5, 350)}ms`,
|
|
194
|
+
transitionTimingFunction: 'linear',
|
|
195
|
+
transformOrigin: 'center',
|
|
196
|
+
|
|
197
|
+
/* We'll animate these properties */
|
|
198
|
+
transform: 'translate3d(-50%, -50%, 0) scale3d(0.1, 0.1, 0.1)',
|
|
199
|
+
opacity: '0.5',
|
|
200
|
+
|
|
201
|
+
// Position the ripple where cursor was
|
|
202
|
+
left: `${touchX}px`,
|
|
203
|
+
top: `${touchY}px`,
|
|
204
|
+
width: `${size}px`,
|
|
205
|
+
height: `${size}px`,
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// Finally, append it to DOM
|
|
209
|
+
container.appendChild(ripple);
|
|
210
|
+
button.appendChild(container);
|
|
211
|
+
|
|
212
|
+
// rAF runs in the same frame as the event handler
|
|
213
|
+
// Use double rAF to ensure the transition class is added in next frame
|
|
214
|
+
// This will make sure that the transition animation is triggered
|
|
215
|
+
requestAnimationFrame(() => {
|
|
216
|
+
requestAnimationFrame(() => {
|
|
217
|
+
Object.assign(ripple.style, {
|
|
218
|
+
transform: 'translate3d(-50%, -50%, 0) scale3d(1, 1, 1)',
|
|
219
|
+
opacity: '1',
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
[onPressIn, rest, rippleEffectEnabled, calculatedRippleColor]
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
const handlePressOut = React.useCallback(
|
|
229
|
+
(e: any) => {
|
|
230
|
+
onPressOut?.(e);
|
|
231
|
+
|
|
232
|
+
if (rippleEffectEnabled) {
|
|
233
|
+
const containers = e.currentTarget.querySelectorAll(
|
|
234
|
+
'[data-paper-ripple]'
|
|
235
|
+
) as HTMLElement[];
|
|
236
|
+
|
|
237
|
+
requestAnimationFrame(() => {
|
|
238
|
+
requestAnimationFrame(() => {
|
|
239
|
+
containers.forEach((container) => {
|
|
240
|
+
const ripple = container.firstChild as HTMLSpanElement;
|
|
241
|
+
|
|
242
|
+
Object.assign(ripple.style, {
|
|
243
|
+
transitionDuration: '250ms',
|
|
244
|
+
opacity: 0,
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
// Finally remove the span after the transition
|
|
248
|
+
setTimeout(() => {
|
|
249
|
+
const { parentNode } = container;
|
|
250
|
+
|
|
251
|
+
if (parentNode) {
|
|
252
|
+
parentNode.removeChild(container);
|
|
253
|
+
}
|
|
254
|
+
}, 500);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
[onPressOut, rippleEffectEnabled]
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
const hasPassedTouchHandler = hasTouchHandler({
|
|
264
|
+
onPress,
|
|
265
|
+
onLongPress,
|
|
266
|
+
onPressIn,
|
|
267
|
+
onPressOut,
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
const disabled = disabledProp || !hasPassedTouchHandler;
|
|
271
|
+
|
|
272
|
+
return (
|
|
273
|
+
<Pressable
|
|
274
|
+
{...rest}
|
|
275
|
+
ref={ref}
|
|
276
|
+
onPressIn={handlePressIn}
|
|
277
|
+
onPressOut={handlePressOut}
|
|
278
|
+
disabled={disabled}
|
|
279
|
+
style={(state) => [
|
|
280
|
+
styles.touchable,
|
|
281
|
+
borderless && styles.borderless,
|
|
282
|
+
// focused state is not ready yet: https://github.com/necolas/react-native-web/issues/1849
|
|
283
|
+
// state.focused && { backgroundColor: ___ },
|
|
284
|
+
state.hovered && { backgroundColor: hoverColor },
|
|
285
|
+
typeof style === 'function' ? style(state) : style,
|
|
286
|
+
]}
|
|
287
|
+
>
|
|
288
|
+
{(state) =>
|
|
289
|
+
React.Children.only(
|
|
290
|
+
typeof children === 'function' ? children(state) : children
|
|
291
|
+
)
|
|
292
|
+
}
|
|
293
|
+
</Pressable>
|
|
294
|
+
);
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Whether ripple effect is supported.
|
|
299
|
+
*/
|
|
300
|
+
TouchableRipple.supported = true;
|
|
301
|
+
|
|
302
|
+
const styles = StyleSheet.create({
|
|
303
|
+
touchable: {
|
|
304
|
+
position: 'relative',
|
|
305
|
+
...(Platform.OS === 'web' && {
|
|
306
|
+
cursor: 'pointer',
|
|
307
|
+
transition: '150ms background-color',
|
|
308
|
+
}),
|
|
309
|
+
},
|
|
310
|
+
borderless: {
|
|
311
|
+
overflow: 'hidden',
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
const Component = forwardRef(TouchableRipple);
|
|
316
|
+
|
|
317
|
+
export default Component as typeof Component & { supported: boolean };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ColorValue } from 'react-native';
|
|
2
|
+
|
|
3
|
+
import color from 'color';
|
|
4
|
+
|
|
5
|
+
import type { InternalTheme } from '../../types';
|
|
6
|
+
|
|
7
|
+
const getUnderlayColor = ({
|
|
8
|
+
theme,
|
|
9
|
+
calculatedRippleColor,
|
|
10
|
+
underlayColor,
|
|
11
|
+
}: {
|
|
12
|
+
theme: InternalTheme;
|
|
13
|
+
calculatedRippleColor: ColorValue;
|
|
14
|
+
underlayColor?: string;
|
|
15
|
+
}) => {
|
|
16
|
+
if (underlayColor != null) {
|
|
17
|
+
return underlayColor;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (theme.isV3) {
|
|
21
|
+
return color(calculatedRippleColor).rgb().string();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return color(calculatedRippleColor).fade(0.5).rgb().string();
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const getRippleColor = ({
|
|
28
|
+
theme,
|
|
29
|
+
rippleColor,
|
|
30
|
+
}: {
|
|
31
|
+
theme: InternalTheme;
|
|
32
|
+
rippleColor?: ColorValue;
|
|
33
|
+
}) => {
|
|
34
|
+
if (rippleColor) {
|
|
35
|
+
return rippleColor;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (theme.isV3) {
|
|
39
|
+
return color(theme.colors.onSurface).alpha(0.12).rgb().string();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (theme.dark) {
|
|
43
|
+
return color(theme.colors.text).alpha(0.32).rgb().string();
|
|
44
|
+
}
|
|
45
|
+
return color(theme.colors.text).alpha(0.2).rgb().string();
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const getTouchableRippleColors = ({
|
|
49
|
+
theme,
|
|
50
|
+
rippleColor,
|
|
51
|
+
underlayColor,
|
|
52
|
+
}: {
|
|
53
|
+
theme: InternalTheme;
|
|
54
|
+
rippleColor?: ColorValue;
|
|
55
|
+
underlayColor?: string;
|
|
56
|
+
}) => {
|
|
57
|
+
const calculatedRippleColor = getRippleColor({ theme, rippleColor });
|
|
58
|
+
return {
|
|
59
|
+
calculatedRippleColor,
|
|
60
|
+
calculatedUnderlayColor: getUnderlayColor({
|
|
61
|
+
theme,
|
|
62
|
+
calculatedRippleColor,
|
|
63
|
+
underlayColor,
|
|
64
|
+
}),
|
|
65
|
+
};
|
|
66
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Animated,
|
|
4
|
+
I18nManager,
|
|
5
|
+
StyleProp,
|
|
6
|
+
StyleSheet,
|
|
7
|
+
TextStyle,
|
|
8
|
+
Text,
|
|
9
|
+
} from 'react-native';
|
|
10
|
+
|
|
11
|
+
import type { VariantProp } from './types';
|
|
12
|
+
import { useInternalTheme } from '../../core/theming';
|
|
13
|
+
import type { ThemeProp } from '../../types';
|
|
14
|
+
import { forwardRef } from '../../utils/forwardRef';
|
|
15
|
+
|
|
16
|
+
type Props<T> = React.ComponentPropsWithRef<typeof Animated.Text> & {
|
|
17
|
+
/**
|
|
18
|
+
* Variant defines appropriate text styles for type role and its size.
|
|
19
|
+
* Available variants:
|
|
20
|
+
*
|
|
21
|
+
* Display: `displayLarge`, `displayMedium`, `displaySmall`
|
|
22
|
+
*
|
|
23
|
+
* Headline: `headlineLarge`, `headlineMedium`, `headlineSmall`
|
|
24
|
+
*
|
|
25
|
+
* Title: `titleLarge`, `titleMedium`, `titleSmall`
|
|
26
|
+
*
|
|
27
|
+
* Label: `labelLarge`, `labelMedium`, `labelSmall`
|
|
28
|
+
*
|
|
29
|
+
* Body: `bodyLarge`, `bodyMedium`, `bodySmall`
|
|
30
|
+
*/
|
|
31
|
+
variant?: VariantProp<T>;
|
|
32
|
+
style?: StyleProp<TextStyle>;
|
|
33
|
+
/**
|
|
34
|
+
* @optional
|
|
35
|
+
*/
|
|
36
|
+
theme?: ThemeProp;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Animated text component which follows styles from the theme.
|
|
41
|
+
*
|
|
42
|
+
* @extends Text props https://reactnative.dev/docs/text#props
|
|
43
|
+
*/
|
|
44
|
+
const AnimatedText = forwardRef<Text & HTMLElement, Props<never>>(
|
|
45
|
+
function AnimatedText(
|
|
46
|
+
{ style, theme: themeOverrides, variant, ...rest },
|
|
47
|
+
ref
|
|
48
|
+
) {
|
|
49
|
+
const theme = useInternalTheme(themeOverrides);
|
|
50
|
+
const writingDirection = I18nManager.getConstants().isRTL ? 'rtl' : 'ltr';
|
|
51
|
+
|
|
52
|
+
if (theme.isV3 && variant) {
|
|
53
|
+
const font = theme.fonts[variant];
|
|
54
|
+
if (typeof font !== 'object') {
|
|
55
|
+
throw new Error(
|
|
56
|
+
`Variant ${variant} was not provided properly. Valid variants are ${Object.keys(
|
|
57
|
+
theme.fonts
|
|
58
|
+
).join(', ')}.`
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<Animated.Text
|
|
64
|
+
ref={ref}
|
|
65
|
+
{...rest}
|
|
66
|
+
style={[
|
|
67
|
+
font,
|
|
68
|
+
styles.text,
|
|
69
|
+
{ writingDirection, color: theme.colors.onSurface },
|
|
70
|
+
style,
|
|
71
|
+
]}
|
|
72
|
+
/>
|
|
73
|
+
);
|
|
74
|
+
} else {
|
|
75
|
+
const font = !theme.isV3 ? theme.fonts.regular : theme.fonts.bodyMedium;
|
|
76
|
+
const textStyle = {
|
|
77
|
+
...font,
|
|
78
|
+
color: theme.isV3 ? theme.colors.onSurface : theme.colors.text,
|
|
79
|
+
};
|
|
80
|
+
return (
|
|
81
|
+
<Animated.Text
|
|
82
|
+
ref={ref}
|
|
83
|
+
{...rest}
|
|
84
|
+
style={[
|
|
85
|
+
styles.text,
|
|
86
|
+
textStyle,
|
|
87
|
+
{
|
|
88
|
+
writingDirection,
|
|
89
|
+
},
|
|
90
|
+
style,
|
|
91
|
+
]}
|
|
92
|
+
/>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
const styles = StyleSheet.create({
|
|
99
|
+
text: {
|
|
100
|
+
textAlign: 'left',
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
export const customAnimatedText = <T,>() =>
|
|
105
|
+
AnimatedText as (props: Props<T>) => JSX.Element;
|
|
106
|
+
|
|
107
|
+
export default AnimatedText;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
I18nManager,
|
|
4
|
+
StyleProp,
|
|
5
|
+
StyleSheet,
|
|
6
|
+
Text as NativeText,
|
|
7
|
+
TextStyle,
|
|
8
|
+
} from 'react-native';
|
|
9
|
+
|
|
10
|
+
import AnimatedText from './AnimatedText';
|
|
11
|
+
import type { VariantProp } from './types';
|
|
12
|
+
import StyledText from './v2/StyledText';
|
|
13
|
+
import { useInternalTheme } from '../../core/theming';
|
|
14
|
+
import type { ThemeProp } from '../../types';
|
|
15
|
+
import { forwardRef } from '../../utils/forwardRef';
|
|
16
|
+
|
|
17
|
+
export type Props<T> = React.ComponentProps<typeof NativeText> & {
|
|
18
|
+
/**
|
|
19
|
+
* @supported Available in v5.x with theme version 3
|
|
20
|
+
*
|
|
21
|
+
* Variant defines appropriate text styles for type role and its size.
|
|
22
|
+
* Available variants:
|
|
23
|
+
*
|
|
24
|
+
* Display: `displayLarge`, `displayMedium`, `displaySmall`
|
|
25
|
+
*
|
|
26
|
+
* Headline: `headlineLarge`, `headlineMedium`, `headlineSmall`
|
|
27
|
+
*
|
|
28
|
+
* Title: `titleLarge`, `titleMedium`, `titleSmall`
|
|
29
|
+
*
|
|
30
|
+
* Label: `labelLarge`, `labelMedium`, `labelSmall`
|
|
31
|
+
*
|
|
32
|
+
* Body: `bodyLarge`, `bodyMedium`, `bodySmall`
|
|
33
|
+
*/
|
|
34
|
+
variant?: VariantProp<T>;
|
|
35
|
+
children: React.ReactNode;
|
|
36
|
+
theme?: ThemeProp;
|
|
37
|
+
style?: StyleProp<TextStyle>;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type TextRef = React.ForwardedRef<{
|
|
41
|
+
setNativeProps(args: Object): void;
|
|
42
|
+
}>;
|
|
43
|
+
|
|
44
|
+
// @component-group Typography
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Typography component showing styles complied with passed `variant` prop and supported by the type system.
|
|
48
|
+
*
|
|
49
|
+
* ## Usage
|
|
50
|
+
* ```js
|
|
51
|
+
* import * as React from 'react';
|
|
52
|
+
* import { Text } from 'react-native-paper';
|
|
53
|
+
*
|
|
54
|
+
* const MyComponent = () => (
|
|
55
|
+
* <>
|
|
56
|
+
* <Text variant="displayLarge">Display Large</Text>
|
|
57
|
+
* <Text variant="displayMedium">Display Medium</Text>
|
|
58
|
+
* <Text variant="displaySmall">Display small</Text>
|
|
59
|
+
*
|
|
60
|
+
* <Text variant="headlineLarge">Headline Large</Text>
|
|
61
|
+
* <Text variant="headlineMedium">Headline Medium</Text>
|
|
62
|
+
* <Text variant="headlineSmall">Headline Small</Text>
|
|
63
|
+
*
|
|
64
|
+
* <Text variant="titleLarge">Title Large</Text>
|
|
65
|
+
* <Text variant="titleMedium">Title Medium</Text>
|
|
66
|
+
* <Text variant="titleSmall">Title Small</Text>
|
|
67
|
+
*
|
|
68
|
+
* <Text variant="bodyLarge">Body Large</Text>
|
|
69
|
+
* <Text variant="bodyMedium">Body Medium</Text>
|
|
70
|
+
* <Text variant="bodySmall">Body Small</Text>
|
|
71
|
+
*
|
|
72
|
+
* <Text variant="labelLarge">Label Large</Text>
|
|
73
|
+
* <Text variant="labelMedium">Label Medium</Text>
|
|
74
|
+
* <Text variant="labelSmall">Label Small</Text>
|
|
75
|
+
* </>
|
|
76
|
+
* );
|
|
77
|
+
*
|
|
78
|
+
* export default MyComponent;
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @extends Text props https://reactnative.dev/docs/text#props
|
|
82
|
+
*/
|
|
83
|
+
const Text = (
|
|
84
|
+
{ style, variant, theme: initialTheme, ...rest }: Props<string>,
|
|
85
|
+
ref: TextRef
|
|
86
|
+
) => {
|
|
87
|
+
const root = React.useRef<NativeText | null>(null);
|
|
88
|
+
// FIXME: destructure it in TS 4.6+
|
|
89
|
+
const theme = useInternalTheme(initialTheme);
|
|
90
|
+
const writingDirection = I18nManager.getConstants().isRTL ? 'rtl' : 'ltr';
|
|
91
|
+
|
|
92
|
+
React.useImperativeHandle(ref, () => ({
|
|
93
|
+
setNativeProps: (args: Object) => root.current?.setNativeProps(args),
|
|
94
|
+
}));
|
|
95
|
+
|
|
96
|
+
if (theme.isV3 && variant) {
|
|
97
|
+
let font = theme.fonts[variant];
|
|
98
|
+
let textStyle = [font, style];
|
|
99
|
+
|
|
100
|
+
if (
|
|
101
|
+
React.isValidElement(rest.children) &&
|
|
102
|
+
(rest.children.type === Component ||
|
|
103
|
+
rest.children.type === AnimatedText ||
|
|
104
|
+
rest.children.type === StyledText)
|
|
105
|
+
) {
|
|
106
|
+
const { props } = rest.children;
|
|
107
|
+
|
|
108
|
+
// Context: Some components have the built-in `Text` component with a predefined variant,
|
|
109
|
+
// that also accepts `children` as a `React.Node`. This can result in a situation,
|
|
110
|
+
// where another `Text` component is rendered within the built-in `Text` component.
|
|
111
|
+
// By doing that, we assume that user doesn't want to consume pre-defined font properties.
|
|
112
|
+
// Case one: Nested `Text` has different `variant` that specified in parent. For example:
|
|
113
|
+
// <Chip>
|
|
114
|
+
// <Text variant="displayMedium">Nested</Text>
|
|
115
|
+
// </Chip>
|
|
116
|
+
// Solution: To address the following scenario, the code below overrides the `variant`
|
|
117
|
+
// specified in a parent in favor of children's variant:
|
|
118
|
+
if (props.variant) {
|
|
119
|
+
font = theme.fonts[props.variant as VariantProp<typeof props.variant>];
|
|
120
|
+
textStyle = [style, font];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Case two: Nested `Text` has specified `styles` which intefere
|
|
124
|
+
// with font properties, from the parent's `variant`. For example:
|
|
125
|
+
// <Chip>
|
|
126
|
+
// <Text style={{fontSize: 30}}>Nested</Text>
|
|
127
|
+
// </Chip>
|
|
128
|
+
// Solution: To address the following scenario, the code below overrides the
|
|
129
|
+
// parent's style with children's style:
|
|
130
|
+
if (!props.variant) {
|
|
131
|
+
textStyle = [style, props.style];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (typeof font !== 'object') {
|
|
136
|
+
throw new Error(
|
|
137
|
+
`Variant ${variant} was not provided properly. Valid variants are ${Object.keys(
|
|
138
|
+
theme.fonts
|
|
139
|
+
).join(', ')}.`
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return (
|
|
144
|
+
<NativeText
|
|
145
|
+
ref={root}
|
|
146
|
+
style={[
|
|
147
|
+
styles.text,
|
|
148
|
+
{ writingDirection, color: theme.colors.onSurface },
|
|
149
|
+
textStyle,
|
|
150
|
+
]}
|
|
151
|
+
{...rest}
|
|
152
|
+
/>
|
|
153
|
+
);
|
|
154
|
+
} else {
|
|
155
|
+
const font = theme.isV3 ? theme.fonts.default : theme.fonts?.regular;
|
|
156
|
+
const textStyle = {
|
|
157
|
+
...font,
|
|
158
|
+
color: theme.isV3 ? theme.colors?.onSurface : theme.colors.text,
|
|
159
|
+
};
|
|
160
|
+
return (
|
|
161
|
+
<NativeText
|
|
162
|
+
{...rest}
|
|
163
|
+
ref={root}
|
|
164
|
+
style={[styles.text, textStyle, { writingDirection }, style]}
|
|
165
|
+
/>
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const styles = StyleSheet.create({
|
|
171
|
+
text: {
|
|
172
|
+
textAlign: 'left',
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
type TextComponent<T> = (
|
|
177
|
+
props: Props<T> & { ref?: React.RefObject<TextRef> }
|
|
178
|
+
) => JSX.Element;
|
|
179
|
+
|
|
180
|
+
const Component = forwardRef(Text) as TextComponent<never>;
|
|
181
|
+
|
|
182
|
+
export const customText = <T,>() => Component as unknown as TextComponent<T>;
|
|
183
|
+
|
|
184
|
+
export default Component;
|