mirror of
				https://github.com/tooot-app/app
				synced 2025-06-05 22:19:13 +02:00 
			
		
		
		
	Use native view drawing instead of svg
This commit is contained in:
		| @@ -572,8 +572,6 @@ PODS: | ||||
|     - Sentry (= 7.23.0) | ||||
|   - RNShareMenu (6.0.0): | ||||
|     - React | ||||
|   - RNSVG (12.4.4): | ||||
|     - React-Core | ||||
|   - SDWebImage (5.13.2): | ||||
|     - SDWebImage/Core (= 5.13.2) | ||||
|   - SDWebImage/Core (5.13.2) | ||||
| @@ -670,7 +668,6 @@ DEPENDENCIES: | ||||
|   - RNScreens (from `../node_modules/react-native-screens`) | ||||
|   - "RNSentry (from `../node_modules/@sentry/react-native`)" | ||||
|   - RNShareMenu (from `../node_modules/react-native-share-menu`) | ||||
|   - RNSVG (from `../node_modules/react-native-svg`) | ||||
|   - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) | ||||
|  | ||||
| SPEC REPOS: | ||||
| @@ -857,8 +854,6 @@ EXTERNAL SOURCES: | ||||
|     :path: "../node_modules/@sentry/react-native" | ||||
|   RNShareMenu: | ||||
|     :path: "../node_modules/react-native-share-menu" | ||||
|   RNSVG: | ||||
|     :path: "../node_modules/react-native-svg" | ||||
|   Yoga: | ||||
|     :path: "../node_modules/react-native/ReactCommon/yoga" | ||||
|  | ||||
| @@ -958,7 +953,6 @@ SPEC CHECKSUMS: | ||||
|   RNScreens: 4a1af06327774490d97342c00aee0c2bafb497b7 | ||||
|   RNSentry: 6798624706227656d942849d593f89c8ca3bdde5 | ||||
|   RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3 | ||||
|   RNSVG: ecd661f380a07ba690c9c5929c475a44f432d674 | ||||
|   SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866 | ||||
|   SDWebImageWebPCoder: 3dc350894112feab5375cfba9ce0986544a66a69 | ||||
|   Sentry: a0d4563fa4ddacba31fdcc35daaa8573d87224d6 | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|   "versions": { | ||||
|     "major": 4, | ||||
|     "minor": 2, | ||||
|     "patch": 0 | ||||
|     "patch": 1 | ||||
|   }, | ||||
|   "description": "tooot app for Mastodon", | ||||
|   "author": "xmflsct <me@xmflsct.com>", | ||||
| @@ -89,7 +89,6 @@ | ||||
|     "react-native-safe-area-context": "^4.3.1", | ||||
|     "react-native-screens": "^3.15.0", | ||||
|     "react-native-share-menu": "^6.0.0", | ||||
|     "react-native-svg": "^12.4.4", | ||||
|     "react-native-swipe-list-view": "^3.2.9", | ||||
|     "react-native-tab-view": "^3.1.1", | ||||
|     "react-query": "^3.39.2", | ||||
|   | ||||
| @@ -18,44 +18,32 @@ const ComposeEditAttachment: React.FC<ScreenComposeStackScreenProps< | ||||
|   }, | ||||
|   navigation | ||||
| }) => { | ||||
|   const { t } = useTranslation('screenCompose') | ||||
|     const { t } = useTranslation('screenCompose') | ||||
|  | ||||
|   const headerLeft = useCallback( | ||||
|     () => ( | ||||
|       <HeaderLeft | ||||
|         type='icon' | ||||
|         content='ChevronDown' | ||||
|         onPress={() => navigation.goBack()} | ||||
|       /> | ||||
|     ), | ||||
|     [] | ||||
|   ) | ||||
|  | ||||
|   const children = useCallback( | ||||
|     () => <ComposeEditAttachmentRoot index={index} />, | ||||
|     [] | ||||
|   ) | ||||
|  | ||||
|   return ( | ||||
|     <KeyboardAvoidingView | ||||
|       behavior={Platform.OS === 'ios' ? 'padding' : 'height'} | ||||
|       style={{ flex: 1 }} | ||||
|     > | ||||
|       <SafeAreaView style={{ flex: 1 }} edges={['left', 'right', 'bottom']}> | ||||
|         <Stack.Navigator> | ||||
|           <Stack.Screen | ||||
|             name='Screen-Compose-EditAttachment-Root' | ||||
|             children={children} | ||||
|             options={{ | ||||
|               headerLeft, | ||||
|               headerRight: () => <ComposeEditAttachmentSubmit index={index} />, | ||||
|               title: t('content.editAttachment.header.title') | ||||
|             }} | ||||
|           /> | ||||
|         </Stack.Navigator> | ||||
|       </SafeAreaView> | ||||
|     </KeyboardAvoidingView> | ||||
|   ) | ||||
| } | ||||
|     return ( | ||||
|       <KeyboardAvoidingView | ||||
|         behavior={Platform.OS === 'ios' ? 'padding' : 'height'} | ||||
|         style={{ flex: 1 }} | ||||
|       > | ||||
|         <SafeAreaView style={{ flex: 1 }} edges={['left', 'right', 'bottom']}> | ||||
|           <Stack.Navigator> | ||||
|             <Stack.Screen | ||||
|               name='Screen-Compose-EditAttachment-Root' | ||||
|               children={() => <ComposeEditAttachmentRoot index={index} />} | ||||
|               options={{ | ||||
|                 headerLeft: () => <HeaderLeft | ||||
|                   type='icon' | ||||
|                   content='ChevronDown' | ||||
|                   onPress={() => navigation.goBack()} | ||||
|                 />, | ||||
|                 headerRight: () => <ComposeEditAttachmentSubmit index={index} />, | ||||
|                 title: t('content.editAttachment.header.title') | ||||
|               }} | ||||
|             /> | ||||
|           </Stack.Navigator> | ||||
|         </SafeAreaView> | ||||
|       </KeyboardAvoidingView> | ||||
|     ) | ||||
|   } | ||||
|  | ||||
| export default ComposeEditAttachment | ||||
|   | ||||
| @@ -5,16 +5,14 @@ import { useTheme } from '@utils/styles/ThemeManager' | ||||
| import React, { useContext } from 'react' | ||||
| import { useTranslation } from 'react-i18next' | ||||
| import { Dimensions, Image, View } from 'react-native' | ||||
| import { PanGestureHandler } from 'react-native-gesture-handler' | ||||
| import { Gesture, GestureDetector } from 'react-native-gesture-handler' | ||||
| import Animated, { | ||||
|   Extrapolate, | ||||
|   interpolate, | ||||
|   runOnJS, | ||||
|   useAnimatedGestureHandler, | ||||
|   useAnimatedStyle, | ||||
|   useSharedValue | ||||
| } from 'react-native-reanimated' | ||||
| import Svg, { Circle, G, Path } from 'react-native-svg' | ||||
| import ComposeContext from '../utils/createContext' | ||||
|  | ||||
| export interface Props { | ||||
| @@ -30,30 +28,19 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => { | ||||
|   const theAttachmentRemote = composeState.attachments.uploads[index].remote! | ||||
|   const theAttachmentLocal = composeState.attachments.uploads[index].local | ||||
|  | ||||
|   const windowWidth = Dimensions.get('window').width | ||||
|  | ||||
|   const imageWidthBase = | ||||
|     theAttachmentRemote?.meta?.original?.aspect < 1 | ||||
|       ? Dimensions.get('screen').width * | ||||
|         theAttachmentRemote?.meta?.original?.aspect | ||||
|       : Dimensions.get('screen').width | ||||
|   const padding = (Dimensions.get('screen').width - imageWidthBase) / 2 | ||||
|       ? windowWidth * theAttachmentRemote?.meta?.original?.aspect | ||||
|       : windowWidth | ||||
|   const imageDimensionis = { | ||||
|     width: imageWidthBase, | ||||
|     height: | ||||
|       imageWidthBase / | ||||
|       ((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.original | ||||
|         ?.aspect || 1) | ||||
|       ((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.original?.aspect || 1) | ||||
|   } | ||||
|  | ||||
|   const panX = useSharedValue( | ||||
|     (((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.x || 0) * | ||||
|       imageDimensionis.width) / | ||||
|       2 | ||||
|   ) | ||||
|   const panY = useSharedValue( | ||||
|     (((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.y || 0) * | ||||
|       imageDimensionis.height) / | ||||
|       2 | ||||
|   ) | ||||
|   const updateFocus = ({ x, y }: { x: number; y: number }) => { | ||||
|     composeDispatch({ | ||||
|       type: 'attachment/edit', | ||||
| @@ -70,46 +57,50 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => { | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   type PanContext = { | ||||
|     startX: number | ||||
|     startY: number | ||||
|   } | ||||
|   const onGestureEvent = useAnimatedGestureHandler({ | ||||
|     onStart: (_, context: PanContext) => { | ||||
|       context.startX = panX.value | ||||
|       context.startY = panY.value | ||||
|     }, | ||||
|     onActive: ({ translationX, translationY }, context: PanContext) => { | ||||
|       panX.value = context.startX + translationX | ||||
|       panY.value = context.startY + translationY | ||||
|     }, | ||||
|     onEnd: ({ translationX, translationY }, context: PanContext) => { | ||||
|       runOnJS(updateFocus)({ | ||||
|         x: (context.startX + translationX) / (imageDimensionis.width / 2), | ||||
|         y: (context.startY + translationY) / (imageDimensionis.height / 2) | ||||
|       }) | ||||
|     } | ||||
|   const pan = useSharedValue({ | ||||
|     x: | ||||
|       (((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.x || 0) * | ||||
|         imageDimensionis.width) / | ||||
|       2, | ||||
|     y: | ||||
|       (((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.y || 0) * | ||||
|         imageDimensionis.height) / | ||||
|       2 | ||||
|   }) | ||||
|   const start = useSharedValue({ x: 0, y: 0 }) | ||||
|   const gesture = Gesture.Pan() | ||||
|     .onBegin(() => { | ||||
|       start.value = pan.value | ||||
|     }) | ||||
|     .onUpdate(e => { | ||||
|       pan.value = { | ||||
|         x: e.translationX + start.value.x, | ||||
|         y: e.translationY + start.value.y | ||||
|       } | ||||
|     }) | ||||
|     .onEnd(() => { | ||||
|       runOnJS(updateFocus)({ | ||||
|         x: pan.value.x / (imageDimensionis.width / 2), | ||||
|         y: pan.value.y / (imageDimensionis.height / 2) | ||||
|       }) | ||||
|     }) | ||||
|     .onFinalize(() => { | ||||
|       start.value = pan.value | ||||
|     }) | ||||
|   const styleTransform = useAnimatedStyle(() => { | ||||
|     return { | ||||
|       transform: [ | ||||
|         { | ||||
|           translateX: interpolate( | ||||
|             panX.value, | ||||
|             [ | ||||
|               -imageDimensionis.width / 2 + padding, | ||||
|               imageDimensionis.width / 2 + padding | ||||
|             ], | ||||
|             [ | ||||
|               -imageDimensionis.width / 2 + padding, | ||||
|               imageDimensionis.width / 2 + padding | ||||
|             ], | ||||
|             pan.value.x, | ||||
|             [-imageDimensionis.width / 2, imageDimensionis.width / 2], | ||||
|             [-imageDimensionis.width / 2, imageDimensionis.width / 2], | ||||
|             Extrapolate.CLAMP | ||||
|           ) | ||||
|         }, | ||||
|         { | ||||
|           translateY: interpolate( | ||||
|             panY.value, | ||||
|             pan.value.y, | ||||
|             [-imageDimensionis.height / 2, imageDimensionis.height / 2], | ||||
|             [-imageDimensionis.height / 2, imageDimensionis.height / 2], | ||||
|             Extrapolate.CLAMP | ||||
| @@ -128,47 +119,41 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => { | ||||
|             height: imageDimensionis.height | ||||
|           }} | ||||
|           source={{ | ||||
|             uri: theAttachmentLocal?.uri | ||||
|               ? theAttachmentLocal.uri | ||||
|               : theAttachmentRemote?.preview_url | ||||
|             uri: theAttachmentLocal?.uri ? theAttachmentLocal.uri : theAttachmentRemote?.preview_url | ||||
|           }} | ||||
|         /> | ||||
|         <PanGestureHandler onGestureEvent={onGestureEvent}> | ||||
|         <GestureDetector gesture={gesture}> | ||||
|           <Animated.View | ||||
|             style={[ | ||||
|               styleTransform, | ||||
|               { | ||||
|                 width: windowWidth * 2, | ||||
|                 height: imageDimensionis.height * 2, | ||||
|                 position: 'absolute', | ||||
|                 top: -500 + imageDimensionis.height / 2, | ||||
|                 left: -500 + imageDimensionis.width / 2 | ||||
|                 left: -windowWidth / 2, | ||||
|                 top: -imageDimensionis.height / 2, | ||||
|                 backgroundColor: colors.backgroundOverlayInvert, | ||||
|                 flexDirection: 'row', | ||||
|                 alignItems: 'center', | ||||
|                 justifyContent: 'center' | ||||
|               } | ||||
|             ]} | ||||
|           > | ||||
|             <Svg width='1000' height='1000' viewBox='0 0 1000 1000'> | ||||
|               <G stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'> | ||||
|                 <G> | ||||
|                   <Path | ||||
|                     d='M1000,0 L1000,1000 L0,1000 L0,0 L1000,0 Z M500,475 C486.192881,475 475,486.192881 475,500 C475,513.807119 486.192881,525 500,525 C513.807119,525 525,513.807119 525,500 C525,486.192881 513.807119,475 500,475 Z' | ||||
|                     fill={colors.backgroundOverlayInvert} | ||||
|                   /> | ||||
|                   <Circle | ||||
|                     stroke={colors.primaryOverlay} | ||||
|                     stroke-width='2' | ||||
|                     cx='500' | ||||
|                     cy='500' | ||||
|                     r='24' | ||||
|                   /> | ||||
|                   <Circle | ||||
|                     fill={colors.primaryOverlay} | ||||
|                     cx='500' | ||||
|                     cy='500' | ||||
|                     r='2' | ||||
|                   /> | ||||
|                 </G> | ||||
|               </G> | ||||
|             </Svg> | ||||
|           </Animated.View> | ||||
|         </PanGestureHandler> | ||||
|             children={ | ||||
|               <View | ||||
|                 style={{ | ||||
|                   width: 48, | ||||
|                   height: 48, | ||||
|                   borderRadius: 24, | ||||
|                   borderWidth: 2, | ||||
|                   borderColor: colors.primaryOverlay, | ||||
|                   flexDirection: 'row', | ||||
|                   alignItems: 'center', | ||||
|                   justifyContent: 'center' | ||||
|                 }} | ||||
|               /> | ||||
|             } | ||||
|           /> | ||||
|         </GestureDetector> | ||||
|       </View> | ||||
|       {screenReaderEnabled ? null : ( | ||||
|         <CustomText | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import CustomText from '@components/Text' | ||||
| import AttachmentVideo from '@components/Timeline/Shared/Attachment/Video' | ||||
| import { StyleConstants } from '@utils/styles/constants' | ||||
| import { useTheme } from '@utils/styles/ThemeManager' | ||||
| import React, { useContext, useMemo, useRef } from 'react' | ||||
| import React, { useContext, useRef } from 'react' | ||||
| import { useTranslation } from 'react-i18next' | ||||
| import { ScrollView, StyleSheet, TextInput, View } from 'react-native' | ||||
| import ComposeContext from '../utils/createContext' | ||||
| @@ -18,7 +18,7 @@ const ComposeEditAttachmentRoot: React.FC<Props> = ({ index }) => { | ||||
|   const { composeState, composeDispatch } = useContext(ComposeContext) | ||||
|   const theAttachment = composeState.attachments.uploads[index].remote! | ||||
|  | ||||
|   const mediaDisplay = useMemo(() => { | ||||
|   const mediaDisplay = () => { | ||||
|     if (theAttachment) { | ||||
|       switch (theAttachment.type) { | ||||
|         case 'image': | ||||
| @@ -34,10 +34,10 @@ const ComposeEditAttachmentRoot: React.FC<Props> = ({ index }) => { | ||||
|               video={ | ||||
|                 video.local | ||||
|                   ? ({ | ||||
|                       url: video.local.uri, | ||||
|                       preview_url: video.local.thumbnail, | ||||
|                       blurhash: video.remote?.blurhash | ||||
|                     } as Mastodon.AttachmentVideo) | ||||
|                     url: video.local.uri, | ||||
|                     preview_url: video.local.thumbnail, | ||||
|                     blurhash: video.remote?.blurhash | ||||
|                   } as Mastodon.AttachmentVideo) | ||||
|                   : (video.remote as Mastodon.AttachmentVideo) | ||||
|               } | ||||
|             /> | ||||
| @@ -45,22 +45,13 @@ const ComposeEditAttachmentRoot: React.FC<Props> = ({ index }) => { | ||||
|       } | ||||
|     } | ||||
|     return null | ||||
|   }, []) | ||||
|  | ||||
|   const onChangeText = (e: any) => | ||||
|     composeDispatch({ | ||||
|       type: 'attachment/edit', | ||||
|       payload: { | ||||
|         ...theAttachment, | ||||
|         description: e | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   const scrollViewRef = useRef<ScrollView>(null) | ||||
|  | ||||
|   return ( | ||||
|     <ScrollView ref={scrollViewRef}> | ||||
|       {mediaDisplay} | ||||
|       {mediaDisplay()} | ||||
|       <View style={{ padding: StyleConstants.Spacing.Global.PagePadding }}> | ||||
|         <CustomText | ||||
|           fontStyle='M' | ||||
| @@ -86,7 +77,14 @@ const ComposeEditAttachmentRoot: React.FC<Props> = ({ index }) => { | ||||
|           autoCorrect={false} | ||||
|           maxLength={1500} | ||||
|           multiline | ||||
|           onChangeText={onChangeText} | ||||
|           onChangeText={(e) => | ||||
|             composeDispatch({ | ||||
|               type: 'attachment/edit', | ||||
|               payload: { | ||||
|                 ...theAttachment, | ||||
|                 description: e | ||||
|               } | ||||
|             })} | ||||
|           placeholder={t('content.editAttachment.content.altText.placeholder')} | ||||
|           placeholderTextColor={colors.secondary} | ||||
|           scrollEnabled | ||||
|   | ||||
| @@ -5,12 +5,12 @@ import log from './log' | ||||
|  | ||||
| const dev = () => { | ||||
|   if (__DEV__) { | ||||
|     log('log', 'devs', 'initializing wdyr') | ||||
|     const whyDidYouRender = require('@welldone-software/why-did-you-render') | ||||
|     whyDidYouRender(React, { | ||||
|       trackHooks: true, | ||||
|       hotReloadBufferMs: 1000 | ||||
|     }) | ||||
|     // log('log', 'devs', 'initializing wdyr') | ||||
|     // const whyDidYouRender = require('@welldone-software/why-did-you-render') | ||||
|     // whyDidYouRender(React, { | ||||
|     //   trackHooks: true, | ||||
|     //   hotReloadBufferMs: 1000 | ||||
|     // }) | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										83
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								yarn.lock
									
									
									
									
									
								
							| @@ -2916,11 +2916,6 @@ body-parser@1.19.0: | ||||
|     raw-body "2.4.0" | ||||
|     type-is "~1.6.17" | ||||
|  | ||||
| boolbase@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" | ||||
|   integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== | ||||
|  | ||||
| bplist-creator@0.1.0: | ||||
|   version "0.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" | ||||
| @@ -3508,30 +3503,6 @@ crypto-random-string@^2.0.0: | ||||
|   resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" | ||||
|   integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== | ||||
|  | ||||
| css-select@^5.1.0: | ||||
|   version "5.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" | ||||
|   integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== | ||||
|   dependencies: | ||||
|     boolbase "^1.0.0" | ||||
|     css-what "^6.1.0" | ||||
|     domhandler "^5.0.2" | ||||
|     domutils "^3.0.1" | ||||
|     nth-check "^2.0.1" | ||||
|  | ||||
| css-tree@^1.1.3: | ||||
|   version "1.1.3" | ||||
|   resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" | ||||
|   integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== | ||||
|   dependencies: | ||||
|     mdn-data "2.0.14" | ||||
|     source-map "^0.6.1" | ||||
|  | ||||
| css-what@^6.1.0: | ||||
|   version "6.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" | ||||
|   integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== | ||||
|  | ||||
| csstype@^3.0.2: | ||||
|   version "3.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" | ||||
| @@ -3711,21 +3682,12 @@ dom-serializer@0: | ||||
|     domelementtype "^2.0.1" | ||||
|     entities "^2.0.0" | ||||
|  | ||||
| dom-serializer@^2.0.0: | ||||
|   version "2.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" | ||||
|   integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== | ||||
|   dependencies: | ||||
|     domelementtype "^2.3.0" | ||||
|     domhandler "^5.0.2" | ||||
|     entities "^4.2.0" | ||||
|  | ||||
| domelementtype@1, domelementtype@^1.3.0: | ||||
|   version "1.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" | ||||
|   integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== | ||||
|  | ||||
| domelementtype@^2.0.1, domelementtype@^2.3.0: | ||||
| domelementtype@^2.0.1: | ||||
|   version "2.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" | ||||
|   integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== | ||||
| @@ -3737,13 +3699,6 @@ domhandler@^2.3.0: | ||||
|   dependencies: | ||||
|     domelementtype "1" | ||||
|  | ||||
| domhandler@^5.0.1, domhandler@^5.0.2: | ||||
|   version "5.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" | ||||
|   integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== | ||||
|   dependencies: | ||||
|     domelementtype "^2.3.0" | ||||
|  | ||||
| domutils@^1.5.1: | ||||
|   version "1.7.0" | ||||
|   resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" | ||||
| @@ -3752,15 +3707,6 @@ domutils@^1.5.1: | ||||
|     dom-serializer "0" | ||||
|     domelementtype "1" | ||||
|  | ||||
| domutils@^3.0.1: | ||||
|   version "3.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" | ||||
|   integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== | ||||
|   dependencies: | ||||
|     dom-serializer "^2.0.0" | ||||
|     domelementtype "^2.3.0" | ||||
|     domhandler "^5.0.1" | ||||
|  | ||||
| dotenv@^16.0.1: | ||||
|   version "16.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" | ||||
| @@ -3803,11 +3749,6 @@ entities@^2.0.0: | ||||
|   resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" | ||||
|   integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== | ||||
|  | ||||
| entities@^4.2.0: | ||||
|   version "4.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4" | ||||
|   integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== | ||||
|  | ||||
| env-editor@^0.4.1: | ||||
|   version "0.4.2" | ||||
|   resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861" | ||||
| @@ -5835,11 +5776,6 @@ md5hex@^1.0.0: | ||||
|   resolved "https://registry.yarnpkg.com/md5hex/-/md5hex-1.0.0.tgz#ed74b477a2ee9369f75efee2f08d5915e52a42e8" | ||||
|   integrity sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ== | ||||
|  | ||||
| mdn-data@2.0.14: | ||||
|   version "2.0.14" | ||||
|   resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" | ||||
|   integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== | ||||
|  | ||||
| media-typer@0.3.0: | ||||
|   version "0.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" | ||||
| @@ -6433,13 +6369,6 @@ npmlog@^4.1.2: | ||||
|     gauge "~2.7.3" | ||||
|     set-blocking "~2.0.0" | ||||
|  | ||||
| nth-check@^2.0.1: | ||||
|   version "2.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" | ||||
|   integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== | ||||
|   dependencies: | ||||
|     boolbase "^1.0.0" | ||||
|  | ||||
| nullthrows@^1.1.1: | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" | ||||
| @@ -7190,14 +7119,6 @@ react-native-share-menu@^6.0.0: | ||||
|   resolved "https://registry.yarnpkg.com/react-native-share-menu/-/react-native-share-menu-6.0.0.tgz#0398dd4537ca1138b774fcbff9b05a88c8329cf6" | ||||
|   integrity sha512-KdmRnqjI/B2MigSxGmhbYJ3WMJxKXj+0c47ANcVZ/PTzc2vtz6d1r4KQJgkBImXgNC+vowpuD2UGdPllxadr2A== | ||||
|  | ||||
| react-native-svg@^12.4.4: | ||||
|   version "12.4.4" | ||||
|   resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-12.4.4.tgz#2ba684eaea9a7402fbbe0ed9737e77284631d00e" | ||||
|   integrity sha512-LpcNlEVCURexqPAvQ9ne8KrPVfYz0wIDygwud8VMRmXLezysXzyQN/DTsjm1BO9lIfYp55WQsr3u3yW/vk6iiA== | ||||
|   dependencies: | ||||
|     css-select "^5.1.0" | ||||
|     css-tree "^1.1.3" | ||||
|  | ||||
| react-native-swipe-list-view@^3.2.9: | ||||
|   version "3.2.9" | ||||
|   resolved "https://registry.yarnpkg.com/react-native-swipe-list-view/-/react-native-swipe-list-view-3.2.9.tgz#d725c7cdf481dd5df12a00dbfe0120013b5f2e59" | ||||
| @@ -7907,7 +7828,7 @@ source-map@^0.5.6: | ||||
|   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" | ||||
|   integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== | ||||
|  | ||||
| source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: | ||||
| source-map@^0.6.0, source-map@~0.6.1: | ||||
|   version "0.6.1" | ||||
|   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" | ||||
|   integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== | ||||
|   | ||||
		Reference in New Issue
	
	Block a user