diff --git a/__tests__/__snapshots__/Storyshots.test.js.snap b/__tests__/__snapshots__/Storyshots.test.js.snap
index 8b5073224..3b283ab56 100644
--- a/__tests__/__snapshots__/Storyshots.test.js.snap
+++ b/__tests__/__snapshots__/Storyshots.test.js.snap
@@ -15665,7 +15665,10 @@ exports[`Storyshots Markdown Code 1`] = `
"borderWidth": 1,
"color": "#2f343d",
"fontFamily": "Courier New",
+ "fontSize": 16,
"fontWeight": "400",
+ "paddingLeft": 2,
+ "paddingTop": 2,
"textAlign": "left",
},
]
@@ -15728,7 +15731,10 @@ exports[`Storyshots Markdown Code 1`] = `
"borderWidth": 1,
"color": "#2f343d",
"fontFamily": "Courier New",
+ "fontSize": 16,
"fontWeight": "400",
+ "paddingLeft": 2,
+ "paddingTop": 2,
"textAlign": "left",
},
]
@@ -15773,7 +15779,10 @@ exports[`Storyshots Markdown Code 1`] = `
"borderWidth": 1,
"color": "#2f343d",
"fontFamily": "Courier New",
+ "fontSize": 16,
"fontWeight": "400",
+ "paddingLeft": 2,
+ "paddingTop": 2,
"textAlign": "left",
},
]
@@ -15819,6 +15828,7 @@ exports[`Storyshots Markdown Code 1`] = `
"borderWidth": 1,
"color": "#2f343d",
"fontFamily": "Courier New",
+ "fontSize": 16,
"fontWeight": "400",
"padding": 4,
"textAlign": "left",
@@ -16881,7 +16891,10 @@ exports[`Storyshots Markdown Links 1`] = `
"borderWidth": 1,
"color": "#2f343d",
"fontFamily": "Courier New",
+ "fontSize": 16,
"fontWeight": "400",
+ "paddingLeft": 2,
+ "paddingTop": 2,
"textAlign": "left",
},
]
@@ -16993,7 +17006,10 @@ exports[`Storyshots Markdown Links 1`] = `
"borderWidth": 1,
"color": "#2f343d",
"fontFamily": "Courier New",
+ "fontSize": 16,
"fontWeight": "400",
+ "paddingLeft": 2,
+ "paddingTop": 2,
"textAlign": "left",
},
]
@@ -50287,6 +50303,1370 @@ exports[`Storyshots Message Without header 1`] = `
`;
+exports[`Storyshots NewMarkdown Block quote 1`] = `
+
+
+
+
+
+
+ Rocket.Chat to the moon
+
+
+
+
+
+`;
+
+exports[`Storyshots NewMarkdown Code 1`] = `
+
+
+
+
+ inline code
+
+
+
+
+
+ Multi line
+
+
+ Code
+
+
+
+`;
+
+exports[`Storyshots NewMarkdown Emoji 1`] = `
+
+
+
+ 💚
+
+
+ 😂
+
+
+ 😁
+
+
+
+
+ 🚀
+
+
+ 🤦
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots NewMarkdown Hashtag 1`] = `
+
+
+
+ #text_channel
+
+
+ and
+
+
+ #not_a_channel
+
+
+
+`;
+
+exports[`Storyshots NewMarkdown Headers 1`] = `
+
+
+ # Header 1
+
+
+ ## Header 2
+
+
+ ### Header 3
+
+
+ #### Header 4
+
+
+ ##### Header 5
+
+
+ ###### Header 6
+
+
+`;
+
+exports[`Storyshots NewMarkdown Links 1`] = `
+
+
+
+ https://rocket.chat
+
+
+
+
+ Markdown link
+
+
+
+`;
+
+exports[`Storyshots NewMarkdown Lists 1`] = `
+
+
+
+
+ -
+
+
+ Open Source
+
+
+
+
+ -
+
+
+ Rocket.Chat
+
+
+
+
+
+
+ 1
+ .
+
+
+ Open Source
+
+
+
+
+ 2
+ .
+
+
+ Rocket.Chat
+
+
+
+
+`;
+
+exports[`Storyshots NewMarkdown Mentions 1`] = `
+
+
+
+ rocket.cat
+
+
+
+
+ name
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+ here
+
+
+
+
+
+ all
+
+
+
+`;
+
+exports[`Storyshots NewMarkdown Text 1`] = `
+
+
+
+ This is Rocket.Chat
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+ a
+
+
+ b
+
+
+ c
+
+
+
+
+
+ d
+
+
+
+
+
+
+
+
+ e
+
+
+
+
+ a b c
+
+
+
+
+
+ This is bold
+
+
+
+ and
+
+
+
+ this is italic
+
+
+
+
+`;
+
exports[`Storyshots Room Item Alerts 1`] = `
;
+ inputStyle?: TextStyle;
+ inputRef?: React.Ref;
+ testID?: string;
+ iconLeft?: string;
+ iconRight?: string;
+ left?: JSX.Element;
+ onIconRightPress?(): void;
theme: string;
}
@@ -148,17 +146,10 @@ export default class RCTextInput extends React.PureComponent
{label ? (
-
- {label}
-
+ {label}
) : null}
diff --git a/app/containers/markdown/AtMention.tsx b/app/containers/markdown/AtMention.tsx
index ab6354994..689313257 100644
--- a/app/containers/markdown/AtMention.tsx
+++ b/app/containers/markdown/AtMention.tsx
@@ -1,6 +1,7 @@
import React from 'react';
import { Text } from 'react-native';
+import { useTheme } from '../../theme';
import { themes } from '../../constants/colors';
import styles from './styles';
import { events, logEvent } from '../../utils/log';
@@ -9,20 +10,20 @@ interface IAtMention {
mention: string;
username: string;
navToRoomInfo: Function;
- style: any;
+ style?: any;
useRealName: boolean;
- theme: string;
mentions: any;
}
-const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, style = [], useRealName, theme }: IAtMention) => {
+const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, style = [], useRealName }: IAtMention) => {
+ const { theme } = useTheme();
if (mention === 'all' || mention === 'here') {
return (
@@ -34,11 +35,11 @@ const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, styl
let mentionStyle = {};
if (mention === username) {
mentionStyle = {
- color: themes[theme].mentionMeColor
+ color: themes[theme!].mentionMeColor
};
} else {
mentionStyle = {
- color: themes[theme].mentionOtherColor
+ color: themes[theme!].mentionOtherColor
};
}
@@ -61,7 +62,7 @@ const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, styl
);
}
- return {`@${mention}`};
+ return {`@${mention}`};
});
export default AtMention;
diff --git a/app/containers/markdown/Hashtag.tsx b/app/containers/markdown/Hashtag.tsx
index 872b8782a..b20794de5 100644
--- a/app/containers/markdown/Hashtag.tsx
+++ b/app/containers/markdown/Hashtag.tsx
@@ -1,23 +1,26 @@
import React from 'react';
-import { Text } from 'react-native';
+import { Text, TextStyle } from 'react-native';
import { themes } from '../../constants/colors';
+import { useTheme } from '../../theme';
import styles from './styles';
interface IHashtag {
hashtag: string;
navToRoomInfo: Function;
- style: [];
- theme: string;
+ style?: TextStyle[];
channels: {
+ [index: number]: string | number;
name: string;
_id: number;
}[];
}
-const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [], theme }: IHashtag) => {
+const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [] }: IHashtag) => {
+ const { theme } = useTheme();
+
const handlePress = () => {
- const index = channels.findIndex(channel => channel.name === hashtag);
+ const index = channels?.findIndex(channel => channel.name === hashtag);
const navParam = {
t: 'c',
rid: channels[index]._id
@@ -31,7 +34,7 @@ const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [], them
style={[
styles.mention,
{
- color: themes[theme].mentionOtherColor
+ color: themes[theme!].mentionOtherColor
},
...style
]}
@@ -40,7 +43,7 @@ const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [], them
);
}
- return {`#${hashtag}`};
+ return {`#${hashtag}`};
});
export default Hashtag;
diff --git a/app/containers/markdown/index.tsx b/app/containers/markdown/index.tsx
index d3ce8453e..d84dc7dc8 100644
--- a/app/containers/markdown/index.tsx
+++ b/app/containers/markdown/index.tsx
@@ -3,6 +3,7 @@ import { Image, Text } from 'react-native';
import { Node, Parser } from 'commonmark';
import Renderer from 'commonmark-react-renderer';
import removeMarkdown from 'remove-markdown';
+import { MarkdownAST } from '@rocket.chat/message-parser';
import shortnameToUnicode from '../../utils/shortnameToUnicode';
import I18n from '../../i18n';
@@ -20,9 +21,20 @@ import MarkdownTableCell from './TableCell';
import mergeTextNodes from './mergeTextNodes';
import styles from './styles';
import { isValidURL } from '../../utils/url';
+import NewMarkdown from './new';
+
+interface IUser {
+ _id: string;
+ username: string;
+ name: string;
+}
+
+type UserMention = Pick;
interface IMarkdownProps {
msg: string;
+ md: MarkdownAST;
+ mentions: UserMention[];
getCustomEmoji: Function;
baseUrl: string;
username: string;
@@ -35,7 +47,7 @@ interface IMarkdownProps {
name: string;
_id: number;
}[];
- mentions: object[];
+ enableMessageParser: boolean;
navToRoomInfo: Function;
preview: boolean;
theme: string;
@@ -97,7 +109,9 @@ class Markdown extends PureComponent {
constructor(props: IMarkdownProps) {
super(props);
- this.renderer = this.createRenderer();
+ if (!this.isNewMarkdown) {
+ this.renderer = this.createRenderer();
+ }
}
createRenderer = () =>
@@ -139,6 +153,11 @@ class Markdown extends PureComponent {
renderParagraphsInLists: true
});
+ get isNewMarkdown(): boolean {
+ const { md, enableMessageParser } = this.props;
+ return enableMessageParser && !!md;
+ }
+
editedMessage = (ast: any) => {
const { isEdited } = this.props;
if (isEdited) {
@@ -227,12 +246,12 @@ class Markdown extends PureComponent {
};
renderHashtag = ({ hashtag }: { hashtag: string }) => {
- const { channels, navToRoomInfo, style, theme } = this.props;
- return ;
+ const { channels, navToRoomInfo, style } = this.props;
+ return ;
};
renderAtMention = ({ mentionName }: { mentionName: string }) => {
- const { username, mentions, navToRoomInfo, useRealName, style, theme } = this.props;
+ const { username, mentions, navToRoomInfo, useRealName, style } = this.props;
return (
{
useRealName={useRealName}
username={username}
navToRoomInfo={navToRoomInfo}
- theme={theme}
style={style}
/>
);
@@ -329,12 +347,44 @@ class Markdown extends PureComponent {
};
render() {
- const { msg, numberOfLines, preview = false, theme, style = [], testID } = this.props;
+ const {
+ msg,
+ md,
+ numberOfLines,
+ preview = false,
+ theme,
+ style = [],
+ testID,
+ mentions,
+ channels,
+ navToRoomInfo,
+ useRealName,
+ username,
+ getCustomEmoji,
+ baseUrl,
+ onLinkPress
+ } = this.props;
if (!msg) {
return null;
}
+ if (this.isNewMarkdown) {
+ return (
+
+ );
+ }
+
let m = formatText(msg);
// Ex: '[ ](https://open.rocket.chat/group/test?msg=abcdef) Test'
diff --git a/app/containers/markdown/new/BigEmoji.tsx b/app/containers/markdown/new/BigEmoji.tsx
new file mode 100644
index 000000000..c8f6a3beb
--- /dev/null
+++ b/app/containers/markdown/new/BigEmoji.tsx
@@ -0,0 +1,25 @@
+import React from 'react';
+import { StyleSheet, View } from 'react-native';
+import { BigEmoji as BigEmojiProps } from '@rocket.chat/message-parser';
+
+import Emoji from './Emoji';
+
+interface IBigEmojiProps {
+ value: BigEmojiProps['value'];
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flexDirection: 'row'
+ }
+});
+
+const BigEmoji = ({ value }: IBigEmojiProps): JSX.Element => (
+
+ {value.map(block => (
+
+ ))}
+
+);
+
+export default BigEmoji;
diff --git a/app/containers/markdown/new/Bold.tsx b/app/containers/markdown/new/Bold.tsx
new file mode 100644
index 000000000..9cb1f4fdb
--- /dev/null
+++ b/app/containers/markdown/new/Bold.tsx
@@ -0,0 +1,40 @@
+import React from 'react';
+import { StyleSheet, Text } from 'react-native';
+import { Bold as BoldProps } from '@rocket.chat/message-parser';
+
+import sharedStyles from '../../../views/Styles';
+import Strike from './Strike';
+import Italic from './Italic';
+import Plain from './Plain';
+import Link from './Link';
+
+interface IBoldProps {
+ value: BoldProps['value'];
+}
+
+const styles = StyleSheet.create({
+ text: {
+ ...sharedStyles.textBold
+ }
+});
+
+const Bold = ({ value }: IBoldProps): JSX.Element => (
+
+ {value.map(block => {
+ switch (block.type) {
+ case 'LINK':
+ return ;
+ case 'PLAIN_TEXT':
+ return ;
+ case 'STRIKE':
+ return ;
+ case 'ITALIC':
+ return ;
+ default:
+ return null;
+ }
+ })}
+
+);
+
+export default Bold;
diff --git a/app/containers/markdown/new/Code.tsx b/app/containers/markdown/new/Code.tsx
new file mode 100644
index 000000000..d2a164367
--- /dev/null
+++ b/app/containers/markdown/new/Code.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { Text } from 'react-native';
+import { Code as CodeProps } from '@rocket.chat/message-parser';
+
+import styles from '../styles';
+import { themes } from '../../../constants/colors';
+import { useTheme } from '../../../theme';
+import CodeLine from './CodeLine';
+
+interface ICodeProps {
+ value: CodeProps['value'];
+}
+
+const Code = ({ value }: ICodeProps): JSX.Element => {
+ const { theme } = useTheme();
+
+ return (
+
+ {value.map(block => {
+ switch (block.type) {
+ case 'CODE_LINE':
+ return ;
+ default:
+ return null;
+ }
+ })}
+
+ );
+};
+
+export default Code;
diff --git a/app/containers/markdown/new/CodeLine.tsx b/app/containers/markdown/new/CodeLine.tsx
new file mode 100644
index 000000000..c05066f9c
--- /dev/null
+++ b/app/containers/markdown/new/CodeLine.tsx
@@ -0,0 +1,17 @@
+import React from 'react';
+import { Text } from 'react-native';
+import { CodeLine as CodeLineProps } from '@rocket.chat/message-parser';
+
+interface ICodeLineProps {
+ value: CodeLineProps['value'];
+}
+
+const CodeLine = ({ value }: ICodeLineProps): JSX.Element | null => {
+ if (value.type !== 'PLAIN_TEXT') {
+ return null;
+ }
+
+ return {value.value};
+};
+
+export default CodeLine;
diff --git a/app/containers/markdown/new/Emoji.tsx b/app/containers/markdown/new/Emoji.tsx
new file mode 100644
index 000000000..0800b8874
--- /dev/null
+++ b/app/containers/markdown/new/Emoji.tsx
@@ -0,0 +1,29 @@
+import React, { useContext } from 'react';
+import { Text } from 'react-native';
+import { Emoji as EmojiProps } from '@rocket.chat/message-parser';
+
+import shortnameToUnicode from '../../../utils/shortnameToUnicode';
+import { themes } from '../../../constants/colors';
+import { useTheme } from '../../../theme';
+import styles from '../styles';
+import CustomEmoji from '../../EmojiPicker/CustomEmoji';
+import MarkdownContext from './MarkdownContext';
+
+interface IEmojiProps {
+ value: EmojiProps['value'];
+ isBigEmoji?: boolean;
+}
+
+const Emoji = ({ value, isBigEmoji }: IEmojiProps): JSX.Element => {
+ const { theme } = useTheme();
+ const { baseUrl, getCustomEmoji } = useContext(MarkdownContext);
+ const emojiUnicode = shortnameToUnicode(`:${value.value}:`);
+ const emoji = getCustomEmoji?.(value.value);
+
+ if (emoji) {
+ return ;
+ }
+ return {emojiUnicode};
+};
+
+export default Emoji;
diff --git a/app/containers/markdown/new/Heading.tsx b/app/containers/markdown/new/Heading.tsx
new file mode 100644
index 000000000..2e810d376
--- /dev/null
+++ b/app/containers/markdown/new/Heading.tsx
@@ -0,0 +1,32 @@
+import React from 'react';
+import { Text } from 'react-native';
+import { Heading as HeadingProps } from '@rocket.chat/message-parser';
+
+import { themes } from '../../../constants/colors';
+import styles from '../styles';
+import { useTheme } from '../../../theme';
+
+interface IHeadingProps {
+ value: HeadingProps['value'];
+ level: HeadingProps['level'];
+}
+
+const Heading = ({ value, level }: IHeadingProps): JSX.Element => {
+ const { theme } = useTheme();
+ const textStyle = styles[`heading${level}`];
+
+ return (
+
+ {value.map(block => {
+ switch (block.type) {
+ case 'PLAIN_TEXT':
+ return block.value;
+ default:
+ return null;
+ }
+ })}
+
+ );
+};
+
+export default Heading;
diff --git a/app/containers/markdown/new/Image.tsx b/app/containers/markdown/new/Image.tsx
new file mode 100644
index 000000000..fb9f95d28
--- /dev/null
+++ b/app/containers/markdown/new/Image.tsx
@@ -0,0 +1,41 @@
+import React from 'react';
+import { Image as ImageProps } from '@rocket.chat/message-parser';
+import { createImageProgress } from 'react-native-image-progress';
+import * as Progress from 'react-native-progress';
+import FastImage from '@rocket.chat/react-native-fast-image';
+
+import { useTheme } from '../../../theme';
+import { themes } from '../../../constants/colors';
+import styles from '../../message/styles';
+
+interface IImageProps {
+ value: ImageProps['value'];
+}
+
+type TMessageImage = {
+ img: string;
+ theme: string;
+};
+
+const ImageProgress = createImageProgress(FastImage);
+
+const MessageImage = ({ img, theme }: TMessageImage) => (
+
+);
+
+const Image = ({ value }: IImageProps): JSX.Element => {
+ const { theme } = useTheme();
+ const { src } = value;
+
+ return ;
+};
+
+export default Image;
diff --git a/app/containers/markdown/new/Inline.tsx b/app/containers/markdown/new/Inline.tsx
new file mode 100644
index 000000000..08c4b1e5f
--- /dev/null
+++ b/app/containers/markdown/new/Inline.tsx
@@ -0,0 +1,62 @@
+import React, { useContext } from 'react';
+import { Paragraph as ParagraphProps } from '@rocket.chat/message-parser';
+
+import Hashtag from '../Hashtag';
+import AtMention from '../AtMention';
+import Link from './Link';
+import Plain from './Plain';
+import Bold from './Bold';
+import Strike from './Strike';
+import Italic from './Italic';
+import Emoji from './Emoji';
+import InlineCode from './InlineCode';
+import Image from './Image';
+import MarkdownContext from './MarkdownContext';
+
+interface IParagraphProps {
+ value: ParagraphProps['value'];
+}
+
+const Inline = ({ value }: IParagraphProps): JSX.Element => {
+ const { useRealName, username, navToRoomInfo, mentions, channels } = useContext(MarkdownContext);
+ return (
+ <>
+ {value.map(block => {
+ switch (block.type) {
+ case 'IMAGE':
+ return ;
+ case 'PLAIN_TEXT':
+ return ;
+ case 'BOLD':
+ return ;
+ case 'STRIKE':
+ return ;
+ case 'ITALIC':
+ return ;
+ case 'LINK':
+ return ;
+ case 'MENTION_USER':
+ return (
+
+ );
+ case 'EMOJI':
+ return ;
+ case 'MENTION_CHANNEL':
+ return ;
+ case 'INLINE_CODE':
+ return ;
+ default:
+ return null;
+ }
+ })}
+ >
+ );
+};
+
+export default Inline;
diff --git a/app/containers/markdown/new/InlineCode.tsx b/app/containers/markdown/new/InlineCode.tsx
new file mode 100644
index 000000000..cf90f2cb3
--- /dev/null
+++ b/app/containers/markdown/new/InlineCode.tsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Text } from 'react-native';
+import { InlineCode as InlineCodeProps } from '@rocket.chat/message-parser';
+
+import styles from '../styles';
+import { themes } from '../../../constants/colors';
+import { useTheme } from '../../../theme';
+
+interface IInlineCodeProps {
+ value: InlineCodeProps['value'];
+}
+
+const InlineCode = ({ value }: IInlineCodeProps): JSX.Element => {
+ const { theme } = useTheme();
+
+ return (
+
+ {(block => {
+ switch (block.type) {
+ case 'PLAIN_TEXT':
+ return {block.value};
+ default:
+ return null;
+ }
+ })(value)}
+
+ );
+};
+
+export default InlineCode;
diff --git a/app/containers/markdown/new/Italic.tsx b/app/containers/markdown/new/Italic.tsx
new file mode 100644
index 000000000..fc1432e5a
--- /dev/null
+++ b/app/containers/markdown/new/Italic.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { StyleSheet, Text } from 'react-native';
+import { Italic as ItalicProps } from '@rocket.chat/message-parser';
+
+import Strike from './Strike';
+import Bold from './Bold';
+import Plain from './Plain';
+import Link from './Link';
+
+interface IItalicProps {
+ value: ItalicProps['value'];
+}
+
+const styles = StyleSheet.create({
+ text: {
+ fontStyle: 'italic'
+ }
+});
+
+const Italic = ({ value }: IItalicProps): JSX.Element => (
+
+ {value.map(block => {
+ switch (block.type) {
+ case 'LINK':
+ return ;
+ case 'PLAIN_TEXT':
+ return ;
+ case 'STRIKE':
+ return ;
+ case 'BOLD':
+ return ;
+ default:
+ return null;
+ }
+ })}
+
+);
+
+export default Italic;
diff --git a/app/containers/markdown/new/Link.tsx b/app/containers/markdown/new/Link.tsx
new file mode 100644
index 000000000..e29c4f2c0
--- /dev/null
+++ b/app/containers/markdown/new/Link.tsx
@@ -0,0 +1,60 @@
+import React, { useContext } from 'react';
+import { Text, Clipboard } from 'react-native';
+import { Link as LinkProps } from '@rocket.chat/message-parser';
+
+import styles from '../styles';
+import I18n from '../../../i18n';
+import { LISTENER } from '../../Toast';
+import { useTheme } from '../../../theme';
+import openLink from '../../../utils/openLink';
+import EventEmitter from '../../../utils/events';
+import { themes } from '../../../constants/colors';
+import Strike from './Strike';
+import Italic from './Italic';
+import Bold from './Bold';
+import MarkdownContext from './MarkdownContext';
+
+interface ILinkProps {
+ value: LinkProps['value'];
+}
+
+const Link = ({ value }: ILinkProps): JSX.Element => {
+ const { theme } = useTheme();
+ const { onLinkPress } = useContext(MarkdownContext);
+ const { src, label } = value;
+ const handlePress = () => {
+ if (!src.value) {
+ return;
+ }
+ if (onLinkPress) {
+ return onLinkPress(src.value);
+ }
+ openLink(src.value, theme);
+ };
+
+ const onLongPress = () => {
+ Clipboard.setString(src.value);
+ EventEmitter.emit(LISTENER, { message: I18n.t('Copied_to_clipboard') });
+ };
+
+ return (
+
+ {(block => {
+ switch (block.type) {
+ case 'PLAIN_TEXT':
+ return block.value;
+ case 'STRIKE':
+ return ;
+ case 'ITALIC':
+ return ;
+ case 'BOLD':
+ return ;
+ default:
+ return null;
+ }
+ })(label)}
+
+ );
+};
+
+export default Link;
diff --git a/app/containers/markdown/new/MarkdownContext.ts b/app/containers/markdown/new/MarkdownContext.ts
new file mode 100644
index 000000000..b22f15614
--- /dev/null
+++ b/app/containers/markdown/new/MarkdownContext.ts
@@ -0,0 +1,29 @@
+import React from 'react';
+
+import { UserMention } from '../../message/interfaces';
+
+interface IMarkdownContext {
+ mentions: UserMention[];
+ channels: {
+ name: string;
+ _id: number;
+ }[];
+ useRealName: boolean;
+ username: string;
+ baseUrl: string;
+ navToRoomInfo: Function;
+ getCustomEmoji?: Function;
+ onLinkPress?: Function;
+}
+
+const defaultState = {
+ mentions: [],
+ channels: [],
+ useRealName: false,
+ username: '',
+ baseUrl: '',
+ navToRoomInfo: () => {}
+};
+
+const MarkdownContext = React.createContext(defaultState);
+export default MarkdownContext;
diff --git a/app/containers/markdown/new/OrderedList.tsx b/app/containers/markdown/new/OrderedList.tsx
new file mode 100644
index 000000000..c5ae25125
--- /dev/null
+++ b/app/containers/markdown/new/OrderedList.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import { View, Text } from 'react-native';
+import { OrderedList as OrderedListProps } from '@rocket.chat/message-parser';
+
+import Inline from './Inline';
+import styles from '../styles';
+import { themes } from '../../../constants/colors';
+import { useTheme } from '../../../theme';
+
+interface IOrderedListProps {
+ value: OrderedListProps['value'];
+}
+
+const OrderedList = ({ value }: IOrderedListProps): JSX.Element => {
+ const { theme } = useTheme();
+ return (
+
+ {value.map((item, index) => (
+
+ {index + 1}.
+
+
+ ))}
+
+ );
+};
+
+export default OrderedList;
diff --git a/app/containers/markdown/new/Paragraph.tsx b/app/containers/markdown/new/Paragraph.tsx
new file mode 100644
index 000000000..2f7649bb9
--- /dev/null
+++ b/app/containers/markdown/new/Paragraph.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Text } from 'react-native';
+import { Paragraph as ParagraphProps } from '@rocket.chat/message-parser';
+
+import Inline from './Inline';
+import styles from '../styles';
+import { useTheme } from '../../../theme';
+import { themes } from '../../../constants/colors';
+
+interface IParagraphProps {
+ value: ParagraphProps['value'];
+}
+
+const Paragraph = ({ value }: IParagraphProps): JSX.Element => {
+ const { theme } = useTheme();
+ return (
+
+
+
+ );
+};
+
+export default Paragraph;
diff --git a/app/containers/markdown/new/Plain.tsx b/app/containers/markdown/new/Plain.tsx
new file mode 100644
index 000000000..9eca2e0c7
--- /dev/null
+++ b/app/containers/markdown/new/Plain.tsx
@@ -0,0 +1,22 @@
+import React from 'react';
+import { Text } from 'react-native';
+import { Plain as PlainProps } from '@rocket.chat/message-parser';
+
+import styles from '../styles';
+import { useTheme } from '../../../theme';
+import { themes } from '../../../constants/colors';
+
+interface IPlainProps {
+ value: PlainProps['value'];
+}
+
+const Plain = ({ value }: IPlainProps): JSX.Element => {
+ const { theme } = useTheme();
+ return (
+
+ {value}
+
+ );
+};
+
+export default Plain;
diff --git a/app/containers/markdown/new/Quote.tsx b/app/containers/markdown/new/Quote.tsx
new file mode 100644
index 000000000..27d6a01d1
--- /dev/null
+++ b/app/containers/markdown/new/Quote.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import { View } from 'react-native';
+import { Quote as QuoteProps } from '@rocket.chat/message-parser';
+
+import { themes } from '../../../constants/colors';
+import { useTheme } from '../../../theme';
+import styles from '../styles';
+import Paragraph from './Paragraph';
+
+interface IQuoteProps {
+ value: QuoteProps['value'];
+}
+
+const Quote = ({ value }: IQuoteProps): JSX.Element => {
+ const { theme } = useTheme();
+ return (
+
+
+
+ {value.map(item => (
+
+ ))}
+
+
+ );
+};
+
+export default Quote;
diff --git a/app/containers/markdown/new/Strike.tsx b/app/containers/markdown/new/Strike.tsx
new file mode 100644
index 000000000..4d1cf5ea8
--- /dev/null
+++ b/app/containers/markdown/new/Strike.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { StyleSheet, Text } from 'react-native';
+import { Strike as StrikeProps } from '@rocket.chat/message-parser';
+
+import Bold from './Bold';
+import Italic from './Italic';
+import Plain from './Plain';
+import Link from './Link';
+
+interface IStrikeProps {
+ value: StrikeProps['value'];
+}
+
+const styles = StyleSheet.create({
+ text: {
+ textDecorationLine: 'line-through'
+ }
+});
+
+const Strike = ({ value }: IStrikeProps): JSX.Element => (
+
+ {value.map(block => {
+ switch (block.type) {
+ case 'LINK':
+ return ;
+ case 'PLAIN_TEXT':
+ return ;
+ case 'BOLD':
+ return ;
+ case 'ITALIC':
+ return ;
+ default:
+ return null;
+ }
+ })}
+
+);
+
+export default Strike;
diff --git a/app/containers/markdown/new/TaskList.tsx b/app/containers/markdown/new/TaskList.tsx
new file mode 100644
index 000000000..8f46af965
--- /dev/null
+++ b/app/containers/markdown/new/TaskList.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import { Text, View } from 'react-native';
+import { Tasks as TasksProps } from '@rocket.chat/message-parser';
+
+import Inline from './Inline';
+import styles from '../styles';
+import { themes } from '../../../constants/colors';
+import { useTheme } from '../../../theme';
+
+interface ITasksProps {
+ value: TasksProps['value'];
+}
+
+const TaskList = ({ value = [] }: ITasksProps): JSX.Element => {
+ const { theme } = useTheme();
+ return (
+
+ {value.map(item => (
+
+ {item.status ? '- [x] ' : '- [ ] '}
+
+
+ ))}
+
+ );
+};
+
+export default TaskList;
diff --git a/app/containers/markdown/new/UnorderedList.tsx b/app/containers/markdown/new/UnorderedList.tsx
new file mode 100644
index 000000000..51c9b2188
--- /dev/null
+++ b/app/containers/markdown/new/UnorderedList.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import { UnorderedList as UnorderedListProps } from '@rocket.chat/message-parser';
+import { View, Text } from 'react-native';
+
+import Inline from './Inline';
+import styles from '../styles';
+import { themes } from '../../../constants/colors';
+import { useTheme } from '../../../theme';
+
+interface IUnorderedListProps {
+ value: UnorderedListProps['value'];
+}
+
+const UnorderedList = ({ value }: IUnorderedListProps): JSX.Element => {
+ const { theme } = useTheme();
+ return (
+
+ {value.map(item => (
+
+ -
+
+
+ ))}
+
+ );
+};
+
+export default UnorderedList;
diff --git a/app/containers/markdown/new/index.tsx b/app/containers/markdown/new/index.tsx
new file mode 100644
index 000000000..a56b66f54
--- /dev/null
+++ b/app/containers/markdown/new/index.tsx
@@ -0,0 +1,77 @@
+import React from 'react';
+import { MarkdownAST } from '@rocket.chat/message-parser';
+
+import Quote from './Quote';
+import Paragraph from './Paragraph';
+import Heading from './Heading';
+import Code from './Code';
+import BigEmoji from './BigEmoji';
+import OrderedList from './OrderedList';
+import UnorderedList from './UnorderedList';
+import { UserMention } from '../../message/interfaces';
+import TaskList from './TaskList';
+import MarkdownContext from './MarkdownContext';
+
+interface IBodyProps {
+ tokens: MarkdownAST;
+ mentions: UserMention[];
+ channels: {
+ name: string;
+ _id: number;
+ }[];
+ getCustomEmoji?: Function;
+ onLinkPress?: Function;
+ navToRoomInfo: Function;
+ useRealName: boolean;
+ username: string;
+ baseUrl: string;
+}
+
+const Body = ({
+ tokens,
+ mentions,
+ channels,
+ useRealName,
+ username,
+ navToRoomInfo,
+ getCustomEmoji,
+ baseUrl,
+ onLinkPress
+}: IBodyProps): JSX.Element => (
+
+ {tokens.map(block => {
+ switch (block.type) {
+ case 'BIG_EMOJI':
+ return ;
+ case 'UNORDERED_LIST':
+ return ;
+ case 'ORDERED_LIST':
+ return ;
+ case 'TASKS':
+ return ;
+ case 'QUOTE':
+ return
;
+ case 'PARAGRAPH':
+ return ;
+ case 'CODE':
+ return
;
+ case 'HEADING':
+ return ;
+ default:
+ return null;
+ }
+ })}
+
+);
+
+export default Body;
diff --git a/app/containers/markdown/styles.ts b/app/containers/markdown/styles.ts
index d7eef0502..7a9cdebb5 100644
--- a/app/containers/markdown/styles.ts
+++ b/app/containers/markdown/styles.ts
@@ -30,6 +30,10 @@ export default StyleSheet.create({
del: {
textDecorationLine: 'line-through'
},
+ plainText: {
+ fontSize: 16,
+ flexShrink: 1
+ },
text: {
fontSize: 16,
...sharedStyles.textRegular
@@ -70,12 +74,16 @@ export default StyleSheet.create({
resizeMode: 'contain'
},
codeInline: {
+ fontSize: 16,
...sharedStyles.textRegular,
...codeFontFamily,
borderWidth: 1,
- borderRadius: 4
+ borderRadius: 4,
+ paddingLeft: 2,
+ paddingTop: 2
},
codeBlock: {
+ fontSize: 16,
...sharedStyles.textRegular,
...codeFontFamily,
borderWidth: 1,
diff --git a/app/containers/message/Content.tsx b/app/containers/message/Content.tsx
index ee3b8c931..b9aaf9620 100644
--- a/app/containers/message/Content.tsx
+++ b/app/containers/message/Content.tsx
@@ -51,8 +51,10 @@ const Content = React.memo(
// @ts-ignore
{
unread,
blocks,
autoTranslate: autoTranslateMessage,
- replies
+ replies,
+ md
} = item;
let message = msg;
@@ -391,6 +392,7 @@ class MessageContainer extends React.Component {
;
+
export interface IMessageContent {
isTemp: boolean;
isInfo: boolean;
tmid: string;
isThreadRoom: boolean;
msg: string;
+ md: MarkdownAST;
theme: string;
isEdited: boolean;
isEncrypted: boolean;
@@ -62,7 +73,7 @@ export interface IMessageContent {
name: string;
_id: number;
}[];
- mentions: object[];
+ mentions: UserMention[];
navToRoomInfo: Function;
useRealName: boolean;
isIgnored: boolean;
diff --git a/app/containers/message/styles.ts b/app/containers/message/styles.ts
index 3d4334f7c..49aa273eb 100644
--- a/app/containers/message/styles.ts
+++ b/app/containers/message/styles.ts
@@ -106,7 +106,6 @@ export default StyleSheet.create({
},
image: {
width: '100%',
- // maxWidth: 400,
minHeight: isTablet ? 300 : 200,
borderRadius: 4,
borderWidth: 1,
diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json
index 0c8c517aa..0d75c4e39 100644
--- a/app/i18n/locales/en.json
+++ b/app/i18n/locales/en.json
@@ -1,793 +1,787 @@
{
- "1_person_reacted": "1 person reacted",
- "1_user": "1 user",
- "error-action-not-allowed": "{{action}} is not allowed",
- "error-application-not-found": "Application not found",
- "error-archived-duplicate-name": "There's an archived channel with name {{room_name}}",
- "error-avatar-invalid-url": "Invalid avatar URL: {{url}}",
- "error-avatar-url-handling": "Error while handling avatar setting from a URL ({{url}}) for {{username}}",
- "error-cant-invite-for-direct-room": "Can't invite user to direct rooms",
- "error-could-not-change-email": "Could not change email",
- "error-could-not-change-name": "Could not change name",
- "error-could-not-change-username": "Could not change username",
- "error-could-not-change-status": "Could not change status",
- "error-delete-protected-role": "Cannot delete a protected role",
- "error-department-not-found": "Department not found",
- "error-direct-message-file-upload-not-allowed": "File sharing not allowed in direct messages",
- "error-duplicate-channel-name": "A channel with name {{room_name}} exists",
- "error-email-domain-blacklisted": "The email domain is blacklisted",
- "error-email-send-failed": "Error trying to send email: {{message}}",
- "error-save-image": "Error while saving image",
- "error-save-video": "Error while saving video",
- "error-field-unavailable": "{{field}} is already in use :(",
- "error-file-too-large": "File is too large",
- "error-importer-not-defined": "The importer was not defined correctly, it is missing the Import class.",
- "error-input-is-not-a-valid-field": "{{input}} is not a valid {{field}}",
- "error-invalid-actionlink": "Invalid action link",
- "error-invalid-arguments": "Invalid arguments",
- "error-invalid-asset": "Invalid asset",
- "error-invalid-channel": "Invalid channel.",
- "error-invalid-channel-start-with-chars": "Invalid channel. Start with @ or #",
- "error-invalid-custom-field": "Invalid custom field",
- "error-invalid-custom-field-name": "Invalid custom field name. Use only letters, numbers, hyphens and underscores.",
- "error-invalid-date": "Invalid date provided.",
- "error-invalid-description": "Invalid description",
- "error-invalid-domain": "Invalid domain",
- "error-invalid-email": "Invalid email {{email}}",
- "error-invalid-email-address": "Invalid email address",
- "error-invalid-file-height": "Invalid file height",
- "error-invalid-file-type": "Invalid file type",
- "error-invalid-file-width": "Invalid file width",
- "error-invalid-from-address": "You informed an invalid FROM address.",
- "error-invalid-integration": "Invalid integration",
- "error-invalid-message": "Invalid message",
- "error-invalid-method": "Invalid method",
- "error-invalid-name": "Invalid name",
- "error-invalid-password": "Invalid password",
- "error-invalid-redirectUri": "Invalid redirectUri",
- "error-invalid-role": "Invalid role",
- "error-invalid-room": "Invalid room",
- "error-invalid-room-name": "{{room_name}} is not a valid room name",
- "error-invalid-room-type": "{{type}} is not a valid room type.",
- "error-invalid-settings": "Invalid settings provided",
- "error-invalid-subscription": "Invalid subscription",
- "error-invalid-token": "Invalid token",
- "error-invalid-triggerWords": "Invalid triggerWords",
- "error-invalid-urls": "Invalid URLs",
- "error-invalid-user": "Invalid user",
- "error-invalid-username": "Invalid username",
- "error-invalid-webhook-response": "The webhook URL responded with a status other than 200",
- "error-message-deleting-blocked": "Message deleting is blocked",
- "error-message-editing-blocked": "Message editing is blocked",
- "error-message-size-exceeded": "Message size exceeds Message_MaxAllowedSize",
- "error-missing-unsubscribe-link": "You must provide the [unsubscribe] link.",
- "error-no-owner-channel": "You don't own the channel",
- "error-no-tokens-for-this-user": "There are no tokens for this user",
- "error-not-allowed": "Not allowed",
- "error-not-authorized": "Not authorized",
- "error-push-disabled": "Push is disabled",
- "error-remove-last-owner": "This is the last owner. Please set a new owner before removing this one.",
- "error-role-in-use": "Cannot delete role because it's in use",
- "error-role-name-required": "Role name is required",
- "error-the-field-is-required": "The field {{field}} is required.",
- "error-too-many-requests": "Error, too many requests. Please slow down. You must wait {{seconds}} seconds before trying again.",
- "error-user-is-not-activated": "User is not activated",
- "error-user-has-no-roles": "User has no roles",
- "error-user-limit-exceeded": "The number of users you are trying to invite to #channel_name exceeds the limit set by the administrator",
- "error-user-not-in-room": "User is not in this room",
- "error-user-registration-custom-field": "error-user-registration-custom-field",
- "error-user-registration-disabled": "User registration is disabled",
- "error-user-registration-secret": "User registration is only allowed via Secret URL",
- "error-you-are-last-owner": "You are the last owner. Please set new owner before leaving the room.",
- "error-status-not-allowed": "Invisible status is disabled",
- "Actions": "Actions",
- "activity": "activity",
- "Activity": "Activity",
- "Add_Reaction": "Add Reaction",
- "Add_Server": "Add Server",
- "Add_users": "Add users",
- "Admin_Panel": "Admin Panel",
- "Agent": "Agent",
- "Alert": "Alert",
- "alert": "alert",
- "alerts": "alerts",
- "All_users_in_the_channel_can_write_new_messages": "All users in the channel can write new messages",
- "All_users_in_the_team_can_write_new_messages": "All users in the team can write new messages",
- "A_meaningful_name_for_the_discussion_room": "A meaningful name for the discussion room",
- "All": "All",
- "All_Messages": "All Messages",
- "Allow_Reactions": "Allow Reactions",
- "Alphabetical": "Alphabetical",
- "and_more": "and more",
- "and": "and",
- "announcement": "announcement",
- "Announcement": "Announcement",
- "Apply_Your_Certificate": "Apply Your Certificate",
- "ARCHIVE": "ARCHIVE",
- "archive": "archive",
- "are_typing": "are typing",
- "Are_you_sure_question_mark": "Are you sure?",
- "Are_you_sure_you_want_to_leave_the_room": "Are you sure you want to leave the room {{room}}?",
- "Audio": "Audio",
- "Authenticating": "Authenticating",
- "Automatic": "Automatic",
- "Auto_Translate": "Auto-Translate",
- "Avatar_changed_successfully": "Avatar changed successfully!",
- "Avatar_Url": "Avatar URL",
- "Away": "Away",
- "Back": "Back",
- "Black": "Black",
- "Block_user": "Block user",
- "Browser": "Browser",
- "Broadcast_channel_Description": "Only authorized users can write new messages, but the other users will be able to reply",
- "Broadcast_Channel": "Broadcast Channel",
- "Busy": "Busy",
- "By_proceeding_you_are_agreeing": "By proceeding you are agreeing to our",
- "Cancel_editing": "Cancel editing",
- "Cancel_recording": "Cancel recording",
- "Cancel": "Cancel",
- "changing_avatar": "changing avatar",
- "creating_channel": "creating channel",
- "creating_invite": "creating invite",
- "Channel_Name": "Channel Name",
- "Channels": "Channels",
- "Chats": "Chats",
- "Call_already_ended": "Call already ended!",
- "Clear_cookies_alert": "Do you want to clear all cookies?",
- "Clear_cookies_desc": "This action will clear all login cookies, allowing you to login into other accounts.",
- "Clear_cookies_yes": "Yes, clear cookies",
- "Clear_cookies_no": "No, keep cookies",
- "Click_to_join": "Click to Join!",
- "Close": "Close",
- "Close_emoji_selector": "Close emoji selector",
- "Closing_chat": "Closing chat",
- "Change_language_loading": "Changing language.",
- "Chat_closed_by_agent": "Chat closed by agent",
- "Choose": "Choose",
- "Choose_from_library": "Choose from library",
- "Choose_file": "Choose file",
- "Choose_where_you_want_links_be_opened": "Choose where you want links be opened",
- "Code": "Code",
- "Code_or_password_invalid": "Code or password invalid",
- "Collaborative": "Collaborative",
- "Confirm": "Confirm",
- "Connect": "Connect",
- "Connected": "Connected",
- "connecting_server": "connecting to server",
- "Connecting": "Connecting...",
- "Contact_us": "Contact us",
- "Contact_your_server_admin": "Contact your server admin.",
- "Continue_with": "Continue with",
- "Copied_to_clipboard": "Copied to clipboard!",
- "Copy": "Copy",
- "Conversation": "Conversation",
- "Permalink": "Permalink",
- "Certificate_password": "Certificate Password",
- "Clear_cache": "Clear local server cache",
- "Clear_cache_loading": "Clearing cache.",
- "Whats_the_password_for_your_certificate": "What's the password for your certificate?",
- "Create_account": "Create an account",
- "Create_Channel": "Create Channel",
- "Create_Direct_Messages": "Create Direct Messages",
- "Create_Discussion": "Create Discussion",
- "Created_snippet": "created a snippet",
- "Create_a_new_workspace": "Create a new workspace",
- "Create": "Create",
- "Custom_Status": "Custom Status",
- "Dark": "Dark",
- "Dark_level": "Dark Level",
- "Default": "Default",
- "Default_browser": "Default browser",
- "Delete_Room_Warning": "Deleting a room will delete all messages posted within the room. This cannot be undone.",
- "Department": "Department",
- "delete": "delete",
- "Delete": "Delete",
- "DELETE": "DELETE",
- "move": "move",
- "deleting_room": "deleting room",
- "description": "description",
- "Description": "Description",
- "Desktop_Options": "Desktop Options",
- "Desktop_Notifications": "Desktop Notifications",
- "Desktop_Alert_info": "These notifications are delivered in desktop",
- "Directory": "Directory",
- "Direct_Messages": "Direct Messages",
- "Disable_notifications": "Disable notifications",
- "Discussions": "Discussions",
- "Discussion_Desc": "Help keeping an overview about what's going on! By creating a discussion, a sub-channel of the one you selected is created and both are linked.",
- "Discussion_name": "Discussion name",
- "Done": "Done",
- "Dont_Have_An_Account": "Don't you have an account?",
- "Do_you_have_an_account": "Do you have an account?",
- "Do_you_have_a_certificate": "Do you have a certificate?",
- "Do_you_really_want_to_key_this_room_question_mark": "Do you really want to {{key}} this room?",
- "E2E_Encryption": "E2E Encryption",
- "E2E_How_It_Works_info1": "You can now create encrypted private groups and direct messages. You may also change existing private groups or DMs to encrypted.",
- "E2E_How_It_Works_info2": "This is *end to end encryption* so the key to encode/decode your messages and they will not be saved on the server. For that reason *you need to store this password somewhere safe* which you can access later if you may need.",
- "E2E_How_It_Works_info3": "If you proceed, it will be auto generated an E2E password.",
- "E2E_How_It_Works_info4": "You can also setup a new password for your encryption key any time from any browser you have entered the existing E2E password.",
- "edit": "edit",
- "edited": "edited",
- "Edit": "Edit",
- "Edit_Status": "Edit Status",
- "Edit_Invite": "Edit Invite",
- "End_to_end_encrypted_room": "End to end encrypted room",
- "end_to_end_encryption": "end to end encryption",
- "Email_Notification_Mode_All": "Every Mention/DM",
- "Email_Notification_Mode_Disabled": "Disabled",
- "Email_or_password_field_is_empty": "Email or password field is empty",
- "Email": "E-mail",
- "email": "e-mail",
- "Empty_title": "Empty title",
- "Enable_Auto_Translate": "Enable Auto-Translate",
- "Enable_notifications": "Enable notifications",
- "Encrypted": "Encrypted",
- "Encrypted_message": "Encrypted message",
- "Enter_Your_E2E_Password": "Enter Your E2E Password",
- "Enter_Your_Encryption_Password_desc1": "This will allow you to access your encrypted private groups and direct messages.",
- "Enter_Your_Encryption_Password_desc2": "You need to enter the password to encode/decode messages every place you use the chat.",
- "Encryption_error_title": "Your encryption password seems wrong",
- "Encryption_error_desc": "It wasn't possible to decode your encryption key to be imported.",
- "Everyone_can_access_this_channel": "Everyone can access this channel",
- "Everyone_can_access_this_team": "Everyone can access this team",
- "Error_uploading": "Error uploading",
- "Expiration_Days": "Expiration (Days)",
- "Favorite": "Favorite",
- "Favorites": "Favorites",
- "Files": "Files",
- "File_description": "File description",
- "File_name": "File name",
- "Finish_recording": "Finish recording",
- "Following_thread": "Following thread",
- "For_your_security_you_must_enter_your_current_password_to_continue": "For your security, you must enter your current password to continue",
- "Forgot_password_If_this_email_is_registered": "If this email is registered, we'll send instructions on how to reset your password. If you do not receive an email shortly, please come back and try again.",
- "Forgot_password": "Forgot your password?",
- "Forgot_Password": "Forgot Password",
- "Forward": "Forward",
- "Forward_Chat": "Forward Chat",
- "Forward_to_department": "Forward to department",
- "Forward_to_user": "Forward to user",
- "Full_table": "Click to see full table",
- "Generate_New_Link": "Generate New Link",
- "Group_by_favorites": "Group favorites",
- "Group_by_type": "Group by type",
- "Hide": "Hide",
- "Has_joined_the_channel": "has joined the channel",
- "Has_joined_the_conversation": "has joined the conversation",
- "Has_left_the_channel": "has left the channel",
- "Hide_System_Messages": "Hide System Messages",
- "Hide_type_messages": "Hide \"{{type}}\" messages",
- "How_It_Works": "How It Works",
- "Message_HideType_uj": "User Join",
- "Message_HideType_ul": "User Leave",
- "Message_HideType_ru": "User Removed",
- "Message_HideType_au": "User Added",
- "Message_HideType_mute_unmute": "User Muted / Unmuted",
- "Message_HideType_r": "Room Name Changed",
- "Message_HideType_ut": "User Joined Conversation",
- "Message_HideType_wm": "Welcome",
- "Message_HideType_rm": "Message Removed",
- "Message_HideType_subscription_role_added": "Was Set Role",
- "Message_HideType_subscription_role_removed": "Role No Longer Defined",
- "Message_HideType_room_archived": "Room Archived",
- "Message_HideType_room_unarchived": "Room Unarchived",
- "I_Saved_My_E2E_Password": "I Saved My E2E Password",
- "IP": "IP",
- "In_app": "In-app",
- "In_App_And_Desktop": "In-app and Desktop",
- "In_App_and_Desktop_Alert_info": "Displays a banner at the top of the screen when app is open, and displays a notification on desktop",
- "Invisible": "Invisible",
- "Invite": "Invite",
- "is_a_valid_RocketChat_instance": "is a valid Rocket.Chat instance",
- "is_not_a_valid_RocketChat_instance": "is not a valid Rocket.Chat instance",
- "is_typing": "is typing",
- "Invalid_or_expired_invite_token": "Invalid or expired invite token",
- "Invalid_server_version": "The server you're trying to connect is using a version that's not supported by the app anymore: {{currentVersion}}.\n\nWe require version {{minVersion}}",
- "Invite_Link": "Invite Link",
- "Invite_users": "Invite users",
- "Join": "Join",
- "Join_Code": "Join Code",
- "Insert_Join_Code": "Insert Join Code",
- "Join_our_open_workspace": "Join our open workspace",
- "Join_your_workspace": "Join your workspace",
- "Just_invited_people_can_access_this_channel": "Just invited people can access this channel",
- "Just_invited_people_can_access_this_team": "Just invited people can access this team",
- "Language": "Language",
- "last_message": "last message",
- "Leave_channel": "Leave channel",
- "leaving_room": "leaving room",
- "Leave": "Leave",
- "leave": "leave",
- "Legal": "Legal",
- "Light": "Light",
- "License": "License",
- "Livechat": "Livechat",
- "Livechat_edit": "Livechat edit",
- "Login": "Login",
- "Login_error": "Your credentials were rejected! Please try again.",
- "Login_with": "Login with",
- "Logging_out": "Logging out.",
- "Logout": "Logout",
- "Max_number_of_uses": "Max number of uses",
- "Max_number_of_users_allowed_is_number": "Max number of users allowed is {{maxUsers}}",
- "members": "members",
- "Members": "Members",
- "Mentioned_Messages": "Mentioned Messages",
- "mentioned": "mentioned",
- "Mentions": "Mentions",
- "Message_accessibility": "Message from {{user}} at {{time}}: {{message}}",
- "Message_actions": "Message actions",
- "Message_pinned": "Message pinned",
- "Message_removed": "Message removed",
- "Message_starred": "Message starred",
- "Message_unstarred": "Message unstarred",
- "message": "message",
- "messages": "messages",
- "Message": "Message",
- "Messages": "Messages",
- "Message_Reported": "Message reported",
- "Microphone_Permission_Message": "Rocket.Chat needs access to your microphone so you can send audio message.",
- "Microphone_Permission": "Microphone Permission",
- "Mute": "Mute",
- "muted": "muted",
- "My_servers": "My servers",
- "N_people_reacted": "{{n}} people reacted",
- "N_users": "{{n}} users",
- "N_channels": "{{n}} channels",
- "name": "name",
- "Name": "Name",
- "Navigation_history": "Navigation history",
- "Never": "Never",
- "New_Message": "New Message",
- "New_Password": "New Password",
- "New_Server": "New Server",
- "Next": "Next",
- "No_files": "No files",
- "No_limit": "No limit",
- "No_mentioned_messages": "No mentioned messages",
- "No_pinned_messages": "No pinned messages",
- "No_results_found": "No results found",
- "No_starred_messages": "No starred messages",
- "No_thread_messages": "No thread messages",
- "No_label_provided": "No {{label}} provided.",
- "No_Message": "No Message",
- "No_messages_yet": "No messages yet",
- "No_Reactions": "No Reactions",
- "No_Read_Receipts": "No Read Receipts",
- "Not_logged": "Not logged",
- "Not_RC_Server": "This is not a Rocket.Chat server.\n{{contact}}",
- "Nothing": "Nothing",
- "Nothing_to_save": "Nothing to save!",
- "Notify_active_in_this_room": "Notify active users in this room",
- "Notify_all_in_this_room": "Notify all in this room",
- "Notifications": "Notifications",
- "Notification_Duration": "Notification Duration",
- "Notification_Preferences": "Notification Preferences",
- "No_available_agents_to_transfer": "No available agents to transfer",
- "Offline": "Offline",
- "Oops": "Oops!",
- "Omnichannel": "Omnichannel",
- "Open_Livechats": "Chats in Progress",
- "Omnichannel_enable_alert": "You're not available on Omnichannel. Would you like to be available?",
- "Onboarding_description": "A workspace is your team or organization’s space to collaborate. Ask the workspace admin for address to join or create one for your team.",
- "Onboarding_join_workspace": "Join a workspace",
- "Onboarding_subtitle": "Beyond Team Collaboration",
- "Onboarding_title": "Welcome to Rocket.Chat",
- "Onboarding_join_open_description": "Join our open workspace to chat with the Rocket.Chat team and community.",
- "Onboarding_agree_terms": "By continuing, you agree to Rocket.Chat",
- "Onboarding_less_options": "Less options",
- "Onboarding_more_options": "More options",
- "Online": "Online",
- "Only_authorized_users_can_write_new_messages": "Only authorized users can write new messages",
- "Open_emoji_selector": "Open emoji selector",
- "Open_Source_Communication": "Open Source Communication",
- "Open_your_authentication_app_and_enter_the_code": "Open your authentication app and enter the code.",
- "OR": "OR",
- "OS": "OS",
- "Overwrites_the_server_configuration_and_use_room_config": "Overwrites the server configuration and use room config",
- "Password": "Password",
- "Parent_channel_or_group": "Parent channel or group",
- "Permalink_copied_to_clipboard": "Permalink copied to clipboard!",
- "Phone": "Phone",
- "Pin": "Pin",
- "Pinned_Messages": "Pinned Messages",
- "pinned": "pinned",
- "Pinned": "Pinned",
- "Please_add_a_comment": "Please add a comment",
- "Please_enter_your_password": "Please enter your password",
- "Please_wait": "Please wait.",
- "Preferences": "Preferences",
- "Preferences_saved": "Preferences saved!",
- "Privacy_Policy": " Privacy Policy",
- "Private_Channel": "Private Channel",
- "Private": "Private",
- "Processing": "Processing...",
- "Profile_saved_successfully": "Profile saved successfully!",
- "Profile": "Profile",
- "Public_Channel": "Public Channel",
- "Public": "Public",
- "Push_Notifications": "Push Notifications",
- "Push_Notifications_Alert_Info": "These notifications are delivered to you when the app is not open",
- "Quote": "Quote",
- "Reactions_are_disabled": "Reactions are disabled",
- "Reactions_are_enabled": "Reactions are enabled",
- "Reactions": "Reactions",
- "Read": "Read",
- "Read_External_Permission_Message": "Rocket.Chat needs to access photos, media, and files on your device",
- "Read_External_Permission": "Read Media Permission",
- "Read_Only_Channel": "Read Only Channel",
- "Read_Only": "Read Only",
- "Read_Receipt": "Read Receipt",
- "Receive_Group_Mentions": "Receive Group Mentions",
- "Receive_Group_Mentions_Info": "Receive @all and @here mentions",
- "Register": "Register",
- "Repeat_Password": "Repeat Password",
- "Replied_on": "Replied on:",
- "replies": "replies",
- "reply": "reply",
- "Reply": "Reply",
- "Report": "Report",
- "Receive_Notification": "Receive Notification",
- "Receive_notifications_from": "Receive notifications from {{name}}",
- "Resend": "Resend",
- "Reset_password": "Reset password",
- "resetting_password": "resetting password",
- "RESET": "RESET",
- "Return": "Return",
- "Review_app_title": "Are you enjoying this app?",
- "Review_app_desc": "Give us 5 stars on {{store}}",
- "Review_app_yes": "Sure!",
- "Review_app_no": "No",
- "Review_app_later": "Maybe later",
- "Review_app_unable_store": "Unable to open {{store}}",
- "Review_this_app": "Review this app",
- "Remove": "Remove",
- "remove": "remove",
- "Roles": "Roles",
- "Room_actions": "Room actions",
- "Room_changed_announcement": "Room announcement changed to: {{announcement}} by {{userBy}}",
- "Room_changed_avatar": "Room avatar changed by {{userBy}}",
- "Room_changed_description": "Room description changed to: {{description}} by {{userBy}}",
- "Room_changed_privacy": "Room type changed to: {{type}} by {{userBy}}",
- "Room_changed_topic": "Room topic changed to: {{topic}} by {{userBy}}",
- "Room_Files": "Room Files",
- "Room_Info_Edit": "Room Info Edit",
- "Room_Info": "Room Info",
- "Room_Members": "Room Members",
- "Room_name_changed": "Room name changed to: {{name}} by {{userBy}}",
- "SAVE": "SAVE",
- "Save_Changes": "Save Changes",
- "Save": "Save",
- "Saved": "Saved",
- "saving_preferences": "saving preferences",
- "saving_profile": "saving profile",
- "saving_settings": "saving settings",
- "saved_to_gallery": "Saved to gallery",
- "Save_Your_E2E_Password": "Save Your E2E Password",
- "Save_Your_Encryption_Password": "Save Your Encryption Password",
- "Save_Your_Encryption_Password_warning": "This password is not stored anywhere so save it carefully somewhere else.",
- "Save_Your_Encryption_Password_info": "Notice that you lose your password, there is no way to recover it and you will lose access to your messages.",
- "Search_Messages": "Search Messages",
- "Search": "Search",
- "Search_by": "Search by",
- "Search_global_users": "Search for global users",
- "Search_global_users_description": "If you turn-on, you can search for any user from others companies or servers.",
- "Seconds": "{{second}} seconds",
- "Security_and_privacy": "Security and privacy",
- "Select_Avatar": "Select Avatar",
- "Select_Server": "Select Server",
- "Select_Users": "Select Users",
- "Select_a_Channel": "Select a Channel",
- "Select_a_Department": "Select a Department",
- "Select_an_option": "Select an option",
- "Select_a_User": "Select a User",
- "Send": "Send",
- "Send_audio_message": "Send audio message",
- "Send_crash_report": "Send crash report",
- "Send_message": "Send message",
- "Send_me_the_code_again": "Send me the code again",
- "Send_to": "Send to...",
- "Sending_to": "Sending to",
- "Sent_an_attachment": "Sent an attachment",
- "Server": "Server",
- "Servers": "Servers",
- "Server_version": "Server version: {{version}}",
- "Set_username_subtitle": "The username is used to allow others to mention you in messages",
- "Set_custom_status": "Set custom status",
- "Set_status": "Set status",
- "Status_saved_successfully": "Status saved successfully!",
- "Settings": "Settings",
- "Settings_succesfully_changed": "Settings succesfully changed!",
- "Share": "Share",
- "Share_Link": "Share Link",
- "Share_this_app": "Share this app",
- "Show_more": "Show more..",
- "Show_Unread_Counter": "Show Unread Counter",
- "Show_Unread_Counter_Info": "Unread counter is displayed as a badge on the right of the channel, in the list",
- "Sign_in_your_server": "Sign in your server",
- "Sign_Up": "Sign Up",
- "Some_field_is_invalid_or_empty": "Some field is invalid or empty",
- "Sorting_by": "Sorting by {{key}}",
- "Sound": "Sound",
- "Star_room": "Star room",
- "Star": "Star",
- "Starred_Messages": "Starred Messages",
- "starred": "starred",
- "Starred": "Starred",
- "Start_of_conversation": "Start of conversation",
- "Start_a_Discussion": "Start a Discussion",
- "Started_discussion": "Started a discussion:",
- "Started_call": "Call started by {{userBy}}",
- "Submit": "Submit",
- "Table": "Table",
- "Tags": "Tags",
- "Take_a_photo": "Take a photo",
- "Take_a_video": "Take a video",
- "Take_it": "Take it!",
- "tap_to_change_status": "tap to change status",
- "Tap_to_view_servers_list": "Tap to view servers list",
- "Terms_of_Service": " Terms of Service ",
- "Theme": "Theme",
- "The_user_wont_be_able_to_type_in_roomName": "The user won't be able to type in {{roomName}}",
- "The_user_will_be_able_to_type_in_roomName": "The user will be able to type in {{roomName}}",
- "There_was_an_error_while_action": "There was an error while {{action}}!",
- "This_room_is_blocked": "This room is blocked",
- "This_room_is_read_only": "This room is read only",
- "Thread": "Thread",
- "Threads": "Threads",
- "Timezone": "Timezone",
- "To": "To",
- "topic": "topic",
- "Topic": "Topic",
- "Translate": "Translate",
- "Try_again": "Try again",
- "Two_Factor_Authentication": "Two-factor Authentication",
- "Type_the_channel_name_here": "Type the channel name here",
- "unarchive": "unarchive",
- "UNARCHIVE": "UNARCHIVE",
- "Unblock_user": "Unblock user",
- "Unfavorite": "Unfavorite",
- "Unfollowed_thread": "Unfollowed thread",
- "Unmute": "Unmute",
- "unmuted": "unmuted",
- "Unpin": "Unpin",
- "unread_messages": "unread",
- "Unread": "Unread",
- "Unread_on_top": "Unread on top",
- "Unstar": "Unstar",
- "Updating": "Updating...",
- "Uploading": "Uploading",
- "Upload_file_question_mark": "Upload file?",
- "User": "User",
- "Users": "Users",
- "User_added_by": "User {{userAdded}} added by {{userBy}}",
- "User_Info": "User Info",
- "User_has_been_key": "User has been {{key}}",
- "User_is_no_longer_role_by_": "{{user}} is no longer {{role}} by {{userBy}}",
- "User_muted_by": "User {{userMuted}} muted by {{userBy}}",
- "User_removed_by": "User {{userRemoved}} removed by {{userBy}}",
- "User_sent_an_attachment": "{{user}} sent an attachment",
- "User_unmuted_by": "User {{userUnmuted}} unmuted by {{userBy}}",
- "User_was_set_role_by_": "{{user}} was set {{role}} by {{userBy}}",
- "Username_is_empty": "Username is empty",
- "Username": "Username",
- "Username_or_email": "Username or email",
- "Uses_server_configuration": "Uses server configuration",
- "Validating": "Validating",
- "Registration_Succeeded": "Registration Succeeded!",
- "Verify": "Verify",
- "Verify_email_title": "Registration Succeeded!",
- "Verify_email_desc": "We have sent you an email to confirm your registration. If you do not receive an email shortly, please come back and try again.",
- "Verify_your_email_for_the_code_we_sent": "Verify your email for the code we sent",
- "Video_call": "Video call",
- "View_Original": "View Original",
- "Voice_call": "Voice call",
- "Waiting_for_network": "Waiting for network...",
- "Websocket_disabled": "Websocket is disabled for this server.\n{{contact}}",
- "Welcome": "Welcome",
- "What_are_you_doing_right_now": "What are you doing right now?",
- "Whats_your_2fa": "What's your 2FA code?",
- "Without_Servers": "Without Servers",
- "Workspaces": "Workspaces",
- "Would_you_like_to_return_the_inquiry": "Would you like to return the inquiry?",
- "Write_External_Permission_Message": "Rocket.Chat needs access to your gallery so you can save images.",
- "Write_External_Permission": "Gallery Permission",
- "Yes": "Yes",
- "Yes_action_it": "Yes, {{action}} it!",
- "Yesterday": "Yesterday",
- "You_are_in_preview_mode": "You are in preview mode",
- "You_are_offline": "You are offline",
- "You_can_search_using_RegExp_eg": "You can use RegExp. e.g. `/^text$/i`",
- "You_colon": "You: ",
- "you_were_mentioned": "you were mentioned",
- "You_were_removed_from_channel": "You were removed from {{channel}}",
- "you": "you",
- "You": "You",
- "Logged_out_by_server": "You've been logged out by the server. Please log in again.",
- "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "You need to access at least one Rocket.Chat server to share something.",
- "You_need_to_verifiy_your_email_address_to_get_notications": "You need to verify your email address to get notifications",
- "Your_certificate": "Your Certificate",
- "Your_invite_link_will_expire_after__usesLeft__uses": "Your invite link will expire after {{usesLeft}} uses.",
- "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "Your invite link will expire on {{date}} or after {{usesLeft}} uses.",
- "Your_invite_link_will_expire_on__date__": "Your invite link will expire on {{date}}.",
- "Your_invite_link_will_never_expire": "Your invite link will never expire.",
- "Your_workspace": "Your workspace",
- "Your_password_is": "Your password is",
- "Version_no": "Version: {{version}}",
- "You_will_not_be_able_to_recover_this_message": "You will not be able to recover this message!",
- "You_will_unset_a_certificate_for_this_server": "You will unset a certificate for this server",
- "Change_Language": "Change Language",
- "Crash_report_disclaimer": "We never track the content of your chats. The crash report and analytics events only contains relevant information for us in order to identify and fix issues.",
- "Type_message": "Type message",
- "Room_search": "Rooms search",
- "Room_selection": "Room selection 1...9",
- "Next_room": "Next room",
- "Previous_room": "Previous room",
- "New_room": "New room",
- "Upload_room": "Upload to room",
- "Search_messages": "Search messages",
- "Scroll_messages": "Scroll messages",
- "Reply_latest": "Reply to latest",
- "Reply_in_Thread": "Reply in Thread",
- "Server_selection": "Server selection",
- "Server_selection_numbers": "Server selection 1...9",
- "Add_server": "Add server",
- "New_line": "New line",
- "You_will_be_logged_out_of_this_application": "You will be logged out of this application.",
- "Clear": "Clear",
- "This_will_clear_all_your_offline_data": "This will clear all your offline data.",
- "This_will_remove_all_data_from_this_server": "This will remove all data from this server.",
- "Mark_unread": "Mark Unread",
- "Wait_activation_warning": "Before you can login, your account must be manually activated by an administrator.",
- "Screen_lock": "Screen lock",
- "Local_authentication_biometry_title": "Authenticate",
- "Local_authentication_biometry_fallback": "Use passcode",
- "Local_authentication_unlock_option": "Unlock with Passcode",
- "Local_authentication_change_passcode": "Change Passcode",
- "Local_authentication_info": "Note: if you forget the Passcode, you'll need to delete and reinstall the app.",
- "Local_authentication_facial_recognition": "facial recognition",
- "Local_authentication_fingerprint": "fingerprint",
- "Local_authentication_unlock_with_label": "Unlock with {{label}}",
- "Local_authentication_auto_lock_60": "After 1 minute",
- "Local_authentication_auto_lock_300": "After 5 minutes",
- "Local_authentication_auto_lock_900": "After 15 minutes",
- "Local_authentication_auto_lock_1800": "After 30 minutes",
- "Local_authentication_auto_lock_3600": "After 1 hour",
- "Passcode_enter_title": "Enter your passcode",
- "Passcode_choose_title": "Choose your new passcode",
- "Passcode_choose_confirm_title": "Confirm your new passcode",
- "Passcode_choose_error": "Passcodes don't match. Try again.",
- "Passcode_choose_force_set": "Passcode required by admin",
- "Passcode_app_locked_title": "App locked",
- "Passcode_app_locked_subtitle": "Try again in {{timeLeft}} seconds",
- "After_seconds_set_by_admin": "After {{seconds}} seconds (set by admin)",
- "Dont_activate": "Don't activate now",
- "Queued_chats": "Queued chats",
- "Queue_is_empty": "Queue is empty",
- "Logout_from_other_logged_in_locations": "Logout from other logged in locations",
- "You_will_be_logged_out_from_other_locations": "You'll be logged out from other locations.",
- "Logged_out_of_other_clients_successfully": "Logged out of other clients successfully",
- "Logout_failed": "Logout failed!",
- "Log_analytics_events": "Log analytics events",
- "E2E_encryption_change_password_title": "Change Encryption Password",
- "E2E_encryption_change_password_description": "You can now create encrypted private groups and direct messages. You may also change existing private groups or DMs to encrypted. \nThis is end to end encryption so the key to encode/decode your messages will not be saved on the server. For that reason you need to store your password somewhere safe. You will be required to enter it on other devices you wish to use e2e encryption on.",
- "E2E_encryption_change_password_error": "Error while changing E2E key password!",
- "E2E_encryption_change_password_success": "E2E key password changed successfully!",
- "E2E_encryption_change_password_message": "Make sure you've saved it carefully somewhere else.",
- "E2E_encryption_change_password_confirmation": "Yes, change it",
- "E2E_encryption_reset_title": "Reset E2E Key",
- "E2E_encryption_reset_description": "This option will remove your current E2E key and log you out. \nWhen you login again, Rocket.Chat will generate you a new key and restore your access to any encrypted room that has one or more members online. \nDue to the nature of the E2E encryption, Rocket.Chat will not be able to restore access to any encrypted room that has no member online.",
- "E2E_encryption_reset_button": "Reset E2E Key",
- "E2E_encryption_reset_error": "Error while resetting E2E key!",
- "E2E_encryption_reset_message": "You're going to be logged out.",
- "E2E_encryption_reset_confirmation": "Yes, reset it",
- "Following": "Following",
- "Threads_displaying_all": "Displaying All",
- "Threads_displaying_following": "Displaying Following",
- "Threads_displaying_unread": "Displaying Unread",
- "No_threads": "There are no threads",
- "No_threads_following": "You are not following any threads",
- "No_threads_unread": "There are no unread threads",
- "No_discussions": "There are no discussions",
- "Messagebox_Send_to_channel": "Send to channel",
- "Leader": "Leader",
- "Moderator": "Moderator",
- "Owner": "Owner",
- "Remove_from_room": "Remove from room",
- "Ignore": "Ignore",
- "Unignore": "Unignore",
- "User_has_been_ignored": "User has been ignored",
- "User_has_been_unignored": "User is no longer ignored",
- "User_has_been_removed_from_s": "User has been removed from {{s}}",
- "User__username__is_now_a_leader_of__room_name_": "User {{username}} is now a leader of {{room_name}}",
- "User__username__is_now_a_moderator_of__room_name_": "User {{username}} is now a moderator of {{room_name}}",
- "User__username__is_now_a_owner_of__room_name_": "User {{username}} is now a owner of {{room_name}}",
- "User__username__removed_from__room_name__leaders": "User {{username}} removed from {{room_name}} leaders",
- "User__username__removed_from__room_name__moderators": "User {{username}} removed from {{room_name}} moderators",
- "User__username__removed_from__room_name__owners": "User {{username}} removed from {{room_name}} owners",
- "The_user_will_be_removed_from_s": "The user will be removed from {{s}}",
- "Yes_remove_user": "Yes, remove user!",
- "Direct_message": "Direct message",
- "Message_Ignored": "Message ignored. Tap to display it.",
- "Enter_workspace_URL": "Enter workspace URL",
- "Workspace_URL_Example": "Ex. your-company.rocket.chat",
- "This_room_encryption_has_been_enabled_by__username_": "This room's encryption has been enabled by {{username}}",
- "This_room_encryption_has_been_disabled_by__username_": "This room's encryption has been disabled by {{username}}",
- "Teams": "Teams",
- "No_team_channels_found": "No channels found",
- "Team_not_found": "Team not found",
- "Create_Team": "Create Team",
- "Team_Name": "Team Name",
- "Private_Team": "Private Team",
- "Read_Only_Team": "Read Only Team",
- "Broadcast_Team": "Broadcast Team",
- "creating_team": "creating team",
- "team-name-already-exists": "A team with that name already exists",
- "Add_Channel_to_Team": "Add Channel to Team",
- "Left_The_Team_Successfully": "Left the team successfully",
- "Create_New": "Create New",
- "Add_Existing": "Add Existing",
- "Add_Existing_Channel": "Add Existing Channel",
- "Remove_from_Team": "Remove from Team",
- "Auto-join": "Auto-join",
- "Remove_Team_Room_Warning": "Woud you like to remove this channel from the team? The channel will be moved back to the workspace",
- "Confirmation": "Confirmation",
- "invalid-room": "Invalid room",
- "You_are_leaving_the_team": "You are leaving the team '{{team}}'",
- "Leave_Team": "Leave Team",
- "Select_Team": "Select Team",
- "Select_Team_Channels": "Select the Team's channels you would like to leave.",
- "Cannot_leave": "Cannot leave",
- "Cannot_remove": "Cannot remove",
- "Cannot_delete": "Cannot delete",
- "Last_owner_team_room": "You are the last owner of this channel. Once you leave the team, the channel will be kept inside the team but you will be managing it from outside.",
- "last-owner-can-not-be-removed": "Last owner cannot be removed",
- "Remove_User_Teams": "Select channels you want the user to be removed from.",
- "Delete_Team": "Delete Team",
- "Select_channels_to_delete": "This can't be undone. Once you delete a team, all chat content and configuration will be deleted. \n\nSelect the channels you would like to delete. The ones you decide to keep will be available on your workspace. Notice that public channels will still be public and visible to everyone.",
- "You_are_deleting_the_team": "You are deleting this team.",
- "Removing_user_from_this_team": "You are removing {{user}} from this team",
- "Remove_User_Team_Channels": "Select the channels you want the user to be removed from.",
- "Remove_Member": "Remove Member",
- "leaving_team": "leaving team",
- "removing_team": "removing from team",
- "moving_channel_to_team": "moving channel to team",
- "deleting_team": "deleting team",
- "member-does-not-exist": "Member does not exist",
- "Convert": "Convert",
- "Convert_to_Team": "Convert to Team",
- "Convert_to_Team_Warning": "You are converting this Channel to a Team. All Members will be kept.",
- "Move_to_Team": "Move to Team",
- "Move_Channel_Paragraph": "Moving a channel inside a team means that this channel will be added in the team’s context, however, all channel’s members, which are not members of the respective team, will still have access to this channel, but will not be added as team’s members. \n\nAll channel’s management will still be made by the owners of this channel.\n\nTeam’s members and even team’s owners, if not a member of this channel, can not have access to the channel’s content. \n\nPlease notice that the Team’s owner will be able remove members from the Channel.",
- "Move_to_Team_Warning": "After reading the previous intructions about this behavior, do you still want to move this channel to the selected team?",
- "Load_More": "Load More",
- "Load_Newer": "Load Newer",
- "Load_Older": "Load Older",
- "room-name-already-exists": "Room name already exists",
- "error-team-creation": "Error team creation",
- "unauthorized": "Unauthorized",
- "Left_The_Room_Successfully": "Left the room successfully",
- "Deleted_The_Team_Successfully": "Team deleted successfully",
- "Deleted_The_Room_Successfully": "Room deleted successfully",
- "Convert_to_Channel": "Convert to Channel",
- "Converting_Team_To_Channel": "Converting Team to Channel",
- "Select_Team_Channels_To_Delete": "Select the Team’s Channels you would like to delete, the ones you do not select will be moved to the Workspace. \n\nNotice that public Channels will be public and visible to everyone.",
- "You_are_converting_the_team": "You are converting this Team to a Channel",
- "Display": "Display",
- "Avatars": "Avatars",
- "Sort_by": "Sort by",
- "Group_by": "Group by",
- "Types": "Types",
- "Expanded": "Expanded",
- "Condensed": "Condensed",
- "creating_discussion": "creating discussion",
- "Canned_Responses": "Canned Responses",
- "No_match_found": "No match found.",
- "Check_canned_responses": "Check on canned responses.",
- "Searching": "Searching",
- "Use": "Use",
- "Shortcut": "Shortcut",
- "Content": "Content",
- "Sharing": "Sharing",
- "No_canned_responses": "No canned responses"
+ "1_person_reacted": "1 person reacted",
+ "1_user": "1 user",
+ "error-action-not-allowed": "{{action}} is not allowed",
+ "error-application-not-found": "Application not found",
+ "error-archived-duplicate-name": "There's an archived channel with name {{room_name}}",
+ "error-avatar-invalid-url": "Invalid avatar URL: {{url}}",
+ "error-avatar-url-handling": "Error while handling avatar setting from a URL ({{url}}) for {{username}}",
+ "error-cant-invite-for-direct-room": "Can't invite user to direct rooms",
+ "error-could-not-change-email": "Could not change email",
+ "error-could-not-change-name": "Could not change name",
+ "error-could-not-change-username": "Could not change username",
+ "error-could-not-change-status": "Could not change status",
+ "error-delete-protected-role": "Cannot delete a protected role",
+ "error-department-not-found": "Department not found",
+ "error-direct-message-file-upload-not-allowed": "File sharing not allowed in direct messages",
+ "error-duplicate-channel-name": "A channel with name {{room_name}} exists",
+ "error-email-domain-blacklisted": "The email domain is blacklisted",
+ "error-email-send-failed": "Error trying to send email: {{message}}",
+ "error-save-image": "Error while saving image",
+ "error-save-video": "Error while saving video",
+ "error-field-unavailable": "{{field}} is already in use :(",
+ "error-file-too-large": "File is too large",
+ "error-importer-not-defined": "The importer was not defined correctly, it is missing the Import class.",
+ "error-input-is-not-a-valid-field": "{{input}} is not a valid {{field}}",
+ "error-invalid-actionlink": "Invalid action link",
+ "error-invalid-arguments": "Invalid arguments",
+ "error-invalid-asset": "Invalid asset",
+ "error-invalid-channel": "Invalid channel.",
+ "error-invalid-channel-start-with-chars": "Invalid channel. Start with @ or #",
+ "error-invalid-custom-field": "Invalid custom field",
+ "error-invalid-custom-field-name": "Invalid custom field name. Use only letters, numbers, hyphens and underscores.",
+ "error-invalid-date": "Invalid date provided.",
+ "error-invalid-description": "Invalid description",
+ "error-invalid-domain": "Invalid domain",
+ "error-invalid-email": "Invalid email {{email}}",
+ "error-invalid-email-address": "Invalid email address",
+ "error-invalid-file-height": "Invalid file height",
+ "error-invalid-file-type": "Invalid file type",
+ "error-invalid-file-width": "Invalid file width",
+ "error-invalid-from-address": "You informed an invalid FROM address.",
+ "error-invalid-integration": "Invalid integration",
+ "error-invalid-message": "Invalid message",
+ "error-invalid-method": "Invalid method",
+ "error-invalid-name": "Invalid name",
+ "error-invalid-password": "Invalid password",
+ "error-invalid-redirectUri": "Invalid redirectUri",
+ "error-invalid-role": "Invalid role",
+ "error-invalid-room": "Invalid room",
+ "error-invalid-room-name": "{{room_name}} is not a valid room name",
+ "error-invalid-room-type": "{{type}} is not a valid room type.",
+ "error-invalid-settings": "Invalid settings provided",
+ "error-invalid-subscription": "Invalid subscription",
+ "error-invalid-token": "Invalid token",
+ "error-invalid-triggerWords": "Invalid triggerWords",
+ "error-invalid-urls": "Invalid URLs",
+ "error-invalid-user": "Invalid user",
+ "error-invalid-username": "Invalid username",
+ "error-invalid-webhook-response": "The webhook URL responded with a status other than 200",
+ "error-message-deleting-blocked": "Message deleting is blocked",
+ "error-message-editing-blocked": "Message editing is blocked",
+ "error-message-size-exceeded": "Message size exceeds Message_MaxAllowedSize",
+ "error-missing-unsubscribe-link": "You must provide the [unsubscribe] link.",
+ "error-no-owner-channel": "You don't own the channel",
+ "error-no-tokens-for-this-user": "There are no tokens for this user",
+ "error-not-allowed": "Not allowed",
+ "error-not-authorized": "Not authorized",
+ "error-push-disabled": "Push is disabled",
+ "error-remove-last-owner": "This is the last owner. Please set a new owner before removing this one.",
+ "error-role-in-use": "Cannot delete role because it's in use",
+ "error-role-name-required": "Role name is required",
+ "error-the-field-is-required": "The field {{field}} is required.",
+ "error-too-many-requests": "Error, too many requests. Please slow down. You must wait {{seconds}} seconds before trying again.",
+ "error-user-is-not-activated": "User is not activated",
+ "error-user-has-no-roles": "User has no roles",
+ "error-user-limit-exceeded": "The number of users you are trying to invite to #channel_name exceeds the limit set by the administrator",
+ "error-user-not-in-room": "User is not in this room",
+ "error-user-registration-custom-field": "error-user-registration-custom-field",
+ "error-user-registration-disabled": "User registration is disabled",
+ "error-user-registration-secret": "User registration is only allowed via Secret URL",
+ "error-you-are-last-owner": "You are the last owner. Please set new owner before leaving the room.",
+ "error-status-not-allowed": "Invisible status is disabled",
+ "Actions": "Actions",
+ "Activity": "Activity",
+ "Add_Reaction": "Add Reaction",
+ "Add_Server": "Add Server",
+ "Add_users": "Add users",
+ "Admin_Panel": "Admin Panel",
+ "Agent": "Agent",
+ "Alert": "Alert",
+ "alert": "alert",
+ "alerts": "alerts",
+ "All_users_in_the_channel_can_write_new_messages": "All users in the channel can write new messages",
+ "All_users_in_the_team_can_write_new_messages": "All users in the team can write new messages",
+ "A_meaningful_name_for_the_discussion_room": "A meaningful name for the discussion room",
+ "All": "All",
+ "All_Messages": "All Messages",
+ "Allow_Reactions": "Allow Reactions",
+ "Alphabetical": "Alphabetical",
+ "and_more": "and more",
+ "and": "and",
+ "announcement": "announcement",
+ "Announcement": "Announcement",
+ "Apply_Your_Certificate": "Apply Your Certificate",
+ "ARCHIVE": "ARCHIVE",
+ "archive": "archive",
+ "are_typing": "are typing",
+ "Are_you_sure_question_mark": "Are you sure?",
+ "Are_you_sure_you_want_to_leave_the_room": "Are you sure you want to leave the room {{room}}?",
+ "Audio": "Audio",
+ "Authenticating": "Authenticating",
+ "Automatic": "Automatic",
+ "Auto_Translate": "Auto-Translate",
+ "Avatar_changed_successfully": "Avatar changed successfully!",
+ "Avatar_Url": "Avatar URL",
+ "Away": "Away",
+ "Back": "Back",
+ "Black": "Black",
+ "Block_user": "Block user",
+ "Browser": "Browser",
+ "Broadcast_channel_Description": "Only authorized users can write new messages, but the other users will be able to reply",
+ "Broadcast_Channel": "Broadcast Channel",
+ "Busy": "Busy",
+ "By_proceeding_you_are_agreeing": "By proceeding you are agreeing to our",
+ "Cancel_editing": "Cancel editing",
+ "Cancel_recording": "Cancel recording",
+ "Cancel": "Cancel",
+ "changing_avatar": "changing avatar",
+ "creating_channel": "creating channel",
+ "creating_invite": "creating invite",
+ "Channel_Name": "Channel Name",
+ "Channels": "Channels",
+ "Chats": "Chats",
+ "Call_already_ended": "Call already ended!",
+ "Clear_cookies_alert": "Do you want to clear all cookies?",
+ "Clear_cookies_desc": "This action will clear all login cookies, allowing you to login into other accounts.",
+ "Clear_cookies_yes": "Yes, clear cookies",
+ "Clear_cookies_no": "No, keep cookies",
+ "Click_to_join": "Click to Join!",
+ "Close": "Close",
+ "Close_emoji_selector": "Close emoji selector",
+ "Closing_chat": "Closing chat",
+ "Change_language_loading": "Changing language.",
+ "Chat_closed_by_agent": "Chat closed by agent",
+ "Choose": "Choose",
+ "Choose_from_library": "Choose from library",
+ "Choose_file": "Choose file",
+ "Choose_where_you_want_links_be_opened": "Choose where you want links be opened",
+ "Code": "Code",
+ "Code_or_password_invalid": "Code or password invalid",
+ "Collaborative": "Collaborative",
+ "Confirm": "Confirm",
+ "Connect": "Connect",
+ "Connected": "Connected",
+ "connecting_server": "connecting to server",
+ "Connecting": "Connecting...",
+ "Contact_us": "Contact us",
+ "Contact_your_server_admin": "Contact your server admin.",
+ "Continue_with": "Continue with",
+ "Copied_to_clipboard": "Copied to clipboard!",
+ "Copy": "Copy",
+ "Conversation": "Conversation",
+ "Permalink": "Permalink",
+ "Certificate_password": "Certificate Password",
+ "Clear_cache": "Clear local server cache",
+ "Clear_cache_loading": "Clearing cache.",
+ "Whats_the_password_for_your_certificate": "What's the password for your certificate?",
+ "Create_account": "Create an account",
+ "Create_Channel": "Create Channel",
+ "Create_Direct_Messages": "Create Direct Messages",
+ "Create_Discussion": "Create Discussion",
+ "Created_snippet": "created a snippet",
+ "Create_a_new_workspace": "Create a new workspace",
+ "Create": "Create",
+ "Custom_Status": "Custom Status",
+ "Dark": "Dark",
+ "Dark_level": "Dark Level",
+ "Default": "Default",
+ "Default_browser": "Default browser",
+ "Delete_Room_Warning": "Deleting a room will delete all messages posted within the room. This cannot be undone.",
+ "Department": "Department",
+ "delete": "delete",
+ "Delete": "Delete",
+ "DELETE": "DELETE",
+ "move": "move",
+ "deleting_room": "deleting room",
+ "description": "description",
+ "Description": "Description",
+ "Desktop_Options": "Desktop Options",
+ "Desktop_Notifications": "Desktop Notifications",
+ "Desktop_Alert_info": "These notifications are delivered in desktop",
+ "Directory": "Directory",
+ "Direct_Messages": "Direct Messages",
+ "Disable_notifications": "Disable notifications",
+ "Discussions": "Discussions",
+ "Discussion_Desc": "Help keeping an overview about what's going on! By creating a discussion, a sub-channel of the one you selected is created and both are linked.",
+ "Discussion_name": "Discussion name",
+ "Done": "Done",
+ "Dont_Have_An_Account": "Don't you have an account?",
+ "Do_you_have_an_account": "Do you have an account?",
+ "Do_you_have_a_certificate": "Do you have a certificate?",
+ "Do_you_really_want_to_key_this_room_question_mark": "Do you really want to {{key}} this room?",
+ "E2E_Encryption": "E2E Encryption",
+ "E2E_How_It_Works_info1": "You can now create encrypted private groups and direct messages. You may also change existing private groups or DMs to encrypted.",
+ "E2E_How_It_Works_info2": "This is *end to end encryption* so the key to encode/decode your messages and they will not be saved on the server. For that reason *you need to store this password somewhere safe* which you can access later if you may need.",
+ "E2E_How_It_Works_info3": "If you proceed, it will be auto generated an E2E password.",
+ "E2E_How_It_Works_info4": "You can also setup a new password for your encryption key any time from any browser you have entered the existing E2E password.",
+ "edit": "edit",
+ "edited": "edited",
+ "Edit": "Edit",
+ "Edit_Status": "Edit Status",
+ "Edit_Invite": "Edit Invite",
+ "End_to_end_encrypted_room": "End to end encrypted room",
+ "end_to_end_encryption": "end to end encryption",
+ "Email_Notification_Mode_All": "Every Mention/DM",
+ "Email_Notification_Mode_Disabled": "Disabled",
+ "Email_or_password_field_is_empty": "Email or password field is empty",
+ "Email": "E-mail",
+ "email": "e-mail",
+ "Empty_title": "Empty title",
+ "Enable_Auto_Translate": "Enable Auto-Translate",
+ "Enable_notifications": "Enable notifications",
+ "Encrypted": "Encrypted",
+ "Encrypted_message": "Encrypted message",
+ "Enter_Your_E2E_Password": "Enter Your E2E Password",
+ "Enter_Your_Encryption_Password_desc1": "This will allow you to access your encrypted private groups and direct messages.",
+ "Enter_Your_Encryption_Password_desc2": "You need to enter the password to encode/decode messages every place you use the chat.",
+ "Encryption_error_title": "Your encryption password seems wrong",
+ "Encryption_error_desc": "It wasn't possible to decode your encryption key to be imported.",
+ "Everyone_can_access_this_channel": "Everyone can access this channel",
+ "Everyone_can_access_this_team": "Everyone can access this team",
+ "Error_uploading": "Error uploading",
+ "Expiration_Days": "Expiration (Days)",
+ "Favorites": "Favorites",
+ "Files": "Files",
+ "File_description": "File description",
+ "File_name": "File name",
+ "Finish_recording": "Finish recording",
+ "Following_thread": "Following thread",
+ "For_your_security_you_must_enter_your_current_password_to_continue": "For your security, you must enter your current password to continue",
+ "Forgot_password_If_this_email_is_registered": "If this email is registered, we'll send instructions on how to reset your password. If you do not receive an email shortly, please come back and try again.",
+ "Forgot_password": "Forgot your password?",
+ "Forgot_Password": "Forgot Password",
+ "Forward": "Forward",
+ "Forward_Chat": "Forward Chat",
+ "Forward_to_department": "Forward to department",
+ "Forward_to_user": "Forward to user",
+ "Full_table": "Click to see full table",
+ "Generate_New_Link": "Generate New Link",
+ "Has_joined_the_channel": "has joined the channel",
+ "Has_joined_the_conversation": "has joined the conversation",
+ "Has_left_the_channel": "has left the channel",
+ "Hide_System_Messages": "Hide System Messages",
+ "Hide_type_messages": "Hide \"{{type}}\" messages",
+ "How_It_Works": "How It Works",
+ "Message_HideType_uj": "User Join",
+ "Message_HideType_ul": "User Leave",
+ "Message_HideType_ru": "User Removed",
+ "Message_HideType_au": "User Added",
+ "Message_HideType_mute_unmute": "User Muted / Unmuted",
+ "Message_HideType_r": "Room Name Changed",
+ "Message_HideType_ut": "User Joined Conversation",
+ "Message_HideType_wm": "Welcome",
+ "Message_HideType_rm": "Message Removed",
+ "Message_HideType_subscription_role_added": "Was Set Role",
+ "Message_HideType_subscription_role_removed": "Role No Longer Defined",
+ "Message_HideType_room_archived": "Room Archived",
+ "Message_HideType_room_unarchived": "Room Unarchived",
+ "I_Saved_My_E2E_Password": "I Saved My E2E Password",
+ "IP": "IP",
+ "In_app": "In-app",
+ "In_App_And_Desktop": "In-app and Desktop",
+ "In_App_and_Desktop_Alert_info": "Displays a banner at the top of the screen when app is open, and displays a notification on desktop",
+ "Invisible": "Invisible",
+ "Invite": "Invite",
+ "is_a_valid_RocketChat_instance": "is a valid Rocket.Chat instance",
+ "is_not_a_valid_RocketChat_instance": "is not a valid Rocket.Chat instance",
+ "is_typing": "is typing",
+ "Invalid_or_expired_invite_token": "Invalid or expired invite token",
+ "Invalid_server_version": "The server you're trying to connect is using a version that's not supported by the app anymore: {{currentVersion}}.\n\nWe require version {{minVersion}}",
+ "Invite_Link": "Invite Link",
+ "Invite_users": "Invite users",
+ "Join": "Join",
+ "Join_Code": "Join Code",
+ "Insert_Join_Code": "Insert Join Code",
+ "Join_our_open_workspace": "Join our open workspace",
+ "Join_your_workspace": "Join your workspace",
+ "Just_invited_people_can_access_this_channel": "Just invited people can access this channel",
+ "Just_invited_people_can_access_this_team": "Just invited people can access this team",
+ "Language": "Language",
+ "last_message": "last message",
+ "Leave_channel": "Leave channel",
+ "leaving_room": "leaving room",
+ "Leave": "Leave",
+ "leave": "leave",
+ "Legal": "Legal",
+ "Light": "Light",
+ "License": "License",
+ "Livechat": "Livechat",
+ "Livechat_edit": "Livechat edit",
+ "Login": "Login",
+ "Login_error": "Your credentials were rejected! Please try again.",
+ "Login_with": "Login with",
+ "Logging_out": "Logging out.",
+ "Logout": "Logout",
+ "Max_number_of_uses": "Max number of uses",
+ "Max_number_of_users_allowed_is_number": "Max number of users allowed is {{maxUsers}}",
+ "members": "members",
+ "Members": "Members",
+ "Mentioned_Messages": "Mentioned Messages",
+ "mentioned": "mentioned",
+ "Mentions": "Mentions",
+ "Message_accessibility": "Message from {{user}} at {{time}}: {{message}}",
+ "Message_actions": "Message actions",
+ "Message_pinned": "Message pinned",
+ "Message_removed": "Message removed",
+ "Message_starred": "Message starred",
+ "Message_unstarred": "Message unstarred",
+ "message": "message",
+ "messages": "messages",
+ "Message": "Message",
+ "Messages": "Messages",
+ "Message_Reported": "Message reported",
+ "Microphone_Permission_Message": "Rocket.Chat needs access to your microphone so you can send audio message.",
+ "Microphone_Permission": "Microphone Permission",
+ "Mute": "Mute",
+ "muted": "muted",
+ "My_servers": "My servers",
+ "N_people_reacted": "{{n}} people reacted",
+ "N_users": "{{n}} users",
+ "N_channels": "{{n}} channels",
+ "Name": "Name",
+ "Navigation_history": "Navigation history",
+ "Never": "Never",
+ "New_Message": "New Message",
+ "New_Password": "New Password",
+ "New_Server": "New Server",
+ "Next": "Next",
+ "No_files": "No files",
+ "No_limit": "No limit",
+ "No_mentioned_messages": "No mentioned messages",
+ "No_pinned_messages": "No pinned messages",
+ "No_results_found": "No results found",
+ "No_starred_messages": "No starred messages",
+ "No_thread_messages": "No thread messages",
+ "No_label_provided": "No {{label}} provided.",
+ "No_Message": "No Message",
+ "No_messages_yet": "No messages yet",
+ "No_Reactions": "No Reactions",
+ "No_Read_Receipts": "No Read Receipts",
+ "Not_logged": "Not logged",
+ "Not_RC_Server": "This is not a Rocket.Chat server.\n{{contact}}",
+ "Nothing": "Nothing",
+ "Nothing_to_save": "Nothing to save!",
+ "Notify_active_in_this_room": "Notify active users in this room",
+ "Notify_all_in_this_room": "Notify all in this room",
+ "Notifications": "Notifications",
+ "Notification_Duration": "Notification Duration",
+ "Notification_Preferences": "Notification Preferences",
+ "No_available_agents_to_transfer": "No available agents to transfer",
+ "Offline": "Offline",
+ "Oops": "Oops!",
+ "Omnichannel": "Omnichannel",
+ "Open_Livechats": "Chats in Progress",
+ "Omnichannel_enable_alert": "You're not available on Omnichannel. Would you like to be available?",
+ "Onboarding_description": "A workspace is your team or organization’s space to collaborate. Ask the workspace admin for address to join or create one for your team.",
+ "Onboarding_join_workspace": "Join a workspace",
+ "Onboarding_subtitle": "Beyond Team Collaboration",
+ "Onboarding_title": "Welcome to Rocket.Chat",
+ "Onboarding_join_open_description": "Join our open workspace to chat with the Rocket.Chat team and community.",
+ "Onboarding_agree_terms": "By continuing, you agree to Rocket.Chat",
+ "Onboarding_less_options": "Less options",
+ "Onboarding_more_options": "More options",
+ "Online": "Online",
+ "Only_authorized_users_can_write_new_messages": "Only authorized users can write new messages",
+ "Open_emoji_selector": "Open emoji selector",
+ "Open_Source_Communication": "Open Source Communication",
+ "Open_your_authentication_app_and_enter_the_code": "Open your authentication app and enter the code.",
+ "OR": "OR",
+ "OS": "OS",
+ "Overwrites_the_server_configuration_and_use_room_config": "Overwrites the server configuration and use room config",
+ "Password": "Password",
+ "Parent_channel_or_group": "Parent channel or group",
+ "Permalink_copied_to_clipboard": "Permalink copied to clipboard!",
+ "Phone": "Phone",
+ "Pin": "Pin",
+ "Pinned_Messages": "Pinned Messages",
+ "pinned": "pinned",
+ "Pinned": "Pinned",
+ "Please_add_a_comment": "Please add a comment",
+ "Please_enter_your_password": "Please enter your password",
+ "Please_wait": "Please wait.",
+ "Preferences": "Preferences",
+ "Preferences_saved": "Preferences saved!",
+ "Privacy_Policy": " Privacy Policy",
+ "Private_Channel": "Private Channel",
+ "Private": "Private",
+ "Processing": "Processing...",
+ "Profile_saved_successfully": "Profile saved successfully!",
+ "Profile": "Profile",
+ "Public_Channel": "Public Channel",
+ "Public": "Public",
+ "Push_Notifications": "Push Notifications",
+ "Push_Notifications_Alert_Info": "These notifications are delivered to you when the app is not open",
+ "Quote": "Quote",
+ "Reactions_are_disabled": "Reactions are disabled",
+ "Reactions_are_enabled": "Reactions are enabled",
+ "Reactions": "Reactions",
+ "Read_External_Permission_Message": "Rocket.Chat needs to access photos, media, and files on your device",
+ "Read_External_Permission": "Read Media Permission",
+ "Read_Only_Channel": "Read Only Channel",
+ "Read_Only": "Read Only",
+ "Read_Receipt": "Read Receipt",
+ "Receive_Group_Mentions": "Receive Group Mentions",
+ "Receive_Group_Mentions_Info": "Receive @all and @here mentions",
+ "Register": "Register",
+ "Repeat_Password": "Repeat Password",
+ "Replied_on": "Replied on:",
+ "replies": "replies",
+ "reply": "reply",
+ "Reply": "Reply",
+ "Report": "Report",
+ "Receive_Notification": "Receive Notification",
+ "Receive_notifications_from": "Receive notifications from {{name}}",
+ "Resend": "Resend",
+ "Reset_password": "Reset password",
+ "resetting_password": "resetting password",
+ "RESET": "RESET",
+ "Return": "Return",
+ "Review_app_title": "Are you enjoying this app?",
+ "Review_app_desc": "Give us 5 stars on {{store}}",
+ "Review_app_yes": "Sure!",
+ "Review_app_no": "No",
+ "Review_app_later": "Maybe later",
+ "Review_app_unable_store": "Unable to open {{store}}",
+ "Review_this_app": "Review this app",
+ "Remove": "Remove",
+ "remove": "remove",
+ "Roles": "Roles",
+ "Room_actions": "Room actions",
+ "Room_changed_announcement": "Room announcement changed to: {{announcement}} by {{userBy}}",
+ "Room_changed_avatar": "Room avatar changed by {{userBy}}",
+ "Room_changed_description": "Room description changed to: {{description}} by {{userBy}}",
+ "Room_changed_privacy": "Room type changed to: {{type}} by {{userBy}}",
+ "Room_changed_topic": "Room topic changed to: {{topic}} by {{userBy}}",
+ "Room_Files": "Room Files",
+ "Room_Info_Edit": "Room Info Edit",
+ "Room_Info": "Room Info",
+ "Room_Members": "Room Members",
+ "Room_name_changed": "Room name changed to: {{name}} by {{userBy}}",
+ "SAVE": "SAVE",
+ "Save_Changes": "Save Changes",
+ "Save": "Save",
+ "Saved": "Saved",
+ "saving_preferences": "saving preferences",
+ "saving_profile": "saving profile",
+ "saving_settings": "saving settings",
+ "saved_to_gallery": "Saved to gallery",
+ "Save_Your_E2E_Password": "Save Your E2E Password",
+ "Save_Your_Encryption_Password": "Save Your Encryption Password",
+ "Save_Your_Encryption_Password_warning": "This password is not stored anywhere so save it carefully somewhere else.",
+ "Save_Your_Encryption_Password_info": "Notice that you lose your password, there is no way to recover it and you will lose access to your messages.",
+ "Search_Messages": "Search Messages",
+ "Search": "Search",
+ "Search_by": "Search by",
+ "Search_global_users": "Search for global users",
+ "Search_global_users_description": "If you turn-on, you can search for any user from others companies or servers.",
+ "Seconds": "{{second}} seconds",
+ "Security_and_privacy": "Security and privacy",
+ "Select_Avatar": "Select Avatar",
+ "Select_Server": "Select Server",
+ "Select_Users": "Select Users",
+ "Select_a_Channel": "Select a Channel",
+ "Select_a_Department": "Select a Department",
+ "Select_an_option": "Select an option",
+ "Select_a_User": "Select a User",
+ "Send": "Send",
+ "Send_audio_message": "Send audio message",
+ "Send_crash_report": "Send crash report",
+ "Send_message": "Send message",
+ "Send_me_the_code_again": "Send me the code again",
+ "Send_to": "Send to...",
+ "Sending_to": "Sending to",
+ "Sent_an_attachment": "Sent an attachment",
+ "Server": "Server",
+ "Servers": "Servers",
+ "Server_version": "Server version: {{version}}",
+ "Set_username_subtitle": "The username is used to allow others to mention you in messages",
+ "Set_custom_status": "Set custom status",
+ "Set_status": "Set status",
+ "Status_saved_successfully": "Status saved successfully!",
+ "Settings": "Settings",
+ "Settings_succesfully_changed": "Settings succesfully changed!",
+ "Share": "Share",
+ "Share_Link": "Share Link",
+ "Share_this_app": "Share this app",
+ "Show_more": "Show more..",
+ "Show_Unread_Counter": "Show Unread Counter",
+ "Show_Unread_Counter_Info": "Unread counter is displayed as a badge on the right of the channel, in the list",
+ "Sign_in_your_server": "Sign in your server",
+ "Sign_Up": "Sign Up",
+ "Some_field_is_invalid_or_empty": "Some field is invalid or empty",
+ "Sound": "Sound",
+ "Star_room": "Star room",
+ "Star": "Star",
+ "Starred_Messages": "Starred Messages",
+ "starred": "starred",
+ "Starred": "Starred",
+ "Start_of_conversation": "Start of conversation",
+ "Start_a_Discussion": "Start a Discussion",
+ "Started_discussion": "Started a discussion:",
+ "Started_call": "Call started by {{userBy}}",
+ "Submit": "Submit",
+ "Table": "Table",
+ "Tags": "Tags",
+ "Take_a_photo": "Take a photo",
+ "Take_a_video": "Take a video",
+ "Take_it": "Take it!",
+ "tap_to_change_status": "tap to change status",
+ "Tap_to_view_servers_list": "Tap to view servers list",
+ "Terms_of_Service": " Terms of Service ",
+ "Theme": "Theme",
+ "The_user_wont_be_able_to_type_in_roomName": "The user won't be able to type in {{roomName}}",
+ "The_user_will_be_able_to_type_in_roomName": "The user will be able to type in {{roomName}}",
+ "There_was_an_error_while_action": "There was an error while {{action}}!",
+ "This_room_is_blocked": "This room is blocked",
+ "This_room_is_read_only": "This room is read only",
+ "Thread": "Thread",
+ "Threads": "Threads",
+ "Timezone": "Timezone",
+ "To": "To",
+ "topic": "topic",
+ "Topic": "Topic",
+ "Translate": "Translate",
+ "Try_again": "Try again",
+ "Two_Factor_Authentication": "Two-factor Authentication",
+ "Type_the_channel_name_here": "Type the channel name here",
+ "unarchive": "unarchive",
+ "UNARCHIVE": "UNARCHIVE",
+ "Unblock_user": "Unblock user",
+ "Unfollowed_thread": "Unfollowed thread",
+ "Unmute": "Unmute",
+ "unmuted": "unmuted",
+ "Unpin": "Unpin",
+ "unread_messages": "unread",
+ "Unread": "Unread",
+ "Unread_on_top": "Unread on top",
+ "Unstar": "Unstar",
+ "Updating": "Updating...",
+ "Uploading": "Uploading",
+ "Upload_file_question_mark": "Upload file?",
+ "User": "User",
+ "Users": "Users",
+ "User_added_by": "User {{userAdded}} added by {{userBy}}",
+ "User_Info": "User Info",
+ "User_has_been_key": "User has been {{key}}",
+ "User_is_no_longer_role_by_": "{{user}} is no longer {{role}} by {{userBy}}",
+ "User_muted_by": "User {{userMuted}} muted by {{userBy}}",
+ "User_removed_by": "User {{userRemoved}} removed by {{userBy}}",
+ "User_sent_an_attachment": "{{user}} sent an attachment",
+ "User_unmuted_by": "User {{userUnmuted}} unmuted by {{userBy}}",
+ "User_was_set_role_by_": "{{user}} was set {{role}} by {{userBy}}",
+ "Username_is_empty": "Username is empty",
+ "Username": "Username",
+ "Username_or_email": "Username or email",
+ "Uses_server_configuration": "Uses server configuration",
+ "Validating": "Validating",
+ "Registration_Succeeded": "Registration Succeeded!",
+ "Verify": "Verify",
+ "Verify_email_title": "Registration Succeeded!",
+ "Verify_email_desc": "We have sent you an email to confirm your registration. If you do not receive an email shortly, please come back and try again.",
+ "Verify_your_email_for_the_code_we_sent": "Verify your email for the code we sent",
+ "Video_call": "Video call",
+ "View_Original": "View Original",
+ "Voice_call": "Voice call",
+ "Waiting_for_network": "Waiting for network...",
+ "Websocket_disabled": "Websocket is disabled for this server.\n{{contact}}",
+ "Welcome": "Welcome",
+ "What_are_you_doing_right_now": "What are you doing right now?",
+ "Whats_your_2fa": "What's your 2FA code?",
+ "Without_Servers": "Without Servers",
+ "Workspaces": "Workspaces",
+ "Would_you_like_to_return_the_inquiry": "Would you like to return the inquiry?",
+ "Write_External_Permission_Message": "Rocket.Chat needs access to your gallery so you can save images.",
+ "Write_External_Permission": "Gallery Permission",
+ "Yes": "Yes",
+ "Yes_action_it": "Yes, {{action}} it!",
+ "Yesterday": "Yesterday",
+ "You_are_in_preview_mode": "You are in preview mode",
+ "You_are_offline": "You are offline",
+ "You_can_search_using_RegExp_eg": "You can use RegExp. e.g. `/^text$/i`",
+ "You_colon": "You: ",
+ "you_were_mentioned": "you were mentioned",
+ "You_were_removed_from_channel": "You were removed from {{channel}}",
+ "you": "you",
+ "You": "You",
+ "Logged_out_by_server": "You've been logged out by the server. Please log in again.",
+ "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "You need to access at least one Rocket.Chat server to share something.",
+ "You_need_to_verifiy_your_email_address_to_get_notications": "You need to verify your email address to get notifications",
+ "Your_certificate": "Your Certificate",
+ "Your_invite_link_will_expire_after__usesLeft__uses": "Your invite link will expire after {{usesLeft}} uses.",
+ "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "Your invite link will expire on {{date}} or after {{usesLeft}} uses.",
+ "Your_invite_link_will_expire_on__date__": "Your invite link will expire on {{date}}.",
+ "Your_invite_link_will_never_expire": "Your invite link will never expire.",
+ "Your_workspace": "Your workspace",
+ "Your_password_is": "Your password is",
+ "Version_no": "Version: {{version}}",
+ "You_will_not_be_able_to_recover_this_message": "You will not be able to recover this message!",
+ "You_will_unset_a_certificate_for_this_server": "You will unset a certificate for this server",
+ "Change_Language": "Change Language",
+ "Crash_report_disclaimer": "We never track the content of your chats. The crash report and analytics events only contains relevant information for us in order to identify and fix issues.",
+ "Type_message": "Type message",
+ "Room_search": "Rooms search",
+ "Room_selection": "Room selection 1...9",
+ "Next_room": "Next room",
+ "Previous_room": "Previous room",
+ "New_room": "New room",
+ "Upload_room": "Upload to room",
+ "Search_messages": "Search messages",
+ "Scroll_messages": "Scroll messages",
+ "Reply_latest": "Reply to latest",
+ "Reply_in_Thread": "Reply in Thread",
+ "Server_selection": "Server selection",
+ "Server_selection_numbers": "Server selection 1...9",
+ "Add_server": "Add server",
+ "New_line": "New line",
+ "You_will_be_logged_out_of_this_application": "You will be logged out of this application.",
+ "Clear": "Clear",
+ "This_will_clear_all_your_offline_data": "This will clear all your offline data.",
+ "This_will_remove_all_data_from_this_server": "This will remove all data from this server.",
+ "Mark_unread": "Mark Unread",
+ "Wait_activation_warning": "Before you can login, your account must be manually activated by an administrator.",
+ "Screen_lock": "Screen lock",
+ "Local_authentication_biometry_title": "Authenticate",
+ "Local_authentication_biometry_fallback": "Use passcode",
+ "Local_authentication_unlock_option": "Unlock with Passcode",
+ "Local_authentication_change_passcode": "Change Passcode",
+ "Local_authentication_info": "Note: if you forget the Passcode, you'll need to delete and reinstall the app.",
+ "Local_authentication_facial_recognition": "facial recognition",
+ "Local_authentication_fingerprint": "fingerprint",
+ "Local_authentication_unlock_with_label": "Unlock with {{label}}",
+ "Local_authentication_auto_lock_60": "After 1 minute",
+ "Local_authentication_auto_lock_300": "After 5 minutes",
+ "Local_authentication_auto_lock_900": "After 15 minutes",
+ "Local_authentication_auto_lock_1800": "After 30 minutes",
+ "Local_authentication_auto_lock_3600": "After 1 hour",
+ "Passcode_enter_title": "Enter your passcode",
+ "Passcode_choose_title": "Choose your new passcode",
+ "Passcode_choose_confirm_title": "Confirm your new passcode",
+ "Passcode_choose_error": "Passcodes don't match. Try again.",
+ "Passcode_choose_force_set": "Passcode required by admin",
+ "Passcode_app_locked_title": "App locked",
+ "Passcode_app_locked_subtitle": "Try again in {{timeLeft}} seconds",
+ "After_seconds_set_by_admin": "After {{seconds}} seconds (set by admin)",
+ "Dont_activate": "Don't activate now",
+ "Queued_chats": "Queued chats",
+ "Queue_is_empty": "Queue is empty",
+ "Logout_from_other_logged_in_locations": "Logout from other logged in locations",
+ "You_will_be_logged_out_from_other_locations": "You'll be logged out from other locations.",
+ "Logged_out_of_other_clients_successfully": "Logged out of other clients successfully",
+ "Logout_failed": "Logout failed!",
+ "Log_analytics_events": "Log analytics events",
+ "E2E_encryption_change_password_title": "Change Encryption Password",
+ "E2E_encryption_change_password_description": "You can now create encrypted private groups and direct messages. You may also change existing private groups or DMs to encrypted. \nThis is end to end encryption so the key to encode/decode your messages will not be saved on the server. For that reason you need to store your password somewhere safe. You will be required to enter it on other devices you wish to use e2e encryption on.",
+ "E2E_encryption_change_password_error": "Error while changing E2E key password!",
+ "E2E_encryption_change_password_success": "E2E key password changed successfully!",
+ "E2E_encryption_change_password_message": "Make sure you've saved it carefully somewhere else.",
+ "E2E_encryption_change_password_confirmation": "Yes, change it",
+ "E2E_encryption_reset_title": "Reset E2E Key",
+ "E2E_encryption_reset_description": "This option will remove your current E2E key and log you out. \nWhen you login again, Rocket.Chat will generate you a new key and restore your access to any encrypted room that has one or more members online. \nDue to the nature of the E2E encryption, Rocket.Chat will not be able to restore access to any encrypted room that has no member online.",
+ "E2E_encryption_reset_button": "Reset E2E Key",
+ "E2E_encryption_reset_error": "Error while resetting E2E key!",
+ "E2E_encryption_reset_message": "You're going to be logged out.",
+ "E2E_encryption_reset_confirmation": "Yes, reset it",
+ "Following": "Following",
+ "Threads_displaying_all": "Displaying All",
+ "Threads_displaying_following": "Displaying Following",
+ "Threads_displaying_unread": "Displaying Unread",
+ "No_threads": "There are no threads",
+ "No_threads_following": "You are not following any threads",
+ "No_threads_unread": "There are no unread threads",
+ "Messagebox_Send_to_channel": "Send to channel",
+ "Leader": "Leader",
+ "Moderator": "Moderator",
+ "Owner": "Owner",
+ "Remove_from_room": "Remove from room",
+ "Ignore": "Ignore",
+ "Unignore": "Unignore",
+ "User_has_been_ignored": "User has been ignored",
+ "User_has_been_unignored": "User is no longer ignored",
+ "User_has_been_removed_from_s": "User has been removed from {{s}}",
+ "User__username__is_now_a_leader_of__room_name_": "User {{username}} is now a leader of {{room_name}}",
+ "User__username__is_now_a_moderator_of__room_name_": "User {{username}} is now a moderator of {{room_name}}",
+ "User__username__is_now_a_owner_of__room_name_": "User {{username}} is now a owner of {{room_name}}",
+ "User__username__removed_from__room_name__leaders": "User {{username}} removed from {{room_name}} leaders",
+ "User__username__removed_from__room_name__moderators": "User {{username}} removed from {{room_name}} moderators",
+ "User__username__removed_from__room_name__owners": "User {{username}} removed from {{room_name}} owners",
+ "The_user_will_be_removed_from_s": "The user will be removed from {{s}}",
+ "Yes_remove_user": "Yes, remove user!",
+ "Direct_message": "Direct message",
+ "Message_Ignored": "Message ignored. Tap to display it.",
+ "Enter_workspace_URL": "Enter workspace URL",
+ "Workspace_URL_Example": "Ex. your-company.rocket.chat",
+ "This_room_encryption_has_been_enabled_by__username_": "This room's encryption has been enabled by {{username}}",
+ "This_room_encryption_has_been_disabled_by__username_": "This room's encryption has been disabled by {{username}}",
+ "Teams": "Teams",
+ "No_team_channels_found": "No channels found",
+ "Team_not_found": "Team not found",
+ "Create_Team": "Create Team",
+ "Team_Name": "Team Name",
+ "Private_Team": "Private Team",
+ "Read_Only_Team": "Read Only Team",
+ "Broadcast_Team": "Broadcast Team",
+ "creating_team": "creating team",
+ "team-name-already-exists": "A team with that name already exists",
+ "Add_Channel_to_Team": "Add Channel to Team",
+ "Left_The_Team_Successfully": "Left the team successfully",
+ "Create_New": "Create New",
+ "Add_Existing": "Add Existing",
+ "Add_Existing_Channel": "Add Existing Channel",
+ "Remove_from_Team": "Remove from Team",
+ "Auto-join": "Auto-join",
+ "Remove_Team_Room_Warning": "Woud you like to remove this channel from the team? The channel will be moved back to the workspace",
+ "Confirmation": "Confirmation",
+ "invalid-room": "Invalid room",
+ "You_are_leaving_the_team": "You are leaving the team '{{team}}'",
+ "Leave_Team": "Leave Team",
+ "Select_Team": "Select Team",
+ "Select_Team_Channels": "Select the Team's channels you would like to leave.",
+ "Cannot_leave": "Cannot leave",
+ "Cannot_remove": "Cannot remove",
+ "Cannot_delete": "Cannot delete",
+ "Last_owner_team_room": "You are the last owner of this channel. Once you leave the team, the channel will be kept inside the team but you will be managing it from outside.",
+ "last-owner-can-not-be-removed": "Last owner cannot be removed",
+ "Remove_User_Teams": "Select channels you want the user to be removed from.",
+ "Delete_Team": "Delete Team",
+ "Select_channels_to_delete": "This can't be undone. Once you delete a team, all chat content and configuration will be deleted. \n\nSelect the channels you would like to delete. The ones you decide to keep will be available on your workspace. Notice that public channels will still be public and visible to everyone.",
+ "You_are_deleting_the_team": "You are deleting this team.",
+ "Removing_user_from_this_team": "You are removing {{user}} from this team",
+ "Remove_User_Team_Channels": "Select the channels you want the user to be removed from.",
+ "Remove_Member": "Remove Member",
+ "leaving_team": "leaving team",
+ "removing_team": "removing from team",
+ "moving_channel_to_team": "moving channel to team",
+ "deleting_team": "deleting team",
+ "member-does-not-exist": "Member does not exist",
+ "Convert": "Convert",
+ "Convert_to_Team": "Convert to Team",
+ "Convert_to_Team_Warning": "You are converting this Channel to a Team. All Members will be kept.",
+ "Move_to_Team": "Move to Team",
+ "Move_Channel_Paragraph": "Moving a channel inside a team means that this channel will be added in the team’s context, however, all channel’s members, which are not members of the respective team, will still have access to this channel, but will not be added as team’s members. \n\nAll channel’s management will still be made by the owners of this channel.\n\nTeam’s members and even team’s owners, if not a member of this channel, can not have access to the channel’s content. \n\nPlease notice that the Team’s owner will be able remove members from the Channel.",
+ "Move_to_Team_Warning": "After reading the previous intructions about this behavior, do you still want to move this channel to the selected team?",
+ "Load_More": "Load More",
+ "Load_Newer": "Load Newer",
+ "Load_Older": "Load Older",
+ "room-name-already-exists": "Room name already exists",
+ "error-team-creation": "Error team creation",
+ "unauthorized": "Unauthorized",
+ "Left_The_Room_Successfully": "Left the room successfully",
+ "Deleted_The_Team_Successfully": "Team deleted successfully",
+ "Deleted_The_Room_Successfully": "Room deleted successfully",
+ "Convert_to_Channel": "Convert to Channel",
+ "Converting_Team_To_Channel": "Converting Team to Channel",
+ "Select_Team_Channels_To_Delete": "Select the Team’s Channels you would like to delete, the ones you do not select will be moved to the Workspace. \n\nNotice that public Channels will be public and visible to everyone.",
+ "You_are_converting_the_team": "You are converting this Team to a Channel",
+ "Display": "Display",
+ "Avatars": "Avatars",
+ "Sort_by": "Sort by",
+ "Group_by": "Group by",
+ "Types": "Types",
+ "Expanded": "Expanded",
+ "Condensed": "Condensed",
+ "creating_discussion": "creating discussion",
+ "Canned_Responses": "Canned Responses",
+ "No_match_found": "No match found.",
+ "No_discussions": "No discussions",
+ "Check_canned_responses": "Check on canned responses.",
+ "Searching": "Searching",
+ "Use": "Use",
+ "Shortcut": "Shortcut",
+ "Content": "Content",
+ "Sharing": "Sharing",
+ "No_canned_responses": "No canned responses",
+ "Send_email_confirmation": "Send email confirmation",
+ "sending_email_confirmation": "sending email confirmation",
+ "Enable_Message_Parser": "Enable Message Parser"
}
diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json
index 3bfaf7b54..f33e7586a 100644
--- a/app/i18n/locales/pt-BR.json
+++ b/app/i18n/locales/pt-BR.json
@@ -679,5 +679,7 @@
"Use": "Use",
"Shortcut": "Atalho",
"Content": "Conteúdo",
- "No_canned_responses": "Não há respostas predefinidas"
+ "No_canned_responses": "Não há respostas predefinidas",
+ "Send_email_confirmation": "Enviar email de confirmação",
+ "sending_email_confirmation": "enviando email de confirmação"
}
diff --git a/app/lib/database/model/Message.js b/app/lib/database/model/Message.js
index a03902a26..20134733b 100644
--- a/app/lib/database/model/Message.js
+++ b/app/lib/database/model/Message.js
@@ -81,4 +81,6 @@ export default class Message extends Model {
@field('e2e') e2e;
@field('tshow') tshow;
+
+ @json('md', sanitizer) md;
}
diff --git a/app/lib/database/model/migrations.js b/app/lib/database/model/migrations.js
index fe32ec4f3..15c1331fe 100644
--- a/app/lib/database/model/migrations.js
+++ b/app/lib/database/model/migrations.js
@@ -190,6 +190,15 @@ export default schemaMigrations({
]
})
]
+ },
+ {
+ toVersion: 14,
+ steps: [
+ addColumns({
+ table: 'messages',
+ columns: [{ name: 'md', type: 'string', isOptional: true }]
+ })
+ ]
}
]
});
diff --git a/app/lib/database/model/servers/User.js b/app/lib/database/model/servers/User.js
index 6d78c27fa..30bd5f57d 100644
--- a/app/lib/database/model/servers/User.js
+++ b/app/lib/database/model/servers/User.js
@@ -25,4 +25,6 @@ export default class User extends Model {
@field('show_message_in_main_thread') showMessageInMainThread;
@field('is_from_webview') isFromWebView;
+
+ @field('enable_message_parser_early_adoption') enableMessageParserEarlyAdoption;
}
diff --git a/app/lib/database/model/servers/migrations.js b/app/lib/database/model/servers/migrations.js
index 51ec2b73b..d1f24f125 100644
--- a/app/lib/database/model/servers/migrations.js
+++ b/app/lib/database/model/servers/migrations.js
@@ -94,6 +94,15 @@ export default schemaMigrations({
columns: [{ name: 'is_from_webview', type: 'boolean', isOptional: true }]
})
]
+ },
+ {
+ toVersion: 12,
+ steps: [
+ addColumns({
+ table: 'users',
+ columns: [{ name: 'enable_message_parser_early_adoption', type: 'boolean', isOptional: true }]
+ })
+ ]
}
]
});
diff --git a/app/lib/database/schema/app.js b/app/lib/database/schema/app.js
index 33bde61de..043ddb8e9 100644
--- a/app/lib/database/schema/app.js
+++ b/app/lib/database/schema/app.js
@@ -1,7 +1,7 @@
import { appSchema, tableSchema } from '@nozbe/watermelondb';
export default appSchema({
- version: 13,
+ version: 14,
tables: [
tableSchema({
name: 'subscriptions',
@@ -115,7 +115,8 @@ export default appSchema({
{ name: 'tmsg', type: 'string', isOptional: true },
{ name: 'blocks', type: 'string', isOptional: true },
{ name: 'e2e', type: 'string', isOptional: true },
- { name: 'tshow', type: 'boolean', isOptional: true }
+ { name: 'tshow', type: 'boolean', isOptional: true },
+ { name: 'md', type: 'string', isOptional: true }
]
}),
tableSchema({
diff --git a/app/lib/database/schema/servers.js b/app/lib/database/schema/servers.js
index 1105cf165..1d849b874 100644
--- a/app/lib/database/schema/servers.js
+++ b/app/lib/database/schema/servers.js
@@ -1,7 +1,7 @@
import { appSchema, tableSchema } from '@nozbe/watermelondb';
export default appSchema({
- version: 11,
+ version: 12,
tables: [
tableSchema({
name: 'users',
@@ -16,7 +16,8 @@ export default appSchema({
{ name: 'login_email_password', type: 'boolean', isOptional: true },
{ name: 'show_message_in_main_thread', type: 'boolean', isOptional: true },
{ name: 'avatar_etag', type: 'string', isOptional: true },
- { name: 'is_from_webview', type: 'boolean', isOptional: true }
+ { name: 'is_from_webview', type: 'boolean', isOptional: true },
+ { name: 'enable_message_parser_early_adoption', type: 'boolean', isOptional: true }
]
}),
tableSchema({
diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js
index e0c16ac6c..33f87e868 100644
--- a/app/lib/rocketchat.js
+++ b/app/lib/rocketchat.js
@@ -5,6 +5,7 @@ import { Q } from '@nozbe/watermelondb';
import AsyncStorage from '@react-native-community/async-storage';
import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import RNFetchBlob from 'rn-fetch-blob';
+import isEmpty from 'lodash/isEmpty';
import defaultSettings from '../constants/settings';
import log from '../utils/log';
@@ -530,6 +531,10 @@ const RocketChat = {
return this.post('users.forgotPassword', { email }, false);
},
+ sendConfirmationEmail(email) {
+ return this.methodCallWrapper('sendConfirmationEmail', email);
+ },
+
loginTOTP(params, loginEmailPassword, isFromWebView = false) {
return new Promise(async (resolve, reject) => {
try {
@@ -622,7 +627,8 @@ const RocketChat = {
roles: result.me.roles,
avatarETag: result.me.avatarETag,
isFromWebView,
- showMessageInMainThread: result.me.settings?.preferences?.showMessageInMainThread ?? true
+ showMessageInMainThread: result.me.settings?.preferences?.showMessageInMainThread ?? true,
+ enableMessageParserEarlyAdoption: result.me.settings?.preferences?.enableMessageParserEarlyAdoption ?? true
};
return user;
},
@@ -1069,8 +1075,12 @@ const RocketChat = {
},
methodCallWrapper(method, ...params) {
const { API_Use_REST_For_DDP_Calls } = reduxStore.getState().settings;
+ const { user } = reduxStore.getState().login;
if (API_Use_REST_For_DDP_Calls) {
- return this.post(`method.call/${method}`, { message: EJSON.stringify({ method, params }) });
+ const url = isEmpty(user) ? 'method.callAnon' : 'method.call';
+ return this.post(`${url}/${method}`, {
+ message: EJSON.stringify({ method, params })
+ });
}
const parsedParams = params.map(param => {
if (param instanceof Date) {
diff --git a/app/presentation/TextInput.tsx b/app/presentation/TextInput.tsx
index b3f18676c..028b811b5 100644
--- a/app/presentation/TextInput.tsx
+++ b/app/presentation/TextInput.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { I18nManager, StyleSheet, TextInput, TextInputProps } from 'react-native';
+import { I18nManager, StyleProp, StyleSheet, TextInput, TextInputProps, TextStyle } from 'react-native';
import { themes } from '../constants/colors';
@@ -10,7 +10,7 @@ const styles = StyleSheet.create({
});
interface IThemedTextInput extends TextInputProps {
- style: object;
+ style: StyleProp;
theme: string;
}
diff --git a/app/sagas/login.js b/app/sagas/login.js
index c3f987054..1d8f688f2 100644
--- a/app/sagas/login.js
+++ b/app/sagas/login.js
@@ -20,7 +20,6 @@ import { encryptionInit, encryptionStop } from '../actions/encryption';
import UserPreferences from '../lib/userPreferences';
import { inquiryRequest, inquiryReset } from '../ee/omnichannel/actions/inquiry';
import { isOmnichannelStatusAvailable } from '../ee/omnichannel/lib';
-import Navigation from '../lib/Navigation';
const getServer = state => state.server.server;
const loginWithPasswordCall = args => RocketChat.loginWithPassword(args);
@@ -191,8 +190,6 @@ const handleLogout = function* handleLogout({ forcedByServer }) {
yield put(appStart({ root: ROOT_OUTSIDE }));
showErrorAlert(I18n.t('Logged_out_by_server'), I18n.t('Oops'));
yield delay(300);
- Navigation.navigate('NewServerView');
- yield delay(300);
EventEmitter.emit('NewServer', { server });
} else {
const serversDB = database.servers;
diff --git a/app/stacks/OutsideStack.js b/app/stacks/OutsideStack.js
index f23e65c3d..392850c3e 100644
--- a/app/stacks/OutsideStack.js
+++ b/app/stacks/OutsideStack.js
@@ -10,6 +10,7 @@ import NewServerView from '../views/NewServerView';
import WorkspaceView from '../views/WorkspaceView';
import LoginView from '../views/LoginView';
import ForgotPasswordView from '../views/ForgotPasswordView';
+import SendEmailConfirmationView from '../views/SendEmailConfirmationView';
import RegisterView from '../views/RegisterView';
import LegalView from '../views/LegalView';
import AuthenticationWebView from '../views/AuthenticationWebView';
@@ -25,6 +26,11 @@ const _OutsideStack = () => {
+
diff --git a/app/theme.tsx b/app/theme.tsx
index 37765b8fb..a304d17df 100644
--- a/app/theme.tsx
+++ b/app/theme.tsx
@@ -3,14 +3,14 @@ import hoistNonReactStatics from 'hoist-non-react-statics';
interface IThemeContextProps {
theme: string;
- themePreferences: {
+ themePreferences?: {
currentTheme: 'automatic' | 'light';
darkLevel: string;
};
- setTheme: (newTheme?: {}) => void;
+ setTheme?: (newTheme?: {}) => void;
}
-export const ThemeContext = React.createContext>({ theme: 'light' });
+export const ThemeContext = React.createContext({ theme: 'light' });
export function withTheme(Component: React.ComponentType): (props: any) => JSX.Element {
const ThemedComponent = (props: any) => (
diff --git a/app/utils/log/events.js b/app/utils/log/events.js
index 4d2564b0c..505a42e4c 100644
--- a/app/utils/log/events.js
+++ b/app/utils/log/events.js
@@ -11,6 +11,9 @@ export default {
FP_FORGOT_PASSWORD: 'fp_forgot_password',
FP_FORGOT_PASSWORD_F: 'fp_forgot_password_f',
+ // SEND EMAIL CONFIRMATION VIEW
+ SEC_SEND_EMAIL_CONFIRMATION: 'sec_send_email_confirmation',
+
// REGISTER VIEW
REGISTER_DEFAULT_SIGN_UP: 'register_default_sign_up',
REGISTER_DEFAULT_SIGN_UP_F: 'register_default_sign_up_f',
diff --git a/app/utils/scaling.js b/app/utils/scaling.js
deleted file mode 100644
index 7cf33f1fc..000000000
--- a/app/utils/scaling.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { isTablet } from './deviceInfo';
-
-const guidelineBaseWidth = isTablet ? 600 : 375;
-const guidelineBaseHeight = isTablet ? 800 : 667;
-
-// TODO: we need to refactor this
-const scale = (size, width) => (width / guidelineBaseWidth) * size;
-const verticalScale = (size, height) => (height / guidelineBaseHeight) * size;
-const moderateScale = (size, factor = 0.5, width) => size + (scale(size, width) - size) * factor;
-
-export { scale, verticalScale, moderateScale };
diff --git a/app/utils/scaling.ts b/app/utils/scaling.ts
new file mode 100644
index 000000000..45d248d37
--- /dev/null
+++ b/app/utils/scaling.ts
@@ -0,0 +1,16 @@
+import { isTablet } from './deviceInfo';
+
+const guidelineBaseWidth = isTablet ? 600 : 375;
+const guidelineBaseHeight = isTablet ? 800 : 667;
+
+function scale({ size, width }: { size: number; width: number }): number {
+ return (width / guidelineBaseWidth) * size;
+}
+function verticalScale({ size, height }: { size: number; height: number }): number {
+ return (height / guidelineBaseHeight) * size;
+}
+function moderateScale({ size, factor = 0.5, width }: { size: number; factor?: number; width: number }): number {
+ return size + (scale({ size, width }) - size) * factor;
+}
+
+export { scale, verticalScale, moderateScale };
diff --git a/app/views/AuthenticationWebView.js b/app/views/AuthenticationWebView.tsx
similarity index 79%
rename from app/views/AuthenticationWebView.js
rename to app/views/AuthenticationWebView.tsx
index bba518d75..870af9560 100644
--- a/app/views/AuthenticationWebView.js
+++ b/app/views/AuthenticationWebView.tsx
@@ -1,8 +1,9 @@
import React from 'react';
-import PropTypes from 'prop-types';
-import { WebView } from 'react-native-webview';
+import { WebView, WebViewNavigation } from 'react-native-webview';
import { connect } from 'react-redux';
import parse from 'url-parse';
+import { StackNavigationProp } from '@react-navigation/stack';
+import { WebViewMessage } from 'react-native-webview/lib/WebViewTypes';
import RocketChat from '../lib/rocketchat';
import { isIOS } from '../utils/deviceInfo';
@@ -40,17 +41,44 @@ window.addEventListener('popstate', function() {
});
`;
-class AuthenticationWebView extends React.PureComponent {
- static propTypes = {
- navigation: PropTypes.object,
- route: PropTypes.object,
- server: PropTypes.string,
- Accounts_Iframe_api_url: PropTypes.bool,
- Accounts_Iframe_api_method: PropTypes.bool,
- theme: PropTypes.string
+interface IRoute {
+ params: {
+ authType: string;
+ url: string;
+ ssoToken?: string;
+ };
+}
+
+interface INavigationOption {
+ navigation: StackNavigationProp;
+ route: IRoute;
+}
+
+interface IAuthenticationWebView extends INavigationOption {
+ server: string;
+ Accounts_Iframe_api_url: string;
+ Accounts_Iframe_api_method: string;
+ theme: string;
+}
+
+interface IState {
+ logging: boolean;
+ loading: boolean;
+}
+
+class AuthenticationWebView extends React.PureComponent {
+ private oauthRedirectRegex: RegExp;
+ private iframeRedirectRegex: RegExp;
+
+ static navigationOptions = ({ route, navigation }: INavigationOption) => {
+ const { authType } = route.params;
+ return {
+ headerLeft: () => ,
+ title: ['saml', 'cas', 'iframe'].includes(authType) ? 'SSO' : 'OAuth'
+ };
};
- constructor(props) {
+ constructor(props: IAuthenticationWebView) {
super(props);
this.state = {
logging: false,
@@ -71,7 +99,7 @@ class AuthenticationWebView extends React.PureComponent {
navigation.pop();
};
- login = params => {
+ login = (params: any) => {
const { logging } = this.state;
if (logging) {
return;
@@ -89,7 +117,7 @@ class AuthenticationWebView extends React.PureComponent {
};
// Force 3s delay so the server has time to evaluate the token
- debouncedLogin = debounce(params => this.login(params), 3000);
+ debouncedLogin = debounce((params: any) => this.login(params), 3000);
tryLogin = debounce(
async () => {
@@ -104,7 +132,7 @@ class AuthenticationWebView extends React.PureComponent {
true
);
- onNavigationStateChange = webViewState => {
+ onNavigationStateChange = (webViewState: WebViewNavigation | WebViewMessage) => {
const url = decodeURIComponent(webViewState.url);
const { route } = this.props;
const { authType } = route.params;
@@ -180,18 +208,10 @@ class AuthenticationWebView extends React.PureComponent {
}
}
-const mapStateToProps = state => ({
+const mapStateToProps = (state: any) => ({
server: state.server.server,
Accounts_Iframe_api_url: state.settings.Accounts_Iframe_api_url,
Accounts_Iframe_api_method: state.settings.Accounts_Iframe_api_method
});
-AuthenticationWebView.navigationOptions = ({ route, navigation }) => {
- const { authType } = route.params;
- return {
- headerLeft: () => ,
- title: ['saml', 'cas', 'iframe'].includes(authType) ? 'SSO' : 'OAuth'
- };
-};
-
export default connect(mapStateToProps)(withTheme(AuthenticationWebView));
diff --git a/app/views/InviteUsersView/index.js b/app/views/InviteUsersView/index.tsx
similarity index 80%
rename from app/views/InviteUsersView/index.js
rename to app/views/InviteUsersView/index.tsx
index 2fe18f39a..cfcd3fa11 100644
--- a/app/views/InviteUsersView/index.js
+++ b/app/views/InviteUsersView/index.tsx
@@ -1,8 +1,10 @@
import React from 'react';
-import PropTypes from 'prop-types';
import { ScrollView, Share, View } from 'react-native';
import moment from 'moment';
import { connect } from 'react-redux';
+import { StackNavigationProp, StackNavigationOptions } from '@react-navigation/stack';
+import { RouteProp } from '@react-navigation/core';
+import { Dispatch } from 'redux';
import {
inviteLinksClear as inviteLinksClearAction,
@@ -20,22 +22,28 @@ import SafeAreaView from '../../containers/SafeAreaView';
import { events, logEvent } from '../../utils/log';
import styles from './styles';
-class InviteUsersView extends React.Component {
- static navigationOptions = () => ({
- title: I18n.t('Invite_users')
- });
+interface IInviteUsersView {
+ navigation: StackNavigationProp;
+ route: RouteProp;
+ theme: string;
+ timeDateFormat: string;
+ invite: {
+ url: string;
+ expires: number;
+ maxUses: number;
+ uses: number;
+ };
+ createInviteLink(rid: string): void;
+ clearInviteLink(): void;
+}
+class InviteUsersView extends React.Component {
+ private rid: string;
- static propTypes = {
- navigation: PropTypes.object,
- route: PropTypes.object,
- theme: PropTypes.string,
- timeDateFormat: PropTypes.string,
- invite: PropTypes.object,
- createInviteLink: PropTypes.func,
- clearInviteLink: PropTypes.func
+ static navigationOptions: StackNavigationOptions = {
+ title: I18n.t('Invite_users')
};
- constructor(props) {
+ constructor(props: IInviteUsersView) {
super(props);
this.rid = props.route.params?.rid;
}
@@ -97,6 +105,7 @@ class InviteUsersView extends React.Component {
renderExpiration = () => {
const { theme } = this.props;
const expirationMessage = this.linkExpirationText();
+ // @ts-ignore
return ;
};
@@ -104,10 +113,10 @@ class InviteUsersView extends React.Component {
const { theme, invite } = this.props;
return (
+ {/* @ts-ignore*/}
@@ -123,15 +132,15 @@ class InviteUsersView extends React.Component {
}
}
-const mapStateToProps = state => ({
+const mapStateToProps = (state: any) => ({
timeDateFormat: state.settings.Message_TimeAndDateFormat,
days: state.inviteLinks.days,
maxUses: state.inviteLinks.maxUses,
invite: state.inviteLinks.invite
});
-const mapDispatchToProps = dispatch => ({
- createInviteLink: rid => dispatch(inviteLinksCreateAction(rid)),
+const mapDispatchToProps = (dispatch: Dispatch) => ({
+ createInviteLink: (rid: string) => dispatch(inviteLinksCreateAction(rid)),
clearInviteLink: () => dispatch(inviteLinksClearAction())
});
diff --git a/app/views/InviteUsersView/styles.js b/app/views/InviteUsersView/styles.ts
similarity index 100%
rename from app/views/InviteUsersView/styles.js
rename to app/views/InviteUsersView/styles.ts
diff --git a/app/views/LoginView.js b/app/views/LoginView.tsx
similarity index 79%
rename from app/views/LoginView.js
rename to app/views/LoginView.tsx
index c240ab8f4..4643687e2 100644
--- a/app/views/LoginView.js
+++ b/app/views/LoginView.tsx
@@ -1,8 +1,9 @@
import React from 'react';
-import PropTypes from 'prop-types';
import { Alert, Keyboard, StyleSheet, Text, View } from 'react-native';
import { connect } from 'react-redux';
import { dequal } from 'dequal';
+import { StackNavigationProp } from '@react-navigation/stack';
+import { RouteProp } from '@react-navigation/core';
import Button from '../containers/Button';
import I18n from '../i18n';
@@ -46,31 +47,35 @@ const styles = StyleSheet.create({
}
});
-class LoginView extends React.Component {
- static navigationOptions = ({ route, navigation }) => ({
- title: route.params?.title ?? 'Rocket.Chat',
+interface IProps {
+ navigation: StackNavigationProp;
+ route: RouteProp;
+ Site_Name: string;
+ Accounts_RegistrationForm: string;
+ Accounts_RegistrationForm_LinkReplacementText: string;
+ Accounts_EmailOrUsernamePlaceholder: string;
+ Accounts_PasswordPlaceholder: string;
+ Accounts_PasswordReset: boolean;
+ Accounts_ShowFormLogin: boolean;
+ isFetching: boolean;
+ error: {
+ error: string;
+ };
+ failure: boolean;
+ theme: string;
+ loginRequest: Function;
+ inviteLinkToken: string;
+}
+
+class LoginView extends React.Component {
+ private passwordInput: any;
+
+ static navigationOptions = ({ route, navigation }: Partial) => ({
+ title: route?.params?.title ?? 'Rocket.Chat',
headerRight: () =>
});
- static propTypes = {
- navigation: PropTypes.object,
- route: PropTypes.object,
- Site_Name: PropTypes.string,
- Accounts_RegistrationForm: PropTypes.string,
- Accounts_RegistrationForm_LinkReplacementText: PropTypes.string,
- Accounts_EmailOrUsernamePlaceholder: PropTypes.string,
- Accounts_PasswordPlaceholder: PropTypes.string,
- Accounts_PasswordReset: PropTypes.bool,
- Accounts_ShowFormLogin: PropTypes.bool,
- isFetching: PropTypes.bool,
- error: PropTypes.object,
- failure: PropTypes.bool,
- theme: PropTypes.string,
- loginRequest: PropTypes.func,
- inviteLinkToken: PropTypes.string
- };
-
- constructor(props) {
+ constructor(props: IProps) {
super(props);
this.state = {
user: props.route.params?.username ?? '',
@@ -78,10 +83,14 @@ class LoginView extends React.Component {
};
}
- UNSAFE_componentWillReceiveProps(nextProps) {
+ UNSAFE_componentWillReceiveProps(nextProps: IProps) {
const { error } = this.props;
if (nextProps.failure && !dequal(error, nextProps.error)) {
- Alert.alert(I18n.t('Oops'), I18n.t('Login_error'));
+ if (nextProps.error?.error === 'error-invalid-email') {
+ this.resendEmailConfirmation();
+ } else {
+ Alert.alert(I18n.t('Oops'), I18n.t('Login_error'));
+ }
}
}
@@ -105,6 +114,12 @@ class LoginView extends React.Component {
navigation.navigate('ForgotPasswordView', { title: Site_Name });
};
+ resendEmailConfirmation = () => {
+ const { user } = this.state;
+ const { navigation } = this.props;
+ navigation.navigate('SendEmailConfirmationView', { user });
+ };
+
valid = () => {
const { user, password } = this.state;
return user.trim() && password.trim();
@@ -146,7 +161,7 @@ class LoginView extends React.Component {
placeholder={Accounts_EmailOrUsernamePlaceholder || I18n.t('Username_or_email')}
keyboardType='email-address'
returnKeyType='next'
- onChangeText={value => this.setState({ user: value })}
+ onChangeText={(value: string) => this.setState({ user: value })}
onSubmitEditing={() => {
this.passwordInput.focus();
}}
@@ -166,7 +181,7 @@ class LoginView extends React.Component {
returnKeyType='send'
secureTextEntry
onSubmitEditing={this.submit}
- onChangeText={value => this.setState({ password: value })}
+ onChangeText={(value: string) => this.setState({ password: value })}
testID='login-view-password'
textContentType='password'
autoCompleteType='password'
@@ -227,7 +242,7 @@ class LoginView extends React.Component {
}
}
-const mapStateToProps = state => ({
+const mapStateToProps = (state: any) => ({
server: state.server.server,
Site_Name: state.settings.Site_Name,
Accounts_ShowFormLogin: state.settings.Accounts_ShowFormLogin,
@@ -242,8 +257,8 @@ const mapStateToProps = state => ({
inviteLinkToken: state.inviteLinks.token
});
-const mapDispatchToProps = dispatch => ({
- loginRequest: params => dispatch(loginRequestAction(params))
+const mapDispatchToProps = (dispatch: any) => ({
+ loginRequest: (params: any) => dispatch(loginRequestAction(params))
});
export default connect(mapStateToProps, mapDispatchToProps)(withTheme(LoginView));
diff --git a/app/views/NewServerView/ServerInput/Item.js b/app/views/NewServerView/ServerInput/Item.tsx
similarity index 79%
rename from app/views/NewServerView/ServerInput/Item.js
rename to app/views/NewServerView/ServerInput/Item.tsx
index 59ae77f07..9fb44719e 100644
--- a/app/views/NewServerView/ServerInput/Item.js
+++ b/app/views/NewServerView/ServerInput/Item.tsx
@@ -1,12 +1,12 @@
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
-import PropTypes from 'prop-types';
import { BorderlessButton } from 'react-native-gesture-handler';
import { themes } from '../../../constants/colors';
import { CustomIcon } from '../../../lib/Icons';
import sharedStyles from '../../Styles';
import Touch from '../../../utils/touch';
+import { IServer } from '../index';
const styles = StyleSheet.create({
container: {
@@ -27,13 +27,20 @@ const styles = StyleSheet.create({
}
});
-const Item = ({ item, theme, onPress, onDelete }) => (
+interface IItem {
+ item: IServer;
+ theme: string;
+ onPress(url: string): void;
+ onDelete(item: IServer): void;
+}
+
+const Item = ({ item, theme, onPress, onDelete }: IItem): JSX.Element => (
onPress(item.url)} theme={theme} testID={`server-history-${item.url}`}>
{item.url}
-
+
{item.username}
@@ -43,11 +50,4 @@ const Item = ({ item, theme, onPress, onDelete }) => (
);
-Item.propTypes = {
- item: PropTypes.object,
- theme: PropTypes.string,
- onPress: PropTypes.func,
- onDelete: PropTypes.func
-};
-
export default Item;
diff --git a/app/views/NewServerView/ServerInput/index.js b/app/views/NewServerView/ServerInput/index.tsx
similarity index 81%
rename from app/views/NewServerView/ServerInput/index.js
rename to app/views/NewServerView/ServerInput/index.tsx
index ef80c4685..c3399b730 100644
--- a/app/views/NewServerView/ServerInput/index.js
+++ b/app/views/NewServerView/ServerInput/index.tsx
@@ -1,12 +1,12 @@
import React, { useState } from 'react';
import { FlatList, StyleSheet, View } from 'react-native';
-import PropTypes from 'prop-types';
import TextInput from '../../../containers/TextInput';
import * as List from '../../../containers/List';
import { themes } from '../../../constants/colors';
import I18n from '../../../i18n';
import Item from './Item';
+import { IServer } from '../index';
const styles = StyleSheet.create({
container: {
@@ -28,7 +28,25 @@ const styles = StyleSheet.create({
}
});
-const ServerInput = ({ text, theme, serversHistory, onChangeText, onSubmit, onDelete, onPressServerHistory }) => {
+interface IServerInput {
+ text: string;
+ theme: string;
+ serversHistory: any[];
+ onChangeText(text: string): void;
+ onSubmit(): void;
+ onDelete(item: IServer): void;
+ onPressServerHistory(serverHistory: IServer): void;
+}
+
+const ServerInput = ({
+ text,
+ theme,
+ serversHistory,
+ onChangeText,
+ onSubmit,
+ onDelete,
+ onPressServerHistory
+}: IServerInput): JSX.Element => {
const [focused, setFocused] = useState(false);
return (
@@ -68,14 +86,4 @@ const ServerInput = ({ text, theme, serversHistory, onChangeText, onSubmit, onDe
);
};
-ServerInput.propTypes = {
- text: PropTypes.string,
- theme: PropTypes.string,
- serversHistory: PropTypes.array,
- onChangeText: PropTypes.func,
- onSubmit: PropTypes.func,
- onDelete: PropTypes.func,
- onPressServerHistory: PropTypes.func
-};
-
export default ServerInput;
diff --git a/app/views/NewServerView/index.js b/app/views/NewServerView/index.tsx
similarity index 75%
rename from app/views/NewServerView/index.js
rename to app/views/NewServerView/index.tsx
index 8eaba349e..815ec1347 100644
--- a/app/views/NewServerView/index.js
+++ b/app/views/NewServerView/index.tsx
@@ -1,5 +1,4 @@
import React from 'react';
-import PropTypes from 'prop-types';
import { Text, Keyboard, StyleSheet, View, BackHandler, Image } from 'react-native';
import { connect } from 'react-redux';
import { Base64 } from 'js-base64';
@@ -7,6 +6,9 @@ import parse from 'url-parse';
import { Q } from '@nozbe/watermelondb';
import { TouchableOpacity } from 'react-native-gesture-handler';
import Orientation from 'react-native-orientation-locker';
+import { StackNavigationProp } from '@react-navigation/stack';
+import { Dispatch } from 'redux';
+import Model from '@nozbe/watermelondb/Model';
import UserPreferences from '../../lib/userPreferences';
import EventEmitter from '../../utils/events';
@@ -19,7 +21,6 @@ import FormContainer, { FormContainerInner } from '../../containers/FormContaine
import I18n from '../../i18n';
import { themes } from '../../constants/colors';
import { events, logEvent } from '../../utils/log';
-import { animateNextTransition } from '../../utils/layoutAnimation';
import { withTheme } from '../../theme';
import { BASIC_AUTH_KEY, setBasicAuth } from '../../utils/fetch';
import * as HeaderButton from '../../containers/HeaderButton';
@@ -66,19 +67,32 @@ const styles = StyleSheet.create({
}
});
-class NewServerView extends React.Component {
- static propTypes = {
- navigation: PropTypes.object,
- theme: PropTypes.string,
- connecting: PropTypes.bool.isRequired,
- connectServer: PropTypes.func.isRequired,
- selectServer: PropTypes.func.isRequired,
- previousServer: PropTypes.string,
- inviteLinksClear: PropTypes.func,
- serverFinishAdd: PropTypes.func
- };
+export interface IServer extends Model {
+ url: string;
+ username: string;
+}
+interface INewServerView {
+ navigation: StackNavigationProp;
+ theme: string;
+ connecting: boolean;
+ connectServer(server: string, username?: string, fromServerHistory?: boolean): void;
+ selectServer(server: string): void;
+ previousServer: string;
+ inviteLinksClear(): void;
+ serverFinishAdd(): void;
+ width: number;
+ height: number;
+}
- constructor(props) {
+interface IState {
+ text: string;
+ connectingOpen: boolean;
+ certificate: any;
+ serversHistory: IServer[];
+}
+
+class NewServerView extends React.Component {
+ constructor(props: INewServerView) {
super(props);
if (!isTablet) {
Orientation.lockToPortrait();
@@ -131,21 +145,21 @@ class NewServerView extends React.Component {
return false;
};
- onChangeText = text => {
+ onChangeText = (text: string) => {
this.setState({ text });
this.queryServerHistory(text);
};
- queryServerHistory = async text => {
+ queryServerHistory = async (text?: string) => {
const db = database.servers;
try {
const serversHistoryCollection = db.get('servers_history');
let whereClause = [Q.where('username', Q.notEq(null)), Q.experimentalSortBy('updated_at', Q.desc), Q.experimentalTake(3)];
- const likeString = sanitizeLikeString(text);
if (text) {
+ const likeString = sanitizeLikeString(text);
whereClause = [...whereClause, Q.where('url', Q.like(`%${likeString}%`))];
}
- const serversHistory = await serversHistoryCollection.query(...whereClause).fetch();
+ const serversHistory = (await serversHistoryCollection.query(...whereClause).fetch()) as IServer[];
this.setState({ serversHistory });
} catch {
// Do nothing
@@ -158,7 +172,7 @@ class NewServerView extends React.Component {
selectServer(previousServer);
};
- handleNewServerEvent = event => {
+ handleNewServerEvent = (event: { server: string }) => {
let { server } = event;
if (!server) {
return;
@@ -169,13 +183,11 @@ class NewServerView extends React.Component {
connectServer(server);
};
- onPressServerHistory = serverHistory => {
- this.setState({ text: serverHistory?.url }, () =>
- this.submit({ fromServerHistory: true, username: serverHistory?.username })
- );
+ onPressServerHistory = (serverHistory: IServer) => {
+ this.setState({ text: serverHistory.url }, () => this.submit(true, serverHistory?.username));
};
- submit = async ({ fromServerHistory = false, username }) => {
+ submit = async (fromServerHistory?: boolean, username?: string) => {
logEvent(events.NS_CONNECT_TO_WORKSPACE);
const { text, certificate } = this.state;
const { connectServer } = this.props;
@@ -207,7 +219,7 @@ class NewServerView extends React.Component {
connectServer('https://open.rocket.chat');
};
- basicAuth = async (server, text) => {
+ basicAuth = async (server: string, text: string) => {
try {
const parsedUrl = parse(text, true);
if (parsedUrl.auth.length) {
@@ -222,14 +234,14 @@ class NewServerView extends React.Component {
chooseCertificate = async () => {
try {
- const certificate = await SSLPinning.pickCertificate();
+ const certificate = await SSLPinning?.pickCertificate();
this.setState({ certificate });
} catch {
// Do nothing
}
};
- completeUrl = url => {
+ completeUrl = (url: string) => {
const parsedUrl = parse(url, true);
if (parsedUrl.auth.length) {
url = parsedUrl.origin;
@@ -252,14 +264,11 @@ class NewServerView extends React.Component {
return url.replace(/\/+$/, '').replace(/\\/g, '/');
};
- uriToPath = uri => uri.replace('file://', '');
-
- saveCertificate = certificate => {
- animateNextTransition();
- this.setState({ certificate });
- };
+ uriToPath = (uri: string) => uri.replace('file://', '');
handleRemove = () => {
+ // TODO: Remove ts-ignore when migrate the showConfirmationAlert
+ // @ts-ignore
showConfirmationAlert({
message: I18n.t('You_will_unset_a_certificate_for_this_server'),
confirmationText: I18n.t('Remove'),
@@ -267,14 +276,15 @@ class NewServerView extends React.Component {
});
};
- deleteServerHistory = async item => {
- const { serversHistory } = this.state;
+ deleteServerHistory = async (item: IServer) => {
const db = database.servers;
try {
- await db.action(async () => {
+ await db.write(async () => {
await item.destroyPermanently();
});
- this.setState({ serversHistory: serversHistory.filter(server => server.id !== item.id) });
+ this.setState((prevstate: IState) => ({
+ serversHistory: prevstate.serversHistory.filter((server: IServer) => server.id !== item.id)
+ }));
} catch {
// Nothing
}
@@ -288,20 +298,21 @@ class NewServerView extends React.Component {
style={[
styles.certificatePicker,
{
- marginBottom: verticalScale(previousServer && !isTablet ? 10 : 30, height)
+ marginBottom: verticalScale({ size: previousServer && !isTablet ? 10 : 30, height })
}
]}>
{certificate ? I18n.t('Your_certificate') : I18n.t('Do_you_have_a_certificate')}
-
+
{certificate ?? I18n.t('Apply_Your_Certificate')}
@@ -321,10 +332,10 @@ class NewServerView extends React.Component {
style={[
styles.onboardingImage,
{
- marginBottom: verticalScale(10, height),
- marginTop: isTablet ? 0 : verticalScale(marginTop, height),
- width: verticalScale(100, height),
- height: verticalScale(100, height)
+ marginBottom: verticalScale({ size: 10, height }),
+ marginTop: isTablet ? 0 : verticalScale({ size: marginTop, height }),
+ width: verticalScale({ size: 100, height }),
+ height: verticalScale({ size: 100, height })
}
]}
source={require('../../static/images/logo.png')}
@@ -335,8 +346,8 @@ class NewServerView extends React.Component {
styles.title,
{
color: themes[theme].titleText,
- fontSize: moderateScale(22, null, width),
- marginBottom: verticalScale(8, height)
+ fontSize: moderateScale({ size: 22, width }),
+ marginBottom: verticalScale({ size: 8, height })
}
]}>
Rocket.Chat
@@ -346,8 +357,8 @@ class NewServerView extends React.Component {
styles.subtitle,
{
color: themes[theme].controlText,
- fontSize: moderateScale(16, null, width),
- marginBottom: verticalScale(30, height)
+ fontSize: moderateScale({ size: 16, width }),
+ marginBottom: verticalScale({ size: 30, height })
}
]}>
{I18n.t('Onboarding_subtitle')}
@@ -367,7 +378,7 @@ class NewServerView extends React.Component {
onPress={this.submit}
disabled={!text || connecting}
loading={!connectingOpen && connecting}
- style={[styles.connectButton, { marginTop: verticalScale(16, height) }]}
+ style={[styles.connectButton, { marginTop: verticalScale({ size: 16, height }) }]}
theme={theme}
testID='new-server-view-button'
/>
@@ -377,8 +388,8 @@ class NewServerView extends React.Component {
styles.description,
{
color: themes[theme].auxiliaryText,
- fontSize: moderateScale(14, null, width),
- marginBottom: verticalScale(16, height)
+ fontSize: moderateScale({ size: 14, width }),
+ marginBottom: verticalScale({ size: 16, height })
}
]}>
{I18n.t('Onboarding_join_open_description')}
@@ -400,14 +411,15 @@ class NewServerView extends React.Component {
}
}
-const mapStateToProps = state => ({
+const mapStateToProps = (state: any) => ({
connecting: state.server.connecting,
previousServer: state.server.previousServer
});
-const mapDispatchToProps = dispatch => ({
- connectServer: (...params) => dispatch(serverRequest(...params)),
- selectServer: server => dispatch(selectServerRequest(server)),
+const mapDispatchToProps = (dispatch: Dispatch) => ({
+ connectServer: (server: string, username: string & null, fromServerHistory?: boolean) =>
+ dispatch(serverRequest(server, username, fromServerHistory)),
+ selectServer: (server: string) => dispatch(selectServerRequest(server)),
inviteLinksClear: () => dispatch(inviteLinksClearAction()),
serverFinishAdd: () => dispatch(serverFinishAddAction())
});
diff --git a/app/views/ReadReceiptView/index.js b/app/views/ReadReceiptView/index.js
index d407b3420..f611cbc15 100644
--- a/app/views/ReadReceiptView/index.js
+++ b/app/views/ReadReceiptView/index.js
@@ -1,13 +1,12 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FlatList, Text, View } from 'react-native';
+import { FlatList, Text, View, RefreshControl } from 'react-native';
import { dequal } from 'dequal';
import moment from 'moment';
import { connect } from 'react-redux';
import * as List from '../../containers/List';
import Avatar from '../../containers/Avatar';
-import ActivityIndicator from '../../containers/ActivityIndicator';
import * as HeaderButton from '../../containers/HeaderButton';
import I18n from '../../i18n';
import RocketChat from '../../lib/rocketchat';
@@ -85,12 +84,16 @@ class ReadReceiptView extends React.Component {
};
renderEmpty = () => {
+ const { loading } = this.state;
const { theme } = this.props;
+ if (loading) {
+ return null;
+ }
return (
- {I18n.t('No_Read_Receipts')}
+ {I18n.t('No_Read_Receipts')}
);
};
@@ -107,9 +110,15 @@ class ReadReceiptView extends React.Component {
{item?.user?.name}
- {time}
+ {time}
- {`@${item.user.username}`}
+ {`@${item.user.username}`}
);
@@ -119,30 +128,25 @@ class ReadReceiptView extends React.Component {
const { receipts, loading } = this.state;
const { theme } = this.props;
- if (!loading && receipts.length === 0) {
- return this.renderEmpty();
- }
-
return (
- {loading ? (
-
- ) : (
- item._id}
- />
- )}
+ }
+ keyExtractor={item => item._id}
+ />
);
}
diff --git a/app/views/ReadReceiptView/styles.js b/app/views/ReadReceiptView/styles.js
index dbf31e6a0..e6af153ed 100644
--- a/app/views/ReadReceiptView/styles.js
+++ b/app/views/ReadReceiptView/styles.js
@@ -8,9 +8,14 @@ export default StyleSheet.create({
alignItems: 'center',
justifyContent: 'center'
},
+ emptyText: {
+ fontSize: 16,
+ ...sharedStyles.textRegular
+ },
item: {
flex: 1,
flexDirection: 'row',
+ alignItems: 'center',
justifyContent: 'space-between'
},
separator: {
@@ -20,6 +25,14 @@ export default StyleSheet.create({
...sharedStyles.textRegular,
fontSize: 17
},
+ username: {
+ ...sharedStyles.textMedium,
+ fontSize: 14
+ },
+ time: {
+ ...sharedStyles.textRegular,
+ fontSize: 12
+ },
infoContainer: {
flex: 1,
marginLeft: 10
diff --git a/app/views/RegisterView.js b/app/views/RegisterView.tsx
similarity index 82%
rename from app/views/RegisterView.js
rename to app/views/RegisterView.tsx
index 5086bc9ee..045712163 100644
--- a/app/views/RegisterView.js
+++ b/app/views/RegisterView.tsx
@@ -1,6 +1,7 @@
import React from 'react';
-import PropTypes from 'prop-types';
import { Keyboard, StyleSheet, Text, View } from 'react-native';
+import { StackNavigationProp } from '@react-navigation/stack';
+import { RouteProp } from '@react-navigation/core';
import { connect } from 'react-redux';
import RNPickerSelect from 'react-native-picker-select';
@@ -49,27 +50,37 @@ const styles = StyleSheet.create({
}
});
-class RegisterView extends React.Component {
- static navigationOptions = ({ route, navigation }) => ({
- title: route.params?.title ?? 'Rocket.Chat',
+interface IProps {
+ navigation: StackNavigationProp;
+ route: RouteProp;
+ server: string;
+ Site_Name: string;
+ Gitlab_URL: string;
+ CAS_enabled: boolean;
+ CAS_login_url: string;
+ Accounts_CustomFields: string;
+ Accounts_EmailVerification: boolean;
+ Accounts_ManuallyApproveNewUsers: boolean;
+ showLoginButton: boolean;
+ loginRequest: Function;
+ theme: string;
+}
+
+class RegisterView extends React.Component {
+ private parsedCustomFields: any;
+ private usernameInput: any;
+ private passwordInput: any;
+ private emailInput: any;
+ private avatarUrl: any;
+
+ static navigationOptions = ({ route, navigation }: Partial) => ({
+ title: route?.params?.title ?? 'Rocket.Chat',
headerRight: () =>
});
- static propTypes = {
- navigation: PropTypes.object,
- server: PropTypes.string,
- Accounts_CustomFields: PropTypes.string,
- Accounts_EmailVerification: PropTypes.bool,
- Accounts_ManuallyApproveNewUsers: PropTypes.bool,
- theme: PropTypes.string,
- Site_Name: PropTypes.string,
- loginRequest: PropTypes.func,
- showLoginButton: PropTypes.bool
- };
-
- constructor(props) {
+ constructor(props: IProps) {
super(props);
- const customFields = {};
+ const customFields: any = {};
this.parsedCustomFields = {};
if (props.Accounts_CustomFields) {
try {
@@ -78,7 +89,7 @@ class RegisterView extends React.Component {
log(e);
}
}
- Object.keys(this.parsedCustomFields).forEach(key => {
+ Object.keys(this.parsedCustomFields).forEach((key: string) => {
if (this.parsedCustomFields[key].defaultValue) {
customFields[key] = this.parsedCustomFields[key].defaultValue;
}
@@ -101,7 +112,7 @@ class RegisterView extends React.Component {
valid = () => {
const { name, email, password, username, customFields } = this.state;
let requiredCheck = true;
- Object.keys(this.parsedCustomFields).forEach(key => {
+ Object.keys(this.parsedCustomFields).forEach((key: string) => {
if (this.parsedCustomFields[key].required) {
requiredCheck = requiredCheck && customFields[key] && Boolean(customFields[key].trim());
}
@@ -138,7 +149,7 @@ class RegisterView extends React.Component {
} else {
await loginRequest({ user: email, password });
}
- } catch (e) {
+ } catch (e: any) {
if (e.data?.errorType === 'username-invalid') {
return loginRequest({ user: email, password });
}
@@ -150,7 +161,7 @@ class RegisterView extends React.Component {
this.setState({ saving: false });
};
- openContract = route => {
+ openContract = (route: string) => {
const { server, theme } = this.props;
if (!server) {
return;
@@ -167,19 +178,20 @@ class RegisterView extends React.Component {
try {
return Object.keys(this.parsedCustomFields).map((key, index, array) => {
if (this.parsedCustomFields[key].type === 'select') {
- const options = this.parsedCustomFields[key].options.map(option => ({ label: option, value: option }));
+ const options = this.parsedCustomFields[key].options.map((option: string) => ({ label: option, value: option }));
return (
{
- const newValue = {};
+ const newValue: { [key: string]: string | number } = {};
newValue[key] = value;
this.setState({ customFields: { ...customFields, ...newValue } });
}}
value={customFields[key]}>
{
+ inputRef={(e: any) => {
+ // @ts-ignore
this[key] = e;
}}
placeholder={key}
@@ -193,20 +205,22 @@ class RegisterView extends React.Component {
return (
{
+ inputRef={(e: any) => {
+ // @ts-ignore
this[key] = e;
}}
key={key}
label={key}
placeholder={key}
value={customFields[key]}
- onChangeText={value => {
- const newValue = {};
+ onChangeText={(value: string) => {
+ const newValue: { [key: string]: string | number } = {};
newValue[key] = value;
this.setState({ customFields: { ...customFields, ...newValue } });
}}
onSubmitEditing={() => {
if (array.length - 1 > index) {
+ // @ts-ignore
return this[array[index + 1]].focus();
}
this.avatarUrl.focus();
@@ -234,7 +248,7 @@ class RegisterView extends React.Component {
containerStyle={styles.inputContainer}
placeholder={I18n.t('Name')}
returnKeyType='next'
- onChangeText={name => this.setState({ name })}
+ onChangeText={(name: string) => this.setState({ name })}
onSubmitEditing={() => {
this.usernameInput.focus();
}}
@@ -249,7 +263,7 @@ class RegisterView extends React.Component {
}}
placeholder={I18n.t('Username')}
returnKeyType='next'
- onChangeText={username => this.setState({ username })}
+ onChangeText={(username: string) => this.setState({ username })}
onSubmitEditing={() => {
this.emailInput.focus();
}}
@@ -265,7 +279,7 @@ class RegisterView extends React.Component {
placeholder={I18n.t('Email')}
returnKeyType='next'
keyboardType='email-address'
- onChangeText={email => this.setState({ email })}
+ onChangeText={(email: string) => this.setState({ email })}
onSubmitEditing={() => {
this.passwordInput.focus();
}}
@@ -281,7 +295,7 @@ class RegisterView extends React.Component {
placeholder={I18n.t('Password')}
returnKeyType='send'
secureTextEntry
- onChangeText={value => this.setState({ password: value })}
+ onChangeText={(value: string) => this.setState({ password: value })}
onSubmitEditing={this.submit}
testID='register-view-password'
theme={theme}
@@ -334,7 +348,7 @@ class RegisterView extends React.Component {
}
}
-const mapStateToProps = state => ({
+const mapStateToProps = (state: any) => ({
server: state.server.server,
Site_Name: state.settings.Site_Name,
Gitlab_URL: state.settings.API_Gitlab_URL,
@@ -346,8 +360,8 @@ const mapStateToProps = state => ({
showLoginButton: getShowLoginButton(state)
});
-const mapDispatchToProps = dispatch => ({
- loginRequest: params => dispatch(loginRequestAction(params))
+const mapDispatchToProps = (dispatch: any) => ({
+ loginRequest: (params: any) => dispatch(loginRequestAction(params))
});
export default connect(mapStateToProps, mapDispatchToProps)(withTheme(RegisterView));
diff --git a/app/views/RoomView/List/index.js b/app/views/RoomView/List/index.js
index c32490ba6..0db6c8b69 100644
--- a/app/views/RoomView/List/index.js
+++ b/app/views/RoomView/List/index.js
@@ -14,6 +14,7 @@ import { animateNextTransition } from '../../../utils/layoutAnimation';
import ActivityIndicator from '../../../containers/ActivityIndicator';
import { themes } from '../../../constants/colors';
import debounce from '../../../utils/debounce';
+import { compareServerVersion, methods } from '../../../lib/utils';
import List from './List';
import NavBottomFAB from './NavBottomFAB';
@@ -43,7 +44,8 @@ class ListContainer extends React.Component {
tunread: PropTypes.array,
ignored: PropTypes.array,
navigation: PropTypes.object,
- showMessageInMainThread: PropTypes.bool
+ showMessageInMainThread: PropTypes.bool,
+ serverVersion: PropTypes.string
};
constructor(props) {
@@ -131,7 +133,7 @@ class ListContainer extends React.Component {
query = async () => {
this.count += QUERY_SIZE;
- const { rid, tmid, showMessageInMainThread } = this.props;
+ const { rid, tmid, showMessageInMainThread, serverVersion } = this.props;
const db = database.active;
// handle servers with version < 3.0.0
@@ -172,7 +174,14 @@ class ListContainer extends React.Component {
if (tmid && this.thread) {
messages = [...messages, this.thread];
}
- messages = messages.filter(m => !m.t || !hideSystemMessages?.includes(m.t));
+
+ /**
+ * Since 3.16.0 server version, the backend don't response with messages if
+ * hide system message is enabled
+ */
+ if (compareServerVersion(serverVersion, '3.16.0', methods.lowerThan) || hideSystemMessages.length) {
+ messages = messages.filter(m => !m.t || !hideSystemMessages?.includes(m.t));
+ }
if (this.mounted) {
this.setState({ messages }, () => this.update());
diff --git a/app/views/RoomView/index.js b/app/views/RoomView/index.js
index 713be5615..4a58770f9 100644
--- a/app/views/RoomView/index.js
+++ b/app/views/RoomView/index.js
@@ -120,6 +120,7 @@ class RoomView extends React.Component {
Message_Read_Receipt_Enabled: PropTypes.bool,
Hide_System_Messages: PropTypes.array,
baseUrl: PropTypes.string,
+ serverVersion: PropTypes.string,
customEmojis: PropTypes.object,
isMasterDetail: PropTypes.bool,
theme: PropTypes.string,
@@ -1154,7 +1155,7 @@ class RoomView extends React.Component {
render() {
console.count(`${this.constructor.name}.render calls`);
const { room, reactionsModalVisible, selectedMessage, loading, reacting, showingBlockingLoader } = this.state;
- const { user, baseUrl, theme, navigation, Hide_System_Messages, width, height } = this.props;
+ const { user, baseUrl, theme, navigation, Hide_System_Messages, width, height, serverVersion } = this.props;
const { rid, t, sysMes, bannerClosed, announcement } = room;
return (
@@ -1182,6 +1183,7 @@ class RoomView extends React.Component {
navigation={navigation}
hideSystemMessages={Array.isArray(sysMes) ? sysMes : Hide_System_Messages}
showMessageInMainThread={user.showMessageInMainThread}
+ serverVersion={serverVersion}
/>
{this.renderFooter()}
{this.renderActions()}
@@ -1220,6 +1222,7 @@ const mapStateToProps = state => ({
Message_TimeFormat: state.settings.Message_TimeFormat,
customEmojis: state.customEmojis,
baseUrl: state.server.server,
+ serverVersion: state.server.version,
Message_Read_Receipt_Enabled: state.settings.Message_Read_Receipt_Enabled,
Hide_System_Messages: state.settings.Hide_System_Messages
});
diff --git a/app/views/RoomsListView/index.js b/app/views/RoomsListView/index.js
index 41da6dd80..518e10c48 100644
--- a/app/views/RoomsListView/index.js
+++ b/app/views/RoomsListView/index.js
@@ -613,6 +613,8 @@ class RoomsListView extends React.Component {
isRead = item => RocketChat.isRead(item);
+ isSwipeEnabled = item => !(item?.search || item?.joinCodeRequired || item?.outside);
+
getUserPresence = uid => RocketChat.getUserPresence(uid);
getUidDirectMessage = room => RocketChat.getUidDirectMessage(room);
@@ -928,6 +930,7 @@ class RoomsListView extends React.Component {
displayMode
} = this.props;
const id = this.getUidDirectMessage(item);
+ const swipeEnabled = this.isSwipeEnabled(item);
return (
diff --git a/app/views/SendEmailConfirmationView.tsx b/app/views/SendEmailConfirmationView.tsx
new file mode 100644
index 000000000..892673acc
--- /dev/null
+++ b/app/views/SendEmailConfirmationView.tsx
@@ -0,0 +1,94 @@
+import React, { useEffect, useState } from 'react';
+import { StackNavigationProp } from '@react-navigation/stack';
+
+import TextInput from '../containers/TextInput';
+import Button from '../containers/Button';
+import { showErrorAlert } from '../utils/info';
+import isValidEmail from '../utils/isValidEmail';
+import I18n from '../i18n';
+import RocketChat from '../lib/rocketchat';
+import { useTheme } from '../theme';
+import FormContainer, { FormContainerInner } from '../containers/FormContainer';
+import log, { events, logEvent } from '../utils/log';
+import sharedStyles from './Styles';
+
+interface ISendEmailConfirmationView {
+ navigation: StackNavigationProp;
+ route: {
+ params: {
+ user?: string;
+ };
+ };
+}
+
+const SendEmailConfirmationView = ({ navigation, route }: ISendEmailConfirmationView): JSX.Element => {
+ const [email, setEmail] = useState('');
+ const [invalidEmail, setInvalidEmail] = useState(true);
+ const [isFetching, setIsFetching] = useState(false);
+
+ const { theme } = useTheme();
+
+ const validate = (val: string) => {
+ const isInvalidEmail = !isValidEmail(val);
+ setEmail(val);
+ setInvalidEmail(isInvalidEmail);
+ };
+
+ const resendConfirmationEmail = async () => {
+ logEvent(events.SEC_SEND_EMAIL_CONFIRMATION);
+ if (invalidEmail || !email) {
+ return;
+ }
+ try {
+ setIsFetching(true);
+ const result = await RocketChat.sendConfirmationEmail(email);
+ if (result.success) {
+ navigation.pop();
+ showErrorAlert(I18n.t('Verify_email_desc'));
+ }
+ } catch (e: any) {
+ log(e);
+ const msg = e?.data?.error || I18n.t('There_was_an_error_while_action', { action: I18n.t('sending_email_confirmation') });
+ showErrorAlert(msg, I18n.t('Alert'));
+ }
+ setIsFetching(false);
+ };
+
+ useEffect(() => {
+ navigation.setOptions({
+ title: 'Rocket.Chat'
+ });
+ if (route.params?.user) {
+ validate(route.params.user);
+ }
+ }, []);
+
+ return (
+
+
+ validate(email)}
+ onSubmitEditing={resendConfirmationEmail}
+ testID='send-email-confirmation-view-email'
+ containerStyle={sharedStyles.inputLastChild}
+ theme={theme}
+ value={email}
+ />
+
+
+
+ );
+};
+export default SendEmailConfirmationView;
diff --git a/app/views/SettingsView/index.js b/app/views/SettingsView/index.tsx
similarity index 90%
rename from app/views/SettingsView/index.js
rename to app/views/SettingsView/index.tsx
index 897d86a6e..02c17169b 100644
--- a/app/views/SettingsView/index.js
+++ b/app/views/SettingsView/index.tsx
@@ -1,9 +1,9 @@
import React from 'react';
import { Clipboard, Linking, Share } from 'react-native';
-import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import FastImage from '@rocket.chat/react-native-fast-image';
import CookieManager from '@react-native-cookies/cookies';
+import { StackNavigationProp } from '@react-navigation/stack';
import { logout as logoutAction } from '../../actions/login';
import { selectServerRequest as selectServerRequestAction } from '../../actions/server';
@@ -29,8 +29,25 @@ import database from '../../lib/database';
import { isFDroidBuild } from '../../constants/environment';
import { getUserSelector } from '../../selectors/login';
-class SettingsView extends React.Component {
- static navigationOptions = ({ navigation, isMasterDetail }) => ({
+interface IProps {
+ navigation: StackNavigationProp;
+ server: {
+ version: string;
+ server: string;
+ };
+ theme: string;
+ isMasterDetail: boolean;
+ logout: Function;
+ selectServerRequest: Function;
+ user: {
+ roles: [];
+ id: string;
+ };
+ appStart: Function;
+}
+
+class SettingsView extends React.Component {
+ static navigationOptions = ({ navigation, isMasterDetail }: Partial) => ({
headerLeft: () =>
isMasterDetail ? (
@@ -40,26 +57,12 @@ class SettingsView extends React.Component {
title: I18n.t('Settings')
});
- static propTypes = {
- navigation: PropTypes.object,
- server: PropTypes.object,
- theme: PropTypes.string,
- isMasterDetail: PropTypes.bool,
- logout: PropTypes.func.isRequired,
- selectServerRequest: PropTypes.func,
- user: PropTypes.shape({
- roles: PropTypes.array,
- id: PropTypes.string
- }),
- appStart: PropTypes.func
- };
-
checkCookiesAndLogout = async () => {
const { logout, user } = this.props;
const db = database.servers;
const usersCollection = db.get('users');
try {
- const userRecord = await usersCollection.find(user.id);
+ const userRecord: any = await usersCollection.find(user.id);
if (userRecord.isFromWebView) {
showConfirmationAlert({
title: I18n.t('Clear_cookies_alert'),
@@ -84,6 +87,7 @@ class SettingsView extends React.Component {
handleLogout = () => {
logEvent(events.SE_LOG_OUT);
+ // @ts-ignore
showConfirmationAlert({
message: I18n.t('You_will_be_logged_out_of_this_application'),
confirmationText: I18n.t('Logout'),
@@ -93,6 +97,7 @@ class SettingsView extends React.Component {
handleClearCache = () => {
logEvent(events.SE_CLEAR_LOCAL_SERVER_CACHE);
+ /* @ts-ignore */
showConfirmationAlert({
message: I18n.t('This_will_clear_all_your_offline_data'),
confirmationText: I18n.t('Clear'),
@@ -112,7 +117,8 @@ class SettingsView extends React.Component {
});
};
- navigateToScreen = screen => {
+ navigateToScreen = (screen: string) => {
+ /* @ts-ignore */
logEvent(events[`SE_GO_${screen.replace('View', '').toUpperCase()}`]);
const { navigation } = this.props;
navigation.navigate(screen);
@@ -160,7 +166,7 @@ class SettingsView extends React.Component {
this.saveToClipboard(getReadableVersion);
};
- saveToClipboard = async content => {
+ saveToClipboard = async (content: string) => {
await Clipboard.setString(content);
EventEmitter.emit(LISTENER, { message: I18n.t('Copied_to_clipboard') });
};
@@ -293,16 +299,16 @@ class SettingsView extends React.Component {
}
}
-const mapStateToProps = state => ({
+const mapStateToProps = (state: any) => ({
server: state.server,
user: getUserSelector(state),
isMasterDetail: state.app.isMasterDetail
});
-const mapDispatchToProps = dispatch => ({
+const mapDispatchToProps = (dispatch: any) => ({
logout: () => dispatch(logoutAction()),
- selectServerRequest: params => dispatch(selectServerRequestAction(params)),
- appStart: params => dispatch(appStartAction(params))
+ selectServerRequest: (params: any) => dispatch(selectServerRequestAction(params)),
+ appStart: (params: any) => dispatch(appStartAction(params))
});
export default connect(mapStateToProps, mapDispatchToProps)(withTheme(SettingsView));
diff --git a/app/views/UserPreferencesView/index.js b/app/views/UserPreferencesView/index.js
index 573ab58f9..476c49a7d 100644
--- a/app/views/UserPreferencesView/index.js
+++ b/app/views/UserPreferencesView/index.js
@@ -1,46 +1,75 @@
-import React from 'react';
+import React, { useEffect, useState } from 'react';
+import { Switch } from 'react-native';
import PropTypes from 'prop-types';
+import { useSelector } from 'react-redux';
import I18n from '../../i18n';
-import { events, logEvent } from '../../utils/log';
+import log, { logEvent, events } from '../../utils/log';
import SafeAreaView from '../../containers/SafeAreaView';
import StatusBar from '../../containers/StatusBar';
import * as List from '../../containers/List';
+import { SWITCH_TRACK_COLOR } from '../../constants/colors';
+import { getUserSelector } from '../../selectors/login';
+import RocketChat from '../../lib/rocketchat';
-class UserPreferencesView extends React.Component {
- static navigationOptions = () => ({
- title: I18n.t('Preferences')
- });
+const UserPreferencesView = ({ navigation }) => {
+ const user = useSelector(state => getUserSelector(state));
+ const [enableParser, setEnableParser] = useState(user.enableMessageParserEarlyAdoption);
- static propTypes = {
- navigation: PropTypes.object
- };
+ useEffect(() => {
+ navigation.setOptions({
+ title: I18n.t('Preferences')
+ });
+ }, []);
- navigateToScreen = (screen, params) => {
+ const navigateToScreen = (screen, params) => {
logEvent(events[`SE_GO_${screen.replace('View', '').toUpperCase()}`]);
- const { navigation } = this.props;
navigation.navigate(screen, params);
};
- render() {
- return (
-
-
-
-
-
- this.navigateToScreen('UserNotificationPrefView')}
- showActionIndicator
- testID='preferences-view-notifications'
- />
-
-
-
-
- );
- }
-}
+ const toggleMessageParser = async value => {
+ try {
+ await RocketChat.saveUserPreferences({ id: user.id, enableMessageParserEarlyAdoption: value });
+ setEnableParser(value);
+ } catch (e) {
+ log(e);
+ }
+ };
+
+ const renderMessageParserSwitch = () => (
+
+ );
+
+ return (
+
+
+
+
+
+ navigateToScreen('UserNotificationPrefView')}
+ showActionIndicator
+ testID='preferences-view-notifications'
+ />
+
+
+
+
+ renderMessageParserSwitch()}
+ />
+
+
+
+
+ );
+};
+
+UserPreferencesView.propTypes = {
+ navigation: PropTypes.object
+};
export default UserPreferencesView;
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 8b21c0edf..675a4027b 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -4,36 +4,40 @@ PODS:
- React-Core
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- - EXAppleAuthentication (2.2.1):
+ - EXAppleAuthentication (3.2.1):
- UMCore
- - EXAV (8.2.1):
+ - EXAV (9.2.3):
+ - ExpoModulesCore
- UMCore
- - UMFileSystemInterface
- - UMPermissionsInterface
- - EXConstants (9.1.1):
- - UMConstantsInterface
+ - EXConstants (11.0.2):
+ - ExpoModulesCore
- UMCore
- - EXFileSystem (9.0.1):
+ - EXFileSystem (11.1.3):
+ - ExpoModulesCore
- UMCore
- - UMFileSystemInterface
- - EXHaptics (8.2.1):
+ - EXHaptics (10.1.0):
- UMCore
- - EXImageLoader (1.1.1):
+ - EXImageLoader (2.2.0):
+ - ExpoModulesCore
- React-Core
- UMCore
- - UMImageLoaderInterface
- - EXKeepAwake (8.2.1):
+ - EXKeepAwake (9.2.0):
- UMCore
- - EXLocalAuthentication (9.2.0):
- - UMConstantsInterface
+ - EXLocalAuthentication (11.1.1):
- UMCore
- - EXPermissions (9.0.1):
+ - ExpoModulesCore (0.2.0):
+ - ExpoModulesCore/Core (= 0.2.0)
+ - ExpoModulesCore/Interfaces (= 0.2.0)
- UMCore
- - UMPermissionsInterface
- - EXVideoThumbnails (5.1.0):
+ - ExpoModulesCore/Core (0.2.0):
- UMCore
- - UMFileSystemInterface
- - EXWebBrowser (8.3.1):
+ - ExpoModulesCore/Interfaces (0.2.0):
+ - ExpoModulesCore/Core
+ - UMCore
+ - EXVideoThumbnails (5.2.1):
+ - ExpoModulesCore
+ - UMCore
+ - EXWebBrowser (9.2.0):
- UMCore
- FBLazyVector (0.64.2)
- FBReactNativeSpec (0.64.2):
@@ -584,23 +588,14 @@ PODS:
- SDWebImage/Core (~> 5.5)
- simdjson (0.9.6-fix2)
- TOCropViewController (2.5.3)
- - UMAppLoader (1.2.0)
- - UMBarCodeScannerInterface (5.2.1)
- - UMCameraInterface (5.2.1)
- - UMConstantsInterface (5.2.1)
- - UMCore (5.3.0)
- - UMFaceDetectorInterface (5.2.1)
- - UMFileSystemInterface (5.2.1)
- - UMFontInterface (5.2.1)
- - UMImageLoaderInterface (5.2.1)
- - UMPermissionsInterface (5.2.1):
- - UMCore
- - UMReactNativeAdapter (5.4.0):
+ - UMAppLoader (2.2.0)
+ - UMCore (7.1.2)
+ - UMReactNativeAdapter (6.3.9):
+ - ExpoModulesCore
- React-Core
- UMCore
- - UMFontInterface
- - UMSensorsInterface (5.2.1)
- - UMTaskManagerInterface (5.2.1)
+ - UMTaskManagerInterface (6.2.0):
+ - UMCore
- WatermelonDB (0.23.0):
- React
- React-jsi
@@ -619,7 +614,7 @@ DEPENDENCIES:
- EXImageLoader (from `../node_modules/expo-image-loader/ios`)
- EXKeepAwake (from `../node_modules/expo-keep-awake/ios`)
- EXLocalAuthentication (from `../node_modules/expo-local-authentication/ios`)
- - EXPermissions (from `../node_modules/expo-permissions/ios`)
+ - ExpoModulesCore (from `../node_modules/expo-modules-core/ios`)
- EXVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`)
- EXWebBrowser (from `../node_modules/expo-web-browser/ios`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
@@ -714,17 +709,8 @@ DEPENDENCIES:
- RNVectorIcons (from `../node_modules/react-native-vector-icons`)
- "simdjson (from `../node_modules/@nozbe/simdjson`)"
- UMAppLoader (from `../node_modules/unimodules-app-loader/ios`)
- - UMBarCodeScannerInterface (from `../node_modules/unimodules-barcode-scanner-interface/ios`)
- - UMCameraInterface (from `../node_modules/unimodules-camera-interface/ios`)
- - UMConstantsInterface (from `../node_modules/unimodules-constants-interface/ios`)
- "UMCore (from `../node_modules/@unimodules/core/ios`)"
- - UMFaceDetectorInterface (from `../node_modules/unimodules-face-detector-interface/ios`)
- - UMFileSystemInterface (from `../node_modules/unimodules-file-system-interface/ios`)
- - UMFontInterface (from `../node_modules/unimodules-font-interface/ios`)
- - UMImageLoaderInterface (from `../node_modules/unimodules-image-loader-interface/ios`)
- - UMPermissionsInterface (from `../node_modules/unimodules-permissions-interface/ios`)
- "UMReactNativeAdapter (from `../node_modules/@unimodules/react-native-adapter/ios`)"
- - UMSensorsInterface (from `../node_modules/unimodules-sensors-interface/ios`)
- UMTaskManagerInterface (from `../node_modules/unimodules-task-manager-interface/ios`)
- "WatermelonDB (from `../node_modules/@nozbe/watermelondb`)"
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
@@ -784,8 +770,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/expo-keep-awake/ios"
EXLocalAuthentication:
:path: "../node_modules/expo-local-authentication/ios"
- EXPermissions:
- :path: "../node_modules/expo-permissions/ios"
+ ExpoModulesCore:
+ :path: "../node_modules/expo-modules-core/ios"
EXVideoThumbnails:
:path: "../node_modules/expo-video-thumbnails/ios"
EXWebBrowser:
@@ -926,28 +912,10 @@ EXTERNAL SOURCES:
:path: "../node_modules/@nozbe/simdjson"
UMAppLoader:
:path: "../node_modules/unimodules-app-loader/ios"
- UMBarCodeScannerInterface:
- :path: "../node_modules/unimodules-barcode-scanner-interface/ios"
- UMCameraInterface:
- :path: "../node_modules/unimodules-camera-interface/ios"
- UMConstantsInterface:
- :path: "../node_modules/unimodules-constants-interface/ios"
UMCore:
:path: "../node_modules/@unimodules/core/ios"
- UMFaceDetectorInterface:
- :path: "../node_modules/unimodules-face-detector-interface/ios"
- UMFileSystemInterface:
- :path: "../node_modules/unimodules-file-system-interface/ios"
- UMFontInterface:
- :path: "../node_modules/unimodules-font-interface/ios"
- UMImageLoaderInterface:
- :path: "../node_modules/unimodules-image-loader-interface/ios"
- UMPermissionsInterface:
- :path: "../node_modules/unimodules-permissions-interface/ios"
UMReactNativeAdapter:
:path: "../node_modules/@unimodules/react-native-adapter/ios"
- UMSensorsInterface:
- :path: "../node_modules/unimodules-sensors-interface/ios"
UMTaskManagerInterface:
:path: "../node_modules/unimodules-task-manager-interface/ios"
WatermelonDB:
@@ -965,17 +933,17 @@ SPEC CHECKSUMS:
BugsnagReactNative: a97b3132c1854fd7bf92350fabd505e3ebdd7829
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
- EXAppleAuthentication: 5b3da71bada29e2423d8ea27e5538ef0d75aba62
- EXAV: 86344030966e0da7e00556fbb97269d9ad16071d
- EXConstants: f907b3b6ce16e20d1750f22af1e095e924574bcb
- EXFileSystem: 76875135b61708b9afa7e6a89b72a60ba0fdfa20
- EXHaptics: 5428b344a216ca5d9df6ca8f65720b2a1ad9f109
- EXImageLoader: 02ca02c9cd5cc8a97b423207a73a791e0a86bea5
- EXKeepAwake: 8b0f68242f036b971f9f8976341823cbe6f50812
- EXLocalAuthentication: 985c65e08a6eb84f8f98b51f7435df138b18b9e8
- EXPermissions: 80ac3acbdb145930079810fe5b08c022b3428aa8
- EXVideoThumbnails: cd257fc6e07884a704a5674d362a6410933acb68
- EXWebBrowser: d37a5ffdea1b65947352bc001dd9f732463725d4
+ EXAppleAuthentication: e8c537fcbe80670dd76fde7a07acb94af70ada00
+ EXAV: 67bcc1d0afeb1fab854b206c84b9f2afbd61d0cd
+ EXConstants: 4cb52b6d8f636c767104a44bf7db3873e9c01a6f
+ EXFileSystem: 0a04aba8da751b9ac954065911bcf166503f8267
+ EXHaptics: 6dc4307ab0794fe7a87ec8d7d1c299cf103d6cb3
+ EXImageLoader: d3531a3fe530b22925c19977cb53bb43e3821fe6
+ EXKeepAwake: f4105ef469be7b283f66ce2d7234bb71ac80cd26
+ EXLocalAuthentication: 88a1a69ea66c4934387d1eb503628170c853caef
+ ExpoModulesCore: 2734852616127a6c1fc23012197890a6f3763dc7
+ EXVideoThumbnails: 442c3abadb51a81551a3b53705b7560de390e6f7
+ EXWebBrowser: 76783ba5dcb8699237746ecf41a9643d428a4cc5
FBLazyVector: e686045572151edef46010a6f819ade377dfeb4b
FBReactNativeSpec: 110d69378fce79af38271c39894b59fec7890221
Firebase: 919186c8e119dd9372a45fd1dd17a8a942bc1892
@@ -1071,19 +1039,10 @@ SPEC CHECKSUMS:
SDWebImageWebPCoder: 36f8f47bd9879a8aea6044765c1351120fd8e3a8
simdjson: 85016870cd17207312b718ef6652eb6a1cd6a2b0
TOCropViewController: 20a14b6a7a098308bf369e7c8d700dc983a974e6
- UMAppLoader: 61049c8d55590b74e9ae1d5429bf68d96b4a2528
- UMBarCodeScannerInterface: e5e4c87797d3d01214e25cd1618866caf5d4f17f
- UMCameraInterface: 415ac060034edecacdbbaa739c223e3f276e0056
- UMConstantsInterface: 1a52f2d884c95e8829439da13e36b7669a1a8fb4
- UMCore: d98083b522b08c0a8ba3992bc263c624ae5d887c
- UMFaceDetectorInterface: 67c6c82451338da01a4bc00ec46365a2a8ea9057
- UMFileSystemInterface: 303d696ede28102a7e11d111808bd2ed2c5eb62f
- UMFontInterface: 6edf1ee8bc55d2030766f8cf0a7b20a5d5a913b0
- UMImageLoaderInterface: 9cdbf3bab6a513bddd88505cb2340fe02d6a11c0
- UMPermissionsInterface: 019170ad655f464e3f8d23d2a8bcbda2e645cde4
- UMReactNativeAdapter: 538efe92e781b5d7678cf95b34c46f2d0989a557
- UMSensorsInterface: cb5bf31d52c4349f0ff9e3c049bbe4df0d80d383
- UMTaskManagerInterface: 80653f25c55d9e6d79d6a0a65589fa213feaee11
+ UMAppLoader: 21af63390e55c82e037fb9752d93114a80ecf16e
+ UMCore: ce3a4faa010239063b8343895b29a6d97b01069d
+ UMReactNativeAdapter: d03cefd0e4e4179ab8c490408589f1c8a6c8b785
+ UMTaskManagerInterface: 2be431101b73604e64fbfffcf759336f9d8fccbb
WatermelonDB: 577c61fceff16e9f9103b59d14aee4850c0307b6
Yoga: 575c581c63e0d35c9a83f4b46d01d63abc1100ac
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
diff --git a/package.json b/package.json
index b5b5f1aad..fbc64341a 100644
--- a/package.json
+++ b/package.json
@@ -47,23 +47,25 @@
"@react-navigation/drawer": "5.12.5",
"@react-navigation/native": "5.9.4",
"@react-navigation/stack": "5.14.5",
+ "@rocket.chat/message-parser": "0.30.0",
"@rocket.chat/react-native-fast-image": "^8.2.0",
"@rocket.chat/sdk": "RocketChat/Rocket.Chat.js.SDK#mobile",
"@rocket.chat/ui-kit": "0.13.0",
+ "@types/url-parse": "^1.4.4",
"bytebuffer": "^5.0.1",
"color2k": "1.2.4",
"commonmark": "git+https://github.com/RocketChat/commonmark.js.git",
"commonmark-react-renderer": "git+https://github.com/RocketChat/commonmark-react-renderer.git",
"dequal": "^2.0.2",
"ejson": "2.2.1",
- "expo-apple-authentication": "^2.2.1",
- "expo-av": "8.2.1",
- "expo-file-system": "9.0.1",
- "expo-haptics": "8.2.1",
- "expo-keep-awake": "8.2.1",
- "expo-local-authentication": "9.2.0",
- "expo-video-thumbnails": "5.1.0",
- "expo-web-browser": "8.3.1",
+ "expo-apple-authentication": "3.2.1",
+ "expo-av": "9.2.3",
+ "expo-file-system": "11.1.3",
+ "expo-haptics": "10.1.0",
+ "expo-keep-awake": "9.2.0",
+ "expo-local-authentication": "11.1.1",
+ "expo-video-thumbnails": "5.2.1",
+ "expo-web-browser": "9.2.0",
"hoist-non-react-statics": "3.3.2",
"i18n-js": "3.8.0",
"js-base64": "3.6.1",
@@ -112,7 +114,7 @@
"react-native-simple-crypto": "RocketChat/react-native-simple-crypto#0.5.0",
"react-native-slowlog": "^1.0.2",
"react-native-ui-lib": "RocketChat/react-native-ui-lib#minor-improvements",
- "react-native-unimodules": "0.10.1",
+ "react-native-unimodules": "^0.14.8",
"react-native-vector-icons": "8.1.0",
"react-native-webview": "10.3.2",
"react-redux": "7.2.4",
diff --git a/patches/expo-av+8.2.1.patch b/patches/expo-av+9.2.3.patch
similarity index 100%
rename from patches/expo-av+8.2.1.patch
rename to patches/expo-av+9.2.3.patch
diff --git a/storybook/stories/NewMarkdown.js b/storybook/stories/NewMarkdown.js
new file mode 100644
index 000000000..17684bb91
--- /dev/null
+++ b/storybook/stories/NewMarkdown.js
@@ -0,0 +1,627 @@
+/* eslint-disable import/no-extraneous-dependencies */
+import React from 'react';
+import { StyleSheet, View } from 'react-native';
+import { storiesOf } from '@storybook/react-native';
+
+import NewMarkdown from '../../app/containers/markdown/new';
+import { themes } from '../../app/constants/colors';
+
+const stories = storiesOf('NewMarkdown', module);
+
+const theme = 'light';
+
+const styles = StyleSheet.create({
+ container: {
+ marginHorizontal: 15,
+ backgroundColor: themes[theme].backgroundColor,
+ marginVertical: 50
+ },
+ separator: {
+ marginHorizontal: 10,
+ marginVertical: 10
+ }
+});
+
+const getCustomEmoji = content => {
+ const customEmoji = {
+ marioparty: { name: content, extension: 'gif' },
+ nyan_rocket: { name: content, extension: 'png' }
+ }[content];
+ return customEmoji;
+};
+const baseUrl = 'https://open.rocket.chat';
+
+const simpleTextMsg = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'This is Rocket.Chat'
+ }
+ ]
+ }
+];
+
+const longTextMsg = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value:
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'
+ }
+ ]
+ }
+];
+
+const lineBreakMsg = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'a'
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: 'b'
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: 'c'
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: ''
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: 'd'
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: ''
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: ''
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: 'e'
+ }
+ ]
+ }
+];
+
+const sequentialEmptySpacesMsg = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'a b c'
+ }
+ ]
+ }
+];
+
+const boldOrUnderscoreMsg = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'BOLD',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'This is bold'
+ }
+ ]
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: ' and '
+ },
+ {
+ type: 'ITALIC',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'this is italic'
+ }
+ ]
+ }
+ ]
+ }
+];
+
+stories.add('Text', () => (
+
+
+
+
+
+
+
+));
+
+const allMentionTokens = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'MENTION_USER',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'rocket.cat'
+ }
+ }
+ ]
+ }
+];
+
+const multipleMentionTokens = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'MENTION_USER',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'name'
+ }
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: ' '
+ },
+ {
+ type: 'MENTION_USER',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'rocket.cat'
+ }
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: ' '
+ },
+ {
+ type: 'MENTION_USER',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'here'
+ }
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: ' '
+ },
+ {
+ type: 'MENTION_USER',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'all'
+ }
+ }
+ ]
+ }
+];
+
+const allMentions = [
+ {
+ _id: 'rocket.cat',
+ username: 'rocket.cat'
+ }
+];
+
+const multipleMentions = [
+ {
+ _id: 'name',
+ username: 'name'
+ },
+ {
+ _id: 'rocket.cat',
+ username: 'rocket.cat'
+ },
+ {
+ _id: 'here',
+ username: 'here'
+ },
+ {
+ _id: 'all',
+ username: 'all'
+ }
+];
+
+stories.add('Mentions', () => (
+
+ {}} style={[]} />
+ {}}
+ style={[]}
+ username='rocket.cat'
+ />
+
+));
+
+const channelTokens = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'MENTION_CHANNEL',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'text_channel'
+ }
+ },
+ {
+ type: 'PLAIN_TEXT',
+ value: ' and '
+ },
+ {
+ type: 'MENTION_CHANNEL',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'not_a_channel'
+ }
+ }
+ ]
+ }
+];
+
+const channelMention = [
+ {
+ _id: 'text_channel',
+ name: 'text_channel'
+ }
+];
+
+stories.add('Hashtag', () => (
+
+ {}} />
+
+));
+
+const bigEmojiTokens = [
+ {
+ type: 'BIG_EMOJI',
+ value: [
+ {
+ type: 'EMOJI',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'green_heart'
+ }
+ },
+ {
+ type: 'EMOJI',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'joy'
+ }
+ },
+ {
+ type: 'EMOJI',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'grin'
+ }
+ }
+ ]
+ }
+];
+
+const emojiTokens = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'EMOJI',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'rocket'
+ }
+ },
+ {
+ type: 'EMOJI',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'facepalm'
+ }
+ },
+ {
+ type: 'EMOJI',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'nyan_rocket'
+ }
+ },
+ {
+ type: 'EMOJI',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'marioparty'
+ }
+ }
+ ]
+ }
+];
+
+stories.add('Emoji', () => (
+
+
+
+
+));
+
+const blockQuoteTokens = [
+ {
+ type: 'QUOTE',
+ value: [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'Rocket.Chat to the moon'
+ }
+ ]
+ }
+ ]
+ }
+];
+
+stories.add('Block quote', () => (
+
+
+
+));
+
+const rocketChatLink = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'LINK',
+ value: {
+ src: {
+ type: 'PLAIN_TEXT',
+ value: 'https://rocket.chat'
+ },
+ label: {
+ type: 'PLAIN_TEXT',
+ value: 'https://rocket.chat'
+ }
+ }
+ }
+ ]
+ }
+];
+
+const markdownLink = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'LINK',
+ value: {
+ src: {
+ type: 'PLAIN_TEXT',
+ value: 'https://rocket.chat'
+ },
+ label: {
+ type: 'PLAIN_TEXT',
+ value: 'Markdown link'
+ }
+ }
+ }
+ ]
+ }
+];
+
+stories.add('Links', () => (
+
+
+
+
+));
+
+stories.add('Headers', () => (
+
+
+
+
+
+
+
+
+));
+
+const inlineCodeToken = [
+ {
+ type: 'PARAGRAPH',
+ value: [
+ {
+ type: 'INLINE_CODE',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'inline code'
+ }
+ }
+ ]
+ }
+];
+
+const multilineCodeToken = [
+ {
+ type: 'CODE',
+ language: 'none',
+ value: [
+ {
+ type: 'CODE_LINE',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'Multi line '
+ }
+ },
+ {
+ type: 'CODE_LINE',
+ value: {
+ type: 'PLAIN_TEXT',
+ value: 'Code'
+ }
+ }
+ ]
+ }
+];
+
+stories.add('Code', () => (
+
+
+
+
+));
+
+const unorederedListToken = [
+ {
+ type: 'UNORDERED_LIST',
+ value: [
+ {
+ type: 'LIST_ITEM',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'Open Source'
+ }
+ ]
+ },
+ {
+ type: 'LIST_ITEM',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'Rocket.Chat'
+ }
+ ]
+ }
+ ]
+ }
+];
+
+const orderedListToken = [
+ {
+ type: 'ORDERED_LIST',
+ value: [
+ {
+ type: 'LIST_ITEM',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'Open Source'
+ }
+ ]
+ },
+ {
+ type: 'LIST_ITEM',
+ value: [
+ {
+ type: 'PLAIN_TEXT',
+ value: 'Rocket.Chat'
+ }
+ ]
+ }
+ ]
+ }
+];
+
+stories.add('Lists', () => (
+
+
+
+
+));
diff --git a/storybook/stories/index.js b/storybook/stories/index.js
index 4ff6450b0..c8209d6f6 100644
--- a/storybook/stories/index.js
+++ b/storybook/stories/index.js
@@ -12,6 +12,7 @@ import './HeaderButtons';
import './UnreadBadge';
import '../../app/views/ThreadMessagesView/Item.stories.js';
import './Avatar';
+import './NewMarkdown';
import '../../app/containers/BackgroundContainer/index.stories.js';
import '../../app/containers/RoomHeader/RoomHeader.stories.js';
import '../../app/views/RoomView/LoadMore/LoadMore.stories';
diff --git a/yarn.lock b/yarn.lock
index 8cff8c970..f4ad938a8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -23,7 +23,7 @@
dependencies:
"@babel/highlight" "^7.8.3"
-"@babel/code-frame@^7.10.4":
+"@babel/code-frame@^7.10.4", "@babel/code-frame@~7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
@@ -37,6 +37,11 @@
dependencies:
"@babel/highlight" "^7.14.5"
+"@babel/compat-data@^7.12.13", "@babel/compat-data@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176"
+ integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==
+
"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea"
@@ -47,6 +52,28 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08"
integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==
+"@babel/core@7.9.0":
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e"
+ integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.9.0"
+ "@babel/helper-module-transforms" "^7.9.0"
+ "@babel/helpers" "^7.9.0"
+ "@babel/parser" "^7.9.0"
+ "@babel/template" "^7.8.6"
+ "@babel/traverse" "^7.9.0"
+ "@babel/types" "^7.9.0"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
"@babel/core@^7.0.0", "@babel/core@^7.1.0":
version "7.9.6"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376"
@@ -177,6 +204,15 @@
jsesc "^2.5.1"
source-map "^0.5.0"
+"@babel/generator@^7.15.4", "@babel/generator@^7.9.0":
+ version "7.15.8"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1"
+ integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==
+ dependencies:
+ "@babel/types" "^7.15.6"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
"@babel/generator@^7.9.6":
version "7.9.6"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43"
@@ -194,6 +230,13 @@
dependencies:
"@babel/types" "^7.14.5"
+"@babel/helper-annotate-as-pure@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835"
+ integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-annotate-as-pure@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee"
@@ -234,6 +277,16 @@
"@babel/helper-annotate-as-pure" "^7.8.3"
"@babel/types" "^7.9.0"
+"@babel/helper-compilation-targets@^7.12.17", "@babel/helper-compilation-targets@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9"
+ integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==
+ dependencies:
+ "@babel/compat-data" "^7.15.0"
+ "@babel/helper-validator-option" "^7.14.5"
+ browserslist "^4.16.6"
+ semver "^6.3.0"
+
"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"
@@ -244,6 +297,18 @@
browserslist "^4.16.6"
semver "^6.3.0"
+"@babel/helper-create-class-features-plugin@^7.12.13", "@babel/helper-create-class-features-plugin@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e"
+ integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.15.4"
+ "@babel/helper-function-name" "^7.15.4"
+ "@babel/helper-member-expression-to-functions" "^7.15.4"
+ "@babel/helper-optimise-call-expression" "^7.15.4"
+ "@babel/helper-replace-supers" "^7.15.4"
+ "@babel/helper-split-export-declaration" "^7.15.4"
+
"@babel/helper-create-class-features-plugin@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz#8842ec495516dd1ed8f6c572be92ba78b1e9beef"
@@ -353,6 +418,15 @@
"@babel/template" "^7.14.5"
"@babel/types" "^7.14.5"
+"@babel/helper-function-name@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc"
+ integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.15.4"
+ "@babel/template" "^7.15.4"
+ "@babel/types" "^7.15.4"
+
"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5":
version "7.9.5"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
@@ -376,6 +450,13 @@
dependencies:
"@babel/types" "^7.14.5"
+"@babel/helper-get-function-arity@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b"
+ integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-get-function-arity@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
@@ -390,6 +471,13 @@
dependencies:
"@babel/types" "^7.14.5"
+"@babel/helper-hoist-variables@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df"
+ integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-member-expression-to-functions@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz#7cd04b57dfcf82fce9aeae7d4e4452fa31b8c7c4"
@@ -411,6 +499,13 @@
dependencies:
"@babel/types" "^7.14.5"
+"@babel/helper-member-expression-to-functions@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef"
+ integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-member-expression-to-functions@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
@@ -439,6 +534,13 @@
dependencies:
"@babel/types" "^7.14.5"
+"@babel/helper-module-imports@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f"
+ integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-module-transforms@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz#ca1f01fdb84e48c24d7506bb818c961f1da8805d"
@@ -480,6 +582,20 @@
"@babel/traverse" "^7.14.8"
"@babel/types" "^7.14.8"
+"@babel/helper-module-transforms@^7.15.4":
+ version "7.15.8"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2"
+ integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.15.4"
+ "@babel/helper-replace-supers" "^7.15.4"
+ "@babel/helper-simple-access" "^7.15.4"
+ "@babel/helper-split-export-declaration" "^7.15.4"
+ "@babel/helper-validator-identifier" "^7.15.7"
+ "@babel/template" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.6"
+
"@babel/helper-module-transforms@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5"
@@ -507,6 +623,13 @@
dependencies:
"@babel/types" "^7.14.5"
+"@babel/helper-optimise-call-expression@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171"
+ integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-optimise-call-expression@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9"
@@ -545,6 +668,15 @@
"@babel/helper-wrap-function" "^7.14.5"
"@babel/types" "^7.14.5"
+"@babel/helper-remap-async-to-generator@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f"
+ integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.15.4"
+ "@babel/helper-wrap-function" "^7.15.4"
+ "@babel/types" "^7.15.4"
+
"@babel/helper-replace-supers@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf"
@@ -565,6 +697,16 @@
"@babel/traverse" "^7.14.5"
"@babel/types" "^7.14.5"
+"@babel/helper-replace-supers@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a"
+ integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.15.4"
+ "@babel/helper-optimise-call-expression" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.4"
+
"@babel/helper-replace-supers@^7.8.6", "@babel/helper-replace-supers@^7.9.6":
version "7.9.6"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444"
@@ -597,6 +739,13 @@
dependencies:
"@babel/types" "^7.14.8"
+"@babel/helper-simple-access@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b"
+ integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-simple-access@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae"
@@ -612,6 +761,13 @@
dependencies:
"@babel/types" "^7.14.5"
+"@babel/helper-skip-transparent-expression-wrappers@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb"
+ integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-split-export-declaration@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1"
@@ -626,6 +782,13 @@
dependencies:
"@babel/types" "^7.14.5"
+"@babel/helper-split-export-declaration@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257"
+ integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==
+ dependencies:
+ "@babel/types" "^7.15.4"
+
"@babel/helper-split-export-declaration@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
@@ -648,12 +811,17 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz#32be33a756f29e278a0d644fa08a2c9e0f88a34c"
integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==
+"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7":
+ version "7.15.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
+ integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
+
"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
version "7.9.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==
-"@babel/helper-validator-option@^7.14.5":
+"@babel/helper-validator-option@^7.12.17", "@babel/helper-validator-option@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
@@ -668,6 +836,16 @@
"@babel/traverse" "^7.14.5"
"@babel/types" "^7.14.5"
+"@babel/helper-wrap-function@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7"
+ integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==
+ dependencies:
+ "@babel/helper-function-name" "^7.15.4"
+ "@babel/template" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.4"
+
"@babel/helpers@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044"
@@ -695,6 +873,15 @@
"@babel/traverse" "^7.14.8"
"@babel/types" "^7.14.8"
+"@babel/helpers@^7.9.0":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43"
+ integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==
+ dependencies:
+ "@babel/template" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.4"
+
"@babel/helpers@^7.9.6":
version "7.9.6"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580"
@@ -761,6 +948,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595"
integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==
+"@babel/parser@^7.15.4", "@babel/parser@^7.9.0":
+ version "7.15.8"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016"
+ integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==
+
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e"
@@ -770,6 +962,15 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
"@babel/plugin-proposal-optional-chaining" "^7.14.5"
+"@babel/plugin-proposal-async-generator-functions@^7.12.13":
+ version "7.15.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz#a3100f785fab4357987c4223ab1b02b599048403"
+ integrity sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-remap-async-to-generator" "^7.15.4"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+
"@babel/plugin-proposal-async-generator-functions@^7.14.7":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace"
@@ -787,7 +988,7 @@
"@babel/helper-create-class-features-plugin" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.7.0":
+"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.12.13", "@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.7.0":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e"
integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==
@@ -795,6 +996,14 @@
"@babel/helper-create-class-features-plugin" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
+"@babel/plugin-proposal-class-properties@~7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz#3d2ce350367058033c93c098e348161d6dc0d8c8"
+ integrity sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.12.13"
+
"@babel/plugin-proposal-class-static-block@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681"
@@ -813,7 +1022,7 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-decorators" "^7.14.5"
-"@babel/plugin-proposal-dynamic-import@^7.14.5":
+"@babel/plugin-proposal-dynamic-import@^7.12.17", "@babel/plugin-proposal-dynamic-import@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c"
integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==
@@ -829,7 +1038,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-export-default-from" "^7.8.3"
-"@babel/plugin-proposal-export-namespace-from@^7.14.5":
+"@babel/plugin-proposal-export-namespace-from@^7.12.13", "@babel/plugin-proposal-export-namespace-from@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76"
integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==
@@ -837,7 +1046,7 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-"@babel/plugin-proposal-json-strings@^7.14.5":
+"@babel/plugin-proposal-json-strings@^7.12.13", "@babel/plugin-proposal-json-strings@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb"
integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==
@@ -845,7 +1054,7 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-json-strings" "^7.8.3"
-"@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
+"@babel/plugin-proposal-logical-assignment-operators@^7.12.13", "@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738"
integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==
@@ -861,7 +1070,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.13", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6"
integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==
@@ -869,7 +1078,7 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-"@babel/plugin-proposal-numeric-separator@^7.14.5":
+"@babel/plugin-proposal-numeric-separator@^7.12.13", "@babel/plugin-proposal-numeric-separator@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18"
integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==
@@ -886,6 +1095,17 @@
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
"@babel/plugin-transform-parameters" "^7.9.5"
+"@babel/plugin-proposal-object-rest-spread@^7.12.13":
+ version "7.15.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11"
+ integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==
+ dependencies:
+ "@babel/compat-data" "^7.15.0"
+ "@babel/helper-compilation-targets" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.15.4"
+
"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.6.2":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363"
@@ -905,7 +1125,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
-"@babel/plugin-proposal-optional-catch-binding@^7.14.5":
+"@babel/plugin-proposal-optional-catch-binding@^7.12.13", "@babel/plugin-proposal-optional-catch-binding@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c"
integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==
@@ -921,7 +1141,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"
-"@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.14.5":
+"@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.12.17", "@babel/plugin-proposal-optional-chaining@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603"
integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==
@@ -930,7 +1150,7 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
-"@babel/plugin-proposal-private-methods@^7.14.5":
+"@babel/plugin-proposal-private-methods@^7.12.13", "@babel/plugin-proposal-private-methods@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d"
integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==
@@ -948,7 +1168,7 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-"@babel/plugin-proposal-unicode-property-regex@^7.14.5":
+"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8"
integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==
@@ -964,7 +1184,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.8.8"
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-syntax-async-generators@^7.8.4":
+"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
@@ -1006,7 +1226,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
+"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
@@ -1048,7 +1268,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-syntax-json-strings@^7.8.3":
+"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
@@ -1132,7 +1352,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
+"@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
@@ -1160,14 +1380,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-arrow-functions@^7.14.5":
+"@babel/plugin-transform-arrow-functions@^7.12.13", "@babel/plugin-transform-arrow-functions@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a"
integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-async-to-generator@^7.14.5":
+"@babel/plugin-transform-async-to-generator@^7.12.13", "@babel/plugin-transform-async-to-generator@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67"
integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==
@@ -1176,7 +1396,7 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/helper-remap-async-to-generator" "^7.14.5"
-"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.14.5":
+"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.12.13", "@babel/plugin-transform-block-scoped-functions@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4"
integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==
@@ -1191,6 +1411,13 @@
"@babel/helper-plugin-utils" "^7.8.3"
lodash "^4.17.13"
+"@babel/plugin-transform-block-scoping@^7.12.13":
+ version "7.15.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf"
+ integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
"@babel/plugin-transform-block-scoping@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939"
@@ -1212,6 +1439,19 @@
"@babel/helper-split-export-declaration" "^7.8.3"
globals "^11.1.0"
+"@babel/plugin-transform-classes@^7.12.13":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1"
+ integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.15.4"
+ "@babel/helper-function-name" "^7.15.4"
+ "@babel/helper-optimise-call-expression" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.15.4"
+ "@babel/helper-split-export-declaration" "^7.15.4"
+ globals "^11.1.0"
+
"@babel/plugin-transform-classes@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf"
@@ -1232,7 +1472,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-computed-properties@^7.14.5":
+"@babel/plugin-transform-computed-properties@^7.12.13", "@babel/plugin-transform-computed-properties@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f"
integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==
@@ -1246,14 +1486,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-destructuring@^7.14.7":
+"@babel/plugin-transform-destructuring@^7.12.13", "@babel/plugin-transform-destructuring@^7.14.7":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576"
integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-dotall-regex@^7.14.5":
+"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a"
integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==
@@ -1269,7 +1509,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-duplicate-keys@^7.14.5":
+"@babel/plugin-transform-duplicate-keys@^7.12.13", "@babel/plugin-transform-duplicate-keys@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954"
integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==
@@ -1284,7 +1524,7 @@
"@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-exponentiation-operator@^7.14.5":
+"@babel/plugin-transform-exponentiation-operator@^7.12.13", "@babel/plugin-transform-exponentiation-operator@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493"
integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==
@@ -1315,6 +1555,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
+"@babel/plugin-transform-for-of@^7.12.13":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2"
+ integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
"@babel/plugin-transform-for-of@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb"
@@ -1330,7 +1577,7 @@
"@babel/helper-function-name" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-function-name@^7.14.5":
+"@babel/plugin-transform-function-name@^7.12.13", "@babel/plugin-transform-function-name@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2"
integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==
@@ -1345,21 +1592,21 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-literals@^7.14.5":
+"@babel/plugin-transform-literals@^7.12.13", "@babel/plugin-transform-literals@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78"
integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.14.5":
+"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.12.13", "@babel/plugin-transform-member-expression-literals@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7"
integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-modules-amd@^7.14.5":
+"@babel/plugin-transform-modules-amd@^7.12.13", "@babel/plugin-transform-modules-amd@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7"
integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==
@@ -1388,6 +1635,27 @@
"@babel/helper-simple-access" "^7.14.5"
babel-plugin-dynamic-import-node "^2.3.3"
+"@babel/plugin-transform-modules-commonjs@^7.12.13":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1"
+ integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-simple-access" "^7.15.4"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.12.13":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132"
+ integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.15.4"
+ "@babel/helper-module-transforms" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-identifier" "^7.14.9"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
"@babel/plugin-transform-modules-systemjs@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29"
@@ -1399,7 +1667,7 @@
"@babel/helper-validator-identifier" "^7.14.5"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-umd@^7.14.5":
+"@babel/plugin-transform-modules-umd@^7.12.13", "@babel/plugin-transform-modules-umd@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0"
integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==
@@ -1407,6 +1675,13 @@
"@babel/helper-module-transforms" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
+"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13":
+ version "7.14.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2"
+ integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+
"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e"
@@ -1414,7 +1689,7 @@
dependencies:
"@babel/helper-create-regexp-features-plugin" "^7.14.5"
-"@babel/plugin-transform-new-target@^7.14.5":
+"@babel/plugin-transform-new-target@^7.12.13", "@babel/plugin-transform-new-target@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8"
integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==
@@ -1435,7 +1710,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.14.5":
+"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.12.13", "@babel/plugin-transform-object-super@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45"
integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==
@@ -1451,6 +1726,13 @@
"@babel/helper-get-function-arity" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
+"@babel/plugin-transform-parameters@^7.12.13", "@babel/plugin-transform-parameters@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62"
+ integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
"@babel/plugin-transform-parameters@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3"
@@ -1458,7 +1740,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.14.5":
+"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.12.13", "@babel/plugin-transform-property-literals@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34"
integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==
@@ -1512,14 +1794,14 @@
dependencies:
regenerator-transform "^0.14.2"
-"@babel/plugin-transform-regenerator@^7.14.5":
+"@babel/plugin-transform-regenerator@^7.12.13", "@babel/plugin-transform-regenerator@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f"
integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==
dependencies:
regenerator-transform "^0.14.2"
-"@babel/plugin-transform-reserved-words@^7.14.5":
+"@babel/plugin-transform-reserved-words@^7.12.13", "@babel/plugin-transform-reserved-words@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304"
integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==
@@ -1543,7 +1825,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-shorthand-properties@^7.14.5":
+"@babel/plugin-transform-shorthand-properties@^7.12.13", "@babel/plugin-transform-shorthand-properties@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58"
integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==
@@ -1557,6 +1839,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
+"@babel/plugin-transform-spread@^7.12.13":
+ version "7.15.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz#79d5aa27f68d700449b2da07691dfa32d2f6d468"
+ integrity sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
+
"@babel/plugin-transform-spread@^7.14.6":
version "7.14.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144"
@@ -1573,7 +1863,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/helper-regex" "^7.8.3"
-"@babel/plugin-transform-sticky-regex@^7.14.5":
+"@babel/plugin-transform-sticky-regex@^7.12.13", "@babel/plugin-transform-sticky-regex@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9"
integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==
@@ -1588,20 +1878,29 @@
"@babel/helper-annotate-as-pure" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-template-literals@^7.14.5":
+"@babel/plugin-transform-template-literals@^7.12.13", "@babel/plugin-transform-template-literals@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93"
integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-typeof-symbol@^7.14.5":
+"@babel/plugin-transform-typeof-symbol@^7.12.13", "@babel/plugin-transform-typeof-symbol@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4"
integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
+"@babel/plugin-transform-typescript@^7.12.17":
+ version "7.15.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz#ff0e6a47de9b2d58652123ab5a879b2ff20665d8"
+ integrity sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-typescript" "^7.14.5"
+
"@babel/plugin-transform-typescript@^7.14.5":
version "7.14.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c"
@@ -1620,7 +1919,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-typescript" "^7.8.3"
-"@babel/plugin-transform-unicode-escapes@^7.14.5":
+"@babel/plugin-transform-unicode-escapes@^7.12.13", "@babel/plugin-transform-unicode-escapes@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b"
integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==
@@ -1635,7 +1934,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-unicode-regex@^7.14.5":
+"@babel/plugin-transform-unicode-regex@^7.12.13", "@babel/plugin-transform-unicode-regex@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e"
integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==
@@ -1722,6 +2021,78 @@
core-js-compat "^3.15.0"
semver "^6.3.0"
+"@babel/preset-env@~7.12.13":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.17.tgz#94a3793ff089c32ee74d76a3c03a7597693ebaaa"
+ integrity sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg==
+ dependencies:
+ "@babel/compat-data" "^7.12.13"
+ "@babel/helper-compilation-targets" "^7.12.17"
+ "@babel/helper-module-imports" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-validator-option" "^7.12.17"
+ "@babel/plugin-proposal-async-generator-functions" "^7.12.13"
+ "@babel/plugin-proposal-class-properties" "^7.12.13"
+ "@babel/plugin-proposal-dynamic-import" "^7.12.17"
+ "@babel/plugin-proposal-export-namespace-from" "^7.12.13"
+ "@babel/plugin-proposal-json-strings" "^7.12.13"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.12.13"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.13"
+ "@babel/plugin-proposal-numeric-separator" "^7.12.13"
+ "@babel/plugin-proposal-object-rest-spread" "^7.12.13"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.12.13"
+ "@babel/plugin-proposal-optional-chaining" "^7.12.17"
+ "@babel/plugin-proposal-private-methods" "^7.12.13"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.12.13"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+ "@babel/plugin-syntax-class-properties" "^7.12.13"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+ "@babel/plugin-syntax-top-level-await" "^7.12.13"
+ "@babel/plugin-transform-arrow-functions" "^7.12.13"
+ "@babel/plugin-transform-async-to-generator" "^7.12.13"
+ "@babel/plugin-transform-block-scoped-functions" "^7.12.13"
+ "@babel/plugin-transform-block-scoping" "^7.12.13"
+ "@babel/plugin-transform-classes" "^7.12.13"
+ "@babel/plugin-transform-computed-properties" "^7.12.13"
+ "@babel/plugin-transform-destructuring" "^7.12.13"
+ "@babel/plugin-transform-dotall-regex" "^7.12.13"
+ "@babel/plugin-transform-duplicate-keys" "^7.12.13"
+ "@babel/plugin-transform-exponentiation-operator" "^7.12.13"
+ "@babel/plugin-transform-for-of" "^7.12.13"
+ "@babel/plugin-transform-function-name" "^7.12.13"
+ "@babel/plugin-transform-literals" "^7.12.13"
+ "@babel/plugin-transform-member-expression-literals" "^7.12.13"
+ "@babel/plugin-transform-modules-amd" "^7.12.13"
+ "@babel/plugin-transform-modules-commonjs" "^7.12.13"
+ "@babel/plugin-transform-modules-systemjs" "^7.12.13"
+ "@babel/plugin-transform-modules-umd" "^7.12.13"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13"
+ "@babel/plugin-transform-new-target" "^7.12.13"
+ "@babel/plugin-transform-object-super" "^7.12.13"
+ "@babel/plugin-transform-parameters" "^7.12.13"
+ "@babel/plugin-transform-property-literals" "^7.12.13"
+ "@babel/plugin-transform-regenerator" "^7.12.13"
+ "@babel/plugin-transform-reserved-words" "^7.12.13"
+ "@babel/plugin-transform-shorthand-properties" "^7.12.13"
+ "@babel/plugin-transform-spread" "^7.12.13"
+ "@babel/plugin-transform-sticky-regex" "^7.12.13"
+ "@babel/plugin-transform-template-literals" "^7.12.13"
+ "@babel/plugin-transform-typeof-symbol" "^7.12.13"
+ "@babel/plugin-transform-unicode-escapes" "^7.12.13"
+ "@babel/plugin-transform-unicode-regex" "^7.12.13"
+ "@babel/preset-modules" "^0.1.3"
+ "@babel/types" "^7.12.17"
+ core-js-compat "^3.8.0"
+ semver "^5.5.0"
+
"@babel/preset-flow@^7.0.0":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.14.5.tgz#a1810b0780c8b48ab0bece8e7ab8d0d37712751c"
@@ -1731,7 +2102,7 @@
"@babel/helper-validator-option" "^7.14.5"
"@babel/plugin-transform-flow-strip-types" "^7.14.5"
-"@babel/preset-modules@^0.1.4":
+"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4":
version "0.1.4"
resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e"
integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==
@@ -1751,6 +2122,15 @@
"@babel/helper-validator-option" "^7.14.5"
"@babel/plugin-transform-typescript" "^7.14.5"
+"@babel/preset-typescript@~7.12.13":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.17.tgz#8ecf04618956c268359dd9feab775dc14a666eb5"
+ integrity sha512-T513uT4VSThRcmWeqcLkITKJ1oGQho9wfWuhQm10paClQkp1qyd0Wf8mvC8Se7UYssMyRSj4tZYpVTkCmAK/mA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-validator-option" "^7.12.17"
+ "@babel/plugin-transform-typescript" "^7.12.17"
+
"@babel/register@^7.0.0":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.14.5.tgz#d0eac615065d9c2f1995842f85d6e56c345f3233"
@@ -1847,6 +2227,15 @@
"@babel/parser" "^7.14.5"
"@babel/types" "^7.14.5"
+"@babel/template@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194"
+ integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/parser" "^7.15.4"
+ "@babel/types" "^7.15.4"
+
"@babel/traverse@^7.0.0", "@babel/traverse@^7.14.8":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.8.tgz#c0253f02677c5de1a8ff9df6b0aacbec7da1a8ce"
@@ -1907,6 +2296,21 @@
debug "^4.1.0"
globals "^11.1.0"
+"@babel/traverse@^7.15.4", "@babel/traverse@^7.9.0":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d"
+ integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.15.4"
+ "@babel/helper-function-name" "^7.15.4"
+ "@babel/helper-hoist-variables" "^7.15.4"
+ "@babel/helper-split-export-declaration" "^7.15.4"
+ "@babel/parser" "^7.15.4"
+ "@babel/types" "^7.15.4"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
"@babel/traverse@^7.4.3", "@babel/traverse@^7.7.2":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753"
@@ -1940,6 +2344,14 @@
lodash "^4.17.13"
to-fast-properties "^2.0.0"
+"@babel/types@^7.12.17", "@babel/types@^7.15.4", "@babel/types@^7.15.6":
+ version "7.15.6"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f"
+ integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.9"
+ to-fast-properties "^2.0.0"
+
"@babel/types@^7.14.5", "@babel/types@^7.4.0":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
@@ -2216,6 +2628,111 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@expo/config-plugins@2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-2.0.4.tgz#955fd70a2aeefbe99ec71cecb1d7ea7b626dc79e"
+ integrity sha512-JGt/X2tFr7H8KBQrKfbGo9hmCubQraMxq5sj3bqDdKmDOLcE1a/EDCP9g0U4GHsa425J8VDIkQUHYz3h3ndEXQ==
+ dependencies:
+ "@expo/config-types" "^41.0.0"
+ "@expo/json-file" "8.2.30"
+ "@expo/plist" "0.0.13"
+ debug "^4.3.1"
+ find-up "~5.0.0"
+ fs-extra "9.0.0"
+ getenv "^1.0.0"
+ glob "7.1.6"
+ resolve-from "^5.0.0"
+ slash "^3.0.0"
+ xcode "^3.0.1"
+ xml2js "^0.4.23"
+
+"@expo/config-plugins@^3.0.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-3.1.0.tgz#0752ff33c5eab21cf42034a44e79df97f0f867f8"
+ integrity sha512-V5qxaxCAExBM0TXmbU1QKiZcAGP3ecu7KXede8vByT15cro5PkcWu2sSdJCYbHQ/gw6Vf/i8sr8gKlN8V8TSLg==
+ dependencies:
+ "@expo/config-types" "^42.0.0"
+ "@expo/json-file" "8.2.33"
+ "@expo/plist" "0.0.14"
+ chalk "^4.1.2"
+ debug "^4.3.1"
+ find-up "~5.0.0"
+ fs-extra "9.0.0"
+ getenv "^1.0.0"
+ glob "7.1.6"
+ resolve-from "^5.0.0"
+ semver "^7.3.5"
+ slash "^3.0.0"
+ xcode "^3.0.1"
+ xml2js "^0.4.23"
+
+"@expo/config-types@^41.0.0":
+ version "41.0.0"
+ resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-41.0.0.tgz#ffe1444c6c26e0e3a8f7149b4afe486e357536d1"
+ integrity sha512-Ax0pHuY5OQaSrzplOkT9DdpdmNzaVDnq9VySb4Ujq7UJ4U4jriLy8u93W98zunOXpcu0iiKubPsqD6lCiq0pig==
+
+"@expo/config-types@^42.0.0":
+ version "42.0.0"
+ resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-42.0.0.tgz#3e3e125ec092c0c34dbfaf19be5480402de3d677"
+ integrity sha512-Rj02OMZke2MrGa/1Y/EScmR7VuWbDEHPJyvfFyyLbadUt+Yv6isCdeFzDt71I7gJlPR9T4fzixeYLrtXXOTq0w==
+
+"@expo/config@^4.0.0":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@expo/config/-/config-4.0.4.tgz#48686c2b83bc00db469e01592e396e973e91e11d"
+ integrity sha512-O3xRlwMCidOgk1WHIy6eOjh2yp0h/kgBDRNKqPe21+YDiOufyTGGNvbWgHwoax8goa1iMg443WQO7GhvaH286g==
+ dependencies:
+ "@babel/core" "7.9.0"
+ "@babel/plugin-proposal-class-properties" "~7.12.13"
+ "@babel/preset-env" "~7.12.13"
+ "@babel/preset-typescript" "~7.12.13"
+ "@expo/config-plugins" "2.0.4"
+ "@expo/config-types" "^41.0.0"
+ "@expo/json-file" "8.2.30"
+ fs-extra "9.0.0"
+ getenv "^1.0.0"
+ glob "7.1.6"
+ require-from-string "^2.0.2"
+ resolve-from "^5.0.0"
+ semver "7.3.2"
+ slugify "^1.3.4"
+
+"@expo/json-file@8.2.30":
+ version "8.2.30"
+ resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.30.tgz#bd855b6416b5c3af7e55b43f6761c1e7d2b755b0"
+ integrity sha512-vrgGyPEXBoFI5NY70IegusCSoSVIFV3T3ry4tjJg1MFQKTUlR7E0r+8g8XR6qC705rc2PawaZQjqXMAVtV6s2A==
+ dependencies:
+ "@babel/code-frame" "~7.10.4"
+ fs-extra "9.0.0"
+ json5 "^1.0.1"
+ write-file-atomic "^2.3.0"
+
+"@expo/json-file@8.2.33":
+ version "8.2.33"
+ resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32"
+ integrity sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg==
+ dependencies:
+ "@babel/code-frame" "~7.10.4"
+ json5 "^1.0.1"
+ write-file-atomic "^2.3.0"
+
+"@expo/plist@0.0.13":
+ version "0.0.13"
+ resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.13.tgz#700a48d9927aa2b0257c613e13454164e7371a96"
+ integrity sha512-zGPSq9OrCn7lWvwLLHLpHUUq2E40KptUFXn53xyZXPViI0k9lbApcR9KlonQZ95C+ELsf0BQ3gRficwK92Ivcw==
+ dependencies:
+ base64-js "^1.2.3"
+ xmlbuilder "^14.0.0"
+ xmldom "~0.5.0"
+
+"@expo/plist@0.0.14":
+ version "0.0.14"
+ resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.14.tgz#a756903bd28aabe0a961222df2e7858a39a218c9"
+ integrity sha512-bb4Ua1M/OdNgS8KiGdSDUjZ/bbPfv3xdPY/lz8Ctp/adlj/QgB8xA7tVPeqSSfJPZqFRwU0qLCnRhpUOnP51VQ==
+ dependencies:
+ "@xmldom/xmldom" "~0.7.0"
+ base64-js "^1.2.3"
+ xmlbuilder "^14.0.0"
+
"@hapi/hoek@^9.0.0":
version "9.2.0"
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131"
@@ -3231,6 +3748,11 @@
dependencies:
eslint-plugin-import "^2.17.2"
+"@rocket.chat/message-parser@0.30.0":
+ version "0.30.0"
+ resolved "https://registry.yarnpkg.com/@rocket.chat/message-parser/-/message-parser-0.30.0.tgz#63a25aa7fa17724d55db80f95f7f8d6a99ae42ff"
+ integrity sha512-pI7ajaojv+GqhQBMnFiBOWerE7zIlJywWFaLzJlIC/wsJ9LgX6YaKY2wqc909nkr+E4qZY1luJ61ErXGGSF9Zw==
+
"@rocket.chat/react-native-fast-image@^8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@rocket.chat/react-native-fast-image/-/react-native-fast-image-8.2.0.tgz#4f48858f95f40afcb10b39cee9b1239c150d6c51"
@@ -3984,6 +4506,11 @@
dependencies:
source-map "^0.6.1"
+"@types/url-parse@^1.4.4":
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/@types/url-parse/-/url-parse-1.4.4.tgz#ebeb0ec8b581318739cf73e9f9b186f610764255"
+ integrity sha512-KtQLad12+4T/NfSxpoDhmr22+fig3T7/08QCgmutYA6QSznSRmEtuL95GrhVV40/0otTEdFc+etRcCTqhh1q5Q==
+
"@types/webpack-env@^1.15.0":
version "1.15.2"
resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.2.tgz#927997342bb9f4a5185a86e6579a0a18afc33b0a"
@@ -4110,21 +4637,20 @@
resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
-"@unimodules/core@~5.3.0":
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-5.3.0.tgz#c425e59b1f9c1e2c91b235b6192e5f622a47d833"
- integrity sha512-uGpkYE2zI0F1LTv+p6drzCHAZo8UFITxedHUH6pjWQBHdpTtae5cU7l3F/CzQ4WYU6SWhkzaB90/Ydf3DNTuLw==
+"@unimodules/core@~7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-7.1.2.tgz#5181b99586476a5d87afd0958f26a04714c47fa1"
+ integrity sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==
dependencies:
compare-versions "^3.4.0"
-"@unimodules/react-native-adapter@~5.4.0":
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/@unimodules/react-native-adapter/-/react-native-adapter-5.4.0.tgz#6639a2b6df74806bc886933c99bb18408e54f7f0"
- integrity sha512-2c3hDWzfBAyDWNCkBziyXphmxRZvZ5J8oSMLRDohvj6DnQiHvnlgr/A4oberkjPSEve5fN4GA+eybcJrec08AA==
+"@unimodules/react-native-adapter@~6.3.7":
+ version "6.3.9"
+ resolved "https://registry.yarnpkg.com/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz#2f4bef6b7532dce5bf9f236e69f96403d0243c30"
+ integrity sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==
dependencies:
+ expo-modules-autolinking "^0.0.3"
invariant "^2.2.4"
- lodash "^4.5.0"
- prop-types "^15.6.1"
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
@@ -4271,6 +4797,11 @@
"@webassemblyjs/wast-parser" "1.9.0"
"@xtuc/long" "4.2.2"
+"@xmldom/xmldom@~0.7.0":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d"
+ integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==
+
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
@@ -5316,7 +5847,7 @@ base64-js@^1.0.2:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
-base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.5.1:
+base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.0, base64-js@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@@ -5604,6 +6135,17 @@ browserslist@^4.16.6:
escalade "^3.1.1"
node-releases "^1.1.71"
+browserslist@^4.17.3:
+ version "4.17.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624"
+ integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==
+ dependencies:
+ caniuse-lite "^1.0.30001264"
+ electron-to-chromium "^1.3.857"
+ escalade "^3.1.1"
+ node-releases "^1.1.77"
+ picocolors "^0.2.1"
+
bser@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@@ -5846,6 +6388,11 @@ caniuse-lite@^1.0.30001219:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958"
integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ==
+caniuse-lite@^1.0.30001264:
+ version "1.0.30001265"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz#0613c9e6c922e422792e6fcefdf9a3afeee4f8c3"
+ integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==
+
capture-exit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
@@ -5894,6 +6441,14 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
char-regex@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
@@ -6498,6 +7053,14 @@ core-js-compat@^3.15.0:
browserslist "^4.16.6"
semver "7.0.0"
+core-js-compat@^3.8.0:
+ version "3.18.2"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.2.tgz#e40c266fbd613948dd8d2d2156345da8ac03c142"
+ integrity sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ==
+ dependencies:
+ browserslist "^4.17.3"
+ semver "7.0.0"
+
core-js-pure@^3.0.0:
version "3.6.5"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
@@ -6518,11 +7081,6 @@ core-js@^1.0.0:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
-core-js@^2.4.1:
- version "2.6.11"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
- integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
-
core-js@^3.0.1, core-js@^3.0.4:
version "3.6.5"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
@@ -7249,6 +7807,11 @@ electron-to-chromium@^1.3.723:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09"
integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==
+electron-to-chromium@^1.3.857:
+ version "1.3.862"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.862.tgz#c1c5d4382449e2c9b0e67fe1652f4fc451d6d8c0"
+ integrity sha512-o+FMbCD+hAUJ9S8bfz/FaqA0gE8OpCCm58KhhGogOEqiA1BLFSoVYLi+tW+S/ZavnqBn++n0XZm7HQiBVPs8Jg==
+
element-resize-detector@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.2.tgz#bf7c3ff915957e4e62e86241ed2f9c86b078892b"
@@ -7911,15 +8474,17 @@ expect@^27.0.6:
jest-message-util "^27.0.6"
jest-regex-util "^27.0.6"
-expo-apple-authentication@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/expo-apple-authentication/-/expo-apple-authentication-2.2.1.tgz#4f515183a385bb2681d8f7bf1064251016d05b97"
- integrity sha512-BD4tKhoUWm99RTbFjf8IZo/CIOKFhjUej54mci1djOao770TVXl4Eq8IYDgwHEqK5v8UAySVwxAzgJBmQl9XIw==
+expo-apple-authentication@3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/expo-apple-authentication/-/expo-apple-authentication-3.2.1.tgz#c35e2151163a590f91da07a450c6d0c2213cb407"
+ integrity sha512-BF98D5mszbbIVsdTEoo4AK4PaBbmpVaQ/MkseYY+kHKdiNl8BKAdlNrInnMYZZaOekPrKMJaJRaXZzrZH9CB3g==
+ dependencies:
+ "@expo/config-plugins" "^3.0.0"
-expo-asset@~8.1.7:
- version "8.1.7"
- resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.1.7.tgz#32618e51f85df56f1d7dd54c71eb486ae7f7674e"
- integrity sha512-g0+a+Uc+GfOI7VtZ6d0WB78qq6Lu3vKqHN3TBfcsndcx893CSmo6ZVLcrlL9evdZwlbSO+9zLrLdzEw38a/gMA==
+expo-asset@~8.3.3:
+ version "8.3.3"
+ resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.3.3.tgz#b54ab9999efb3d2086329fc5b1bed04fede8f682"
+ integrity sha512-qCm5d14tzswY8DcmRJ+0WkY9tc3OiVikBAiw2hCMC+bFpK/bEdqy4Zwfd69MFIAJ0taJpHWhdUoBRO0byQLlfg==
dependencies:
blueimp-md5 "^2.10.0"
invariant "^2.2.4"
@@ -7927,66 +8492,82 @@ expo-asset@~8.1.7:
path-browserify "^1.0.0"
url-parse "^1.4.4"
-expo-av@8.2.1:
- version "8.2.1"
- resolved "https://registry.yarnpkg.com/expo-av/-/expo-av-8.2.1.tgz#cab16a5f0766b84a7c2e05e04523cb73a0cd4e9b"
- integrity sha512-p1W6ta5yFLsyUUB4bH/Bm2gz/KEleYWRYkF7PR3aYXjtTjMX9Ud1gwzEfbMJMKZRSlJydSzy/ieQT8CVatd68A==
+expo-av@9.2.3:
+ version "9.2.3"
+ resolved "https://registry.yarnpkg.com/expo-av/-/expo-av-9.2.3.tgz#aa54da9c0bc1c3eb0251c1da17f5123f15d4f82f"
+ integrity sha512-If6+JqB2mqMKJxHgN8UAx75CWH4kPAzx2EyP+MFmcPVpcSBJZ/Fj+EfI+GJnk3tHPSB2Eld1IFEYOIJCkN/26Q==
dependencies:
- lodash "^4.17.15"
- nullthrows "^1.1.0"
- prop-types "15.7.2"
+ "@expo/config-plugins" "^3.0.0"
+ expo-modules-core "~0.2.0"
-expo-constants@~9.1.1:
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-9.1.1.tgz#bca141ee3d4550e308798128f66c6d9c6a206ca1"
- integrity sha512-zCa/wRARODHd6BSwxjBhidmao0AqQnKmLkl0tsVIoZlRyPDHsEaxNR/m+7wqGC7qiC+UpG1qRnvLOLwCGt2ihg==
+expo-constants@~11.0.2:
+ version "11.0.2"
+ resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-11.0.2.tgz#069930145908fef7d76bf72a1a874a1d4621af82"
+ integrity sha512-CVjM+FbOMe/nFOSly5lnj0seMAYsjjc6+q3X8nIXG+gtw9iNBLwMX3Fz308rxiaPRJw+TBdd5/mcGJdNfoS+ew==
dependencies:
- fbjs "1.0.0"
+ "@expo/config" "^4.0.0"
+ expo-modules-core "~0.2.0"
uuid "^3.3.2"
-expo-file-system@9.0.1, expo-file-system@~9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-9.0.1.tgz#50a6a0b29fbc45413de9f7d38c0695503bf03d7e"
- integrity sha512-xZKv7g0dhFNMjp49+XiZBnApOUu/WlLzwWaruNbBnSgi/HGnSwbHNyk7zuK1RdQ9NndvXu6uT4uW2i67pIrKig==
+expo-file-system@11.1.3, expo-file-system@~11.1.3:
+ version "11.1.3"
+ resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-11.1.3.tgz#f344bd175a5f65e2a97d2d6a1fd4c8da06386639"
+ integrity sha512-FBRcD6ojrkrZiTZ8O7Fbo833HhZtkhKtLDj4RNZIMpF1i+ZBD2bmeMcfLMeRHNYcBeJno9C4AVXoNQFqDCGQDg==
dependencies:
+ "@expo/config-plugins" "^3.0.0"
+ expo-modules-core "~0.2.0"
uuid "^3.4.0"
-expo-haptics@8.2.1:
- version "8.2.1"
- resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-8.2.1.tgz#e4723cc6f25280631841ef178cb732b4cf637267"
- integrity sha512-isw7ocEK1lNZ5dFfgyiJMj9s6jYIqfOKyEUYwhFP8KPOIDYVZJ2N5RPwvS95MRGprwrVetxbbGNEqZOELyhZKg==
+expo-haptics@10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-10.1.0.tgz#2ef5f0c3442f57844f7a7a961d922872e4ea9a71"
+ integrity sha512-2rpixkP3LSCwaJAmbbs0CSqbY7lSk7Ytay4UAYWg3YiJ05My7+MGMPbQJARyAMI5JQNuzcdsZN74btSusBvgYQ==
-expo-image-loader@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-1.1.1.tgz#6c65bd1a41761c8acb91575060579e4864b93394"
- integrity sha512-qI4opRO2D1MGRAbHxYnMBJ4LzKT17KfqbM5oTxNoMZCRNpzB0xsuJrWy5C+0UOkV0vnqQyjvCtynTSawhWnl9A==
+expo-image-loader@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-2.2.0.tgz#b5d49ec65e576c033823050b223ef462c5ec5711"
+ integrity sha512-kTs/lW8LUXYFQ5t8wkdJs0A41zd7dIB8uRRC0a9L0EurSGUvQWiVTbHQoLo/GYWL7nM85OaPAe2qkHfcz5KeyA==
-expo-keep-awake@8.2.1:
- version "8.2.1"
- resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-8.2.1.tgz#a7956ad0fa80eb6ac6a28bb7242408e87c493677"
- integrity sha512-m644YH7R/3n6dcn03aZcmHGTk4hDDIiEiImTKsSjbXIIRuW5tfdRqLCHnja5DwBT+4sxUn58wTpK6QnTfXichA==
-
-expo-local-authentication@9.2.0:
+expo-keep-awake@9.2.0:
version "9.2.0"
- resolved "https://registry.yarnpkg.com/expo-local-authentication/-/expo-local-authentication-9.2.0.tgz#7e52c34aba156c59b28b3833d93763e4dd0ca951"
- integrity sha512-bg3yNx5E0AX7r3oJ6BdHMReNv1LX6ZfDqiDuugOxOgzycP+1oIY/LwU8nET6O3gSk4JiVogwjg3hFrtI+ksFJQ==
+ resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-9.2.0.tgz#9cbdcc8264c943ef29a58326236cd34267e98f43"
+ integrity sha512-R5jAx5j3MqrhKFB307FBpaHtYSYeVIFX/rVforBF5inKonYjXRWVhjGoBjolF4geAryNamC3NKhMfxyaaB0W6Q==
+
+expo-local-authentication@11.1.1:
+ version "11.1.1"
+ resolved "https://registry.yarnpkg.com/expo-local-authentication/-/expo-local-authentication-11.1.1.tgz#ef9de3f74e504c14ab4459d6c0c825f87d3c0c18"
+ integrity sha512-58uXDa8kkcsITrWtDJL24F+VNVXpIlN1X4xQDI0BHrWxIobRLTkhDhYwV78X+gJj3WKMBv3d2mkd2fmg2koT5Q==
dependencies:
+ "@expo/config-plugins" "^3.0.0"
invariant "^2.2.4"
-expo-permissions@~9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/expo-permissions/-/expo-permissions-9.0.1.tgz#dc10b58654bbe39bbbed5827369942b01b08055e"
- integrity sha512-CosJgy8XQRN/OFG2JTQDcFxz3XTGi27coCMym/hVXWtQfk0z6PwdRG5IXHfLGuSckwIcgmirrwm2+Zc0X3MmNg==
+expo-modules-autolinking@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz#45ba8cb1798f9339347ae35e96e9cc70eafb3727"
+ integrity sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==
+ dependencies:
+ chalk "^4.1.0"
+ commander "^7.2.0"
+ fast-glob "^3.2.5"
+ find-up "~5.0.0"
+ fs-extra "^9.1.0"
-expo-video-thumbnails@5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/expo-video-thumbnails/-/expo-video-thumbnails-5.1.0.tgz#7227698977b1496a076c1a71149a372d14827311"
- integrity sha512-Ggtud9tieWu+iCvm5QZfJKw//3tmXAX68SR0IZ9WPQ9MKePGSyOWpMY/PSxOXJMSbkCDQJY48rQMqiloXlaLmg==
+expo-modules-core@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.2.0.tgz#68e5b6e53d0afbf8d131578831aed657589a2d42"
+ integrity sha512-inpfZ5X/BaTtbj2wG9PA9AC0MN8VyId6KSRlVuEg7+ziurHBy/kKDFxpOddUokhwiln2uhoYPSStJjR/tKypdw==
-expo-web-browser@8.3.1:
- version "8.3.1"
- resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-8.3.1.tgz#c88cc349dfa1db31cfdbe365753b6840054d0152"
- integrity sha512-mDxSNpc/Ww/RX6MhmPRUWo2xNi8HGZ1TDMqIjTvUzrL7pGG9VerX0EDMhfLgo6c7KVOY1ngbTyybApZTXgPCOQ==
+expo-video-thumbnails@5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/expo-video-thumbnails/-/expo-video-thumbnails-5.2.1.tgz#d7f9853117671a09acc24e70df84b6c7c3e38114"
+ integrity sha512-0ttnCbQJrhqs0sFLHjIXb7wZ/z4hfT6GGkmfWOoNiNYcgY9mShASv5domn82llz8/S4lLE9KpNUl9rrt90JsJg==
+ dependencies:
+ expo-modules-core "~0.2.0"
+
+expo-web-browser@9.2.0:
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-9.2.0.tgz#34c1355552c4c6eaae515340a0761939a9bf6152"
+ integrity sha512-Gy9tkIw/JplfiTiOR/pdEbLdyuzeQBYFuU27TXSfLOn/tDRcOghOcJ+vNH2FX3iZqReBHMJEINjcWxpOpOvpFw==
dependencies:
compare-urls "^2.0.0"
@@ -8091,7 +8672,7 @@ fast-glob@^2.0.2:
merge2 "^1.2.3"
micromatch "^3.1.10"
-fast-glob@^3.1.1:
+fast-glob@^3.1.1, fast-glob@^3.2.5:
version "3.2.7"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1"
integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==
@@ -8152,20 +8733,6 @@ fbjs-css-vars@^1.0.0:
resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8"
integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==
-fbjs@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a"
- integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==
- dependencies:
- core-js "^2.4.1"
- fbjs-css-vars "^1.0.0"
- isomorphic-fetch "^2.1.1"
- loose-envify "^1.0.0"
- object-assign "^4.1.0"
- promise "^7.1.1"
- setimmediate "^1.0.5"
- ua-parser-js "^0.7.18"
-
fbjs@^0.8.4, fbjs@^0.8.9:
version "0.8.17"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
@@ -8337,7 +8904,7 @@ find-up@3.0.0, find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
-find-up@5.0.0:
+find-up@5.0.0, find-up@~5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
@@ -8485,6 +9052,16 @@ from2@^2.1.0:
inherits "^2.0.1"
readable-stream "^2.0.0"
+fs-extra@9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3"
+ integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^1.0.0"
+
fs-extra@^0.30.0:
version "0.30.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
@@ -8695,6 +9272,11 @@ get-value@^2.0.3, get-value@^2.0.6:
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+getenv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31"
+ integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==
+
gifwrap@^0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.9.2.tgz#348e286e67d7cf57942172e1e6f05a71cee78489"
@@ -8757,6 +9339,18 @@ glob@7.0.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
+glob@7.1.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
glob@7.1.7, glob@^7.0.0, glob@^7.1.6:
version "7.1.7"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
@@ -8780,18 +9374,6 @@ glob@^6.0.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
global-modules@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
@@ -11178,7 +11760,7 @@ lodash@^4.0.0:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
-lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.5.0:
+lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@@ -12119,6 +12701,11 @@ node-releases@^1.1.53:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.56.tgz#bc054a417d316e3adac90eafb7e1932802f28705"
integrity sha512-EVo605FhWLygH8a64TjgpjyHYOihkxECwX1bHHr8tETJKWEiWS2YJjPbvsX2jFjnjTNEgBCmk9mLjKG1Mf11cw==
+node-releases@^1.1.77:
+ version "1.1.77"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e"
+ integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==
+
node-stream-zip@^1.9.1:
version "1.13.6"
resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.13.6.tgz#8abdfdbc4bc96ee11e9438d94cc8c93c7df28959"
@@ -12210,7 +12797,7 @@ nth-check@~1.0.1:
dependencies:
boolbase "~1.0.0"
-nullthrows@^1.1.0, nullthrows@^1.1.1:
+nullthrows@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
@@ -12845,6 +13432,11 @@ phin@^2.9.1:
resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
+picocolors@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
+ integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
+
picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
@@ -13887,30 +14479,22 @@ react-native-ui-lib@RocketChat/react-native-ui-lib#minor-improvements:
semver "^5.5.0"
url-parse "^1.2.0"
-react-native-unimodules@0.10.1:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/react-native-unimodules/-/react-native-unimodules-0.10.1.tgz#05a5ef248e88589528e7ef925137a345dde96ca4"
- integrity sha512-U/GexLJWwDOXhsvSSz197gPVRoNVK4tY1cjvZC+748Q4mvc9v4ztB7niKaoaEbNdTjB/pE2NYlZW4013d1wQNw==
+react-native-unimodules@^0.14.8:
+ version "0.14.8"
+ resolved "https://registry.yarnpkg.com/react-native-unimodules/-/react-native-unimodules-0.14.8.tgz#8bf859ac1a4e06122e0331ddf9dec62019884432"
+ integrity sha512-yL6yaG6rq0dYb9/rN3KyZtOPxc0mt69GsWavAZBnhwN1v4uMi50DiHFdfACTPmPnz420woITmBpKK0juWRZOew==
dependencies:
- "@unimodules/core" "~5.3.0"
- "@unimodules/react-native-adapter" "~5.4.0"
+ "@unimodules/core" "~7.1.2"
+ "@unimodules/react-native-adapter" "~6.3.7"
chalk "^2.4.2"
- expo-asset "~8.1.7"
- expo-constants "~9.1.1"
- expo-file-system "~9.0.1"
- expo-image-loader "~1.1.1"
- expo-permissions "~9.0.1"
- unimodules-app-loader "~1.2.0"
- unimodules-barcode-scanner-interface "~5.2.1"
- unimodules-camera-interface "~5.2.1"
- unimodules-constants-interface "~5.2.1"
- unimodules-face-detector-interface "~5.2.1"
- unimodules-file-system-interface "~5.2.1"
- unimodules-font-interface "~5.2.1"
- unimodules-image-loader-interface "~5.2.1"
- unimodules-permissions-interface "~5.2.1"
- unimodules-sensors-interface "~5.2.1"
- unimodules-task-manager-interface "~5.2.1"
+ expo-asset "~8.3.3"
+ expo-constants "~11.0.2"
+ expo-file-system "~11.1.3"
+ expo-image-loader "~2.2.0"
+ expo-modules-core "~0.2.0"
+ find-up "~5.0.0"
+ unimodules-app-loader "~2.2.0"
+ unimodules-task-manager-interface "~6.2.0"
react-native-vector-icons@8.1.0:
version "8.1.0"
@@ -14749,6 +15333,11 @@ semver@7.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+semver@7.3.2:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
semver@7.3.5, semver@^7.0.0, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
@@ -14961,7 +15550,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
-simple-plist@^1.0.0:
+simple-plist@^1.0.0, simple-plist@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.1.1.tgz#54367ca28bc5996a982c325c1c4a4c1a05f4047c"
integrity sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==
@@ -15044,6 +15633,11 @@ slice-ansi@^4.0.0:
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
+slugify@^1.3.4:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.1.tgz#a5fcaef29f4e57c6e932ce7044b6ffd9cf81b641"
+ integrity sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==
+
snapdragon-node@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -16238,60 +16832,15 @@ unicode-property-aliases-ecmascript@^1.0.4:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
-unimodules-app-loader@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/unimodules-app-loader/-/unimodules-app-loader-1.2.0.tgz#e3ab8942000b0a0ee3bef2faff7e7e276d84c86a"
- integrity sha512-TZCFuyOfX/iVJf3uhy2WmGnQFUGgsfkVRzUb7mCxPTqqdyvqT7aXxCGM3gY+3Y8dPdCRGoG+EA2vrOe3aLU0qw==
+unimodules-app-loader@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/unimodules-app-loader/-/unimodules-app-loader-2.2.0.tgz#8f8543630ada0f9092ce95050d05738990d1f4ab"
+ integrity sha512-porQWVWu7meIrCJ+c+H7eJyeC2rHioLUZiv4UcOs33SAyUhR4X05tCC8NIOuQJsF08Fj3a0ck7HUsd5xq+LqKA==
-unimodules-barcode-scanner-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-5.2.1.tgz#95b90ed96b7c97b2ce48925f28e478781e9165ea"
- integrity sha512-7gLHsZ4vkQ5utDmsiBK4jgqBd2+9V7y/iHqi7P2Aqz21RomJF9ruWJMo6R6k2+14IayFbtZGU2+aRx2w/1SAGg==
-
-unimodules-camera-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-camera-interface/-/unimodules-camera-interface-5.2.1.tgz#c46bb4319ab71751275fd581e88e7f93892a34f2"
- integrity sha512-ugdWuv1FO6BZTGMIzE2KvA6x5h1CHguRKWJBeYfO8Ih/S51eE7jEyV+kO+xXROFNzWhkcKRJdQp1AutiJBDLtg==
-
-unimodules-constants-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-constants-interface/-/unimodules-constants-interface-5.2.1.tgz#fa8af66276fa6784bba0a8c7d7235bdab9f88ce8"
- integrity sha512-rQCtVHUVXcjMQWdDlWmOTiKMPNygagq/73U/jt6LqfQLVglx7wMjPWSndgjp3xyM34f6hrydeWXYP6rUgDY0lg==
-
-unimodules-face-detector-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-face-detector-interface/-/unimodules-face-detector-interface-5.2.1.tgz#19b909771bd413e525e5d3934be64f513dfca560"
- integrity sha512-6FQQCKzEE2FyVW2HrfJfQTipaBWEi7yV6Fpor9aNj362kzbiEewrDH6b6XT3eBR3xiPbAHzNu6FIfA93X/jfWA==
-
-unimodules-file-system-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-file-system-interface/-/unimodules-file-system-interface-5.2.1.tgz#8ce9ca10bc1de91a5824b324bff879e344c6d183"
- integrity sha512-Z+hMrWIbTxPiOF7B7x+1bNelsJxxt/qpG3hg/bZjeC5LG6tfiqDHqnMg/Fp1U+ykeV8RoqkHBgzIMJ8seSEdFg==
-
-unimodules-font-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-font-interface/-/unimodules-font-interface-5.2.1.tgz#7f16100a693a42fc5190bdf11c79158183a5226d"
- integrity sha512-dRtXGySUqGeGNRd49rc9GYXjxf/c370mAhdDIxDLWUy+HcQfBRwawweAdpSpTmqC9ksXMbsS0X3CyjY1fv0ufQ==
-
-unimodules-image-loader-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-image-loader-interface/-/unimodules-image-loader-interface-5.2.1.tgz#e9fb5aab55c6cd38cf2d67840d83856ca636c74c"
- integrity sha512-e1yFtuVeVgwlsxWtuE+8uuThAERjB8d3VKF4XUtmOqTGV3+r1MxuV4/R5PmHLmfCa0vJlCpXITi9GeknWE0Yvg==
-
-unimodules-permissions-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-permissions-interface/-/unimodules-permissions-interface-5.2.1.tgz#97e3259d6322f4e2200685eb4b235275378e8b87"
- integrity sha512-uBbcriIBdY2kMmVKgSZePDKkM2fviSCKcHnje8wBPK6O/n2UlocVpq4DJjt13KK3YcEMHUAK+D73b12zbfOUTw==
-
-unimodules-sensors-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-sensors-interface/-/unimodules-sensors-interface-5.2.1.tgz#00ac952f30de8b4e486afbb01d81c72ece474298"
- integrity sha512-GsBJkk+LSpCJ6WIl3Ik5zk1LfflOVE2RYvH7I9XOJsJP7X8Y1urUOFtldjtwWai6nNhlMyXKAFIF4aoBOQii/A==
-
-unimodules-task-manager-interface@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/unimodules-task-manager-interface/-/unimodules-task-manager-interface-5.2.1.tgz#85cd7dcbcc152a65a56594b8fb8398ee1473a66d"
- integrity sha512-GEjay8yVO5aoh1oNGENVU4F28q2XVPOHYSoz7ZFWlg4maKg5qSNqIAwY9I4fVyd60vbFusq3zjeTPK5fGp0dWg==
+unimodules-task-manager-interface@~6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/unimodules-task-manager-interface/-/unimodules-task-manager-interface-6.2.0.tgz#e9e19ca5b28b2dfafa5768baf9da6c71bf6940d8"
+ integrity sha512-DrRVWF46TI93GbaDWAJ+bKd3vHjZq9pS8oJ6pZQN96qUTWkJ3yqa92yF118JxdGll+YtymxF/ZWCugBFMtISbA==
union-value@^1.0.0:
version "1.0.1"
@@ -16334,6 +16883,11 @@ universalify@^0.1.0, universalify@^0.1.2:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+universalify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
+ integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
+
universalify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
@@ -16525,6 +17079,11 @@ uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+uuid@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
+ integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
+
uuid@^8.0.0:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
@@ -16933,6 +17492,14 @@ xcode@^2.0.0:
simple-plist "^1.0.0"
uuid "^3.3.2"
+xcode@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c"
+ integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==
+ dependencies:
+ simple-plist "^1.1.0"
+ uuid "^7.0.3"
+
xhr@^2.0.1:
version "2.5.0"
resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd"
@@ -16953,7 +17520,7 @@ xml-parse-from-string@^1.0.0:
resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
-xml2js@^0.4.5:
+xml2js@^0.4.23, xml2js@^0.4.5:
version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
@@ -16961,6 +17528,11 @@ xml2js@^0.4.5:
sax ">=0.6.0"
xmlbuilder "~11.0.0"
+xmlbuilder@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-14.0.0.tgz#876b5aec4f05ffd5feb97b0a871c855d16fbeb8c"
+ integrity sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==
+
xmlbuilder@^9.0.7:
version "9.0.7"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
@@ -16983,7 +17555,7 @@ xmldoc@^1.1.2:
dependencies:
sax "^1.2.1"
-xmldom@^0.5.0:
+xmldom@^0.5.0, xmldom@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e"
integrity sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==