diff --git a/packages/layout/package.json b/packages/layout/package.json index bb21711d54..93ce47dc70 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -46,8 +46,8 @@ "react-i18next": "~11.15.4" }, "devDependencies": { - "@rocket.chat/fuselage": "workspace:~", "@rocket.chat/eslint-config-alt": "workspace:~", + "@rocket.chat/fuselage": "workspace:~", "@rocket.chat/prettier-config": "workspace:~", "@storybook/addon-essentials": "~6.4.18", "@storybook/addons": "~6.4.18", diff --git a/packages/message-parser/src/grammar.pegjs b/packages/message-parser/src/grammar.pegjs index edd46d9c52..8525d84f16 100644 --- a/packages/message-parser/src/grammar.pegjs +++ b/packages/message-parser/src/grammar.pegjs @@ -27,7 +27,7 @@ strike, task, tasks, - unorderedList, + unorderedList } = require('./utils'); } @@ -371,11 +371,11 @@ hexByte = a:hexdigit b:hexdigit { return parseInt(a + b, 16); } domainName = "localhost" - / $(domainNameLabel ("." domainNameLabel)+) + / $(domainNameLabel ("." domainChar domainNameLabel)+) -domainNameLabel = $(domainChar domainChar+ $("-" domainChar+)*) +domainNameLabel = $(domainChar+ $("-" domainChar+)*) -domainChar = !"/" !"|" !">" !"<" !safe !extra !EndOfLine !Space . +domainChar = !"\\" !"/" !"|" !">" !"<" !safe !extra !EndOfLine !Space . /** * @@ -546,7 +546,6 @@ inlineKatexEnd / & { return options.katex?.dollarSyntax; } "$" /* Emoticons */ - emoticon = & { return options.emoticons; } e:emoticonPattern { return e; } emoticonPattern diff --git a/packages/message-parser/src/utils.ts b/packages/message-parser/src/utils.ts index c628a09dde..261b45673b 100644 --- a/packages/message-parser/src/utils.ts +++ b/packages/message-parser/src/utils.ts @@ -131,21 +131,45 @@ export const emoticon = (emoticon: string, shortCode: string): Emoji => ({ shortCode, }); +const joinEmoji = ( + current: Inlines, + previous: Inlines | undefined, + next: Inlines | undefined +): Inlines => { + if (current.type !== 'EMOJI' || !current.value || (!previous && !next)) { + return current; + } + + const hasEmojiAsNeighbor = + previous?.type === current.type || current.type === next?.type; + const hasPlainAsNeighbor = + (previous?.type === 'PLAIN_TEXT' && previous.value.trim() !== '') || + (next?.type === 'PLAIN_TEXT' && next.value.trim() !== ''); + + if (current.value && (hasEmojiAsNeighbor || hasPlainAsNeighbor)) { + return current.value; + } + + return current; +}; + export const reducePlainTexts = ( values: Paragraph['value'] ): Paragraph['value'] => values.reduce((result, item, index) => { - if (index > 0) { - const previous = result[result.length - 1]; - if (item.type === 'PLAIN_TEXT' && item.type === previous.type) { - previous.value += item.value; + const next = values[index + 1]; + const current = joinEmoji(item, values[index - 1], next); + const previous: Inlines = result[result.length - 1]; + + if (previous) { + if (current.type === 'PLAIN_TEXT' && current.type === previous.type) { + previous.value += current.value; return result; } } - return [...result, item]; + return [...result, current]; }, [] as Paragraph['value']); - export const lineBreak = (): LineBreak => ({ type: 'LINE_BREAK', value: undefined, diff --git a/packages/message-parser/tests/any.test.ts b/packages/message-parser/tests/any.test.ts index 936154932b..63e9a72c91 100644 --- a/packages/message-parser/tests/any.test.ts +++ b/packages/message-parser/tests/any.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { paragraph, plain } from '../src/utils'; test.each([ @@ -9,5 +9,5 @@ test.each([ [paragraph([plain('free text with unxpected/unfinished blocks *bold_')])], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/blockquotes.test.ts b/packages/message-parser/tests/blockquotes.test.ts index ff96603e4f..835074ec7f 100644 --- a/packages/message-parser/tests/blockquotes.test.ts +++ b/packages/message-parser/tests/blockquotes.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { paragraph, plain, quote, bold } from '../src/utils'; test.each([ @@ -36,5 +36,5 @@ As Rocket Cat said: ], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/codeFence.test.ts b/packages/message-parser/tests/codeFence.test.ts index cc349ae992..3c13ca3b8e 100644 --- a/packages/message-parser/tests/codeFence.test.ts +++ b/packages/message-parser/tests/codeFence.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { paragraph, plain, codeLine, code } from '../src/utils'; const multiply = (a: number, element: T): Array => @@ -79,5 +79,5 @@ code [code([codeLine(plain(`# code`)), codeLine(plain(`**code**`))])], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/color.test.ts b/packages/message-parser/tests/color.test.ts index d70f731346..9e492dbcfb 100644 --- a/packages/message-parser/tests/color.test.ts +++ b/packages/message-parser/tests/color.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { color, paragraph, plain } from '../src/utils'; test.each([ @@ -26,9 +26,9 @@ test.each([ ['color:#c7', [paragraph([plain('color:#c7')])], undefined], ['color:#zzz', [paragraph([plain('color:#zzz')])], undefined], ])('parses %p', (input, output, disabledOutput) => { - expect(parser(input, { colors: true })).toMatchObject(output); + expect(parse(input, { colors: true })).toMatchObject(output); if (disabledOutput) { - expect(parser(input, { colors: false })).toMatchObject(disabledOutput); + expect(parse(input, { colors: false })).toMatchObject(disabledOutput); } }); diff --git a/packages/message-parser/tests/email.test.ts b/packages/message-parser/tests/email.test.ts index a35ef8c4ab..0a72f1fa06 100644 --- a/packages/message-parser/tests/email.test.ts +++ b/packages/message-parser/tests/email.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { link, paragraph, plain } from '../src/utils'; test.each([ @@ -150,5 +150,5 @@ test.each([ // [paragraph([plain('My email is fake@gmail.comf')])], // ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/emoji.test.ts b/packages/message-parser/tests/emoji.test.ts index 60ea69a25e..1eb0476d4e 100644 --- a/packages/message-parser/tests/emoji.test.ts +++ b/packages/message-parser/tests/emoji.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { emoji, bigEmoji, paragraph, plain, emojiUnicode } from '../src/utils'; test.each([ @@ -14,12 +14,14 @@ test.each([ [paragraph([plain('asdas '), emoji('smille'), plain(' asd')])], ], [ - 'normal emojis :smile::smile::smile:', + 'normal emojis :smile: :smile: :smile:', [ paragraph([ plain('normal emojis '), emoji('smile'), + plain(' '), emoji('smile'), + plain(' '), emoji('smile'), ]), ], @@ -43,7 +45,7 @@ test.each([ [':smile::smile:', [bigEmoji([emoji('smile'), emoji('smile')])]], [':smile:', [bigEmoji([emoji('smile')])]], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); test.each([ @@ -80,5 +82,5 @@ test.each([ ], ['👆🏺', [bigEmoji([emojiUnicode('👆'), emojiUnicode('🏺')])]], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/emoticons.test.ts b/packages/message-parser/tests/emoticons.test.ts index ef3bc54153..f50f3b754e 100644 --- a/packages/message-parser/tests/emoticons.test.ts +++ b/packages/message-parser/tests/emoticons.test.ts @@ -1,35 +1,59 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { bigEmoji, paragraph, plain, emoticon } from '../src/utils'; test.each([ - ['=) asd', [paragraph([emoticon('=)', 'slight_smile'), plain(' asd')])]], + // Should render normal Emojis [ - `=) - =) - `, + `test + :) test`, [ - bigEmoji([ - emoticon('=)', 'slight_smile'), - emoticon('=)', 'slight_smile'), + paragraph([plain('test')]), + paragraph([ + plain(' '), + emoticon(':)', 'slight_smile'), + plain(' test'), ]), ], ], + [':) asd', [paragraph([emoticon(':)', 'slight_smile'), plain(' asd')])]], + [':) asd', [paragraph([emoticon(':)', 'slight_smile'), plain(' asd')])]], + [ + ' :) asd', + [paragraph([plain(' '), emoticon(':)', 'slight_smile'), plain(' asd')])], + ], + ['Hi :)', [paragraph([plain('Hi '), emoticon(':)', 'slight_smile')])]], [ - 'asdas =) asd', + 'asdas :) asd', [ paragraph([ plain('asdas '), - emoticon('=)', 'slight_smile'), + emoticon(':)', 'slight_smile'), plain(' asd'), ]), ], ], [ - 'normal emojis :):):)', + ':) :) :) :)', [ paragraph([ - plain('normal emojis '), emoticon(':)', 'slight_smile'), + plain(' '), + emoticon(':)', 'slight_smile'), + plain(' '), + emoticon(':)', 'slight_smile'), + plain(' '), + emoticon(':)', 'slight_smile'), + ]), + ], + ], + + // Should render BigEmojis + [ + `:) + :) + `, + [ + bigEmoji([ emoticon(':)', 'slight_smile'), emoticon(':)', 'slight_smile'), ]), @@ -45,6 +69,7 @@ test.each([ ]), ], ], + [ ' :):):) ', [ @@ -55,6 +80,7 @@ test.each([ ]), ], ], + [ '\n :):):) \n', [ @@ -75,8 +101,9 @@ test.each([ ]), ], ], + [ - ':):)', + ':) :)', [ bigEmoji([ emoticon(':)', 'slight_smile'), @@ -85,6 +112,20 @@ test.each([ ], ], [':)', [bigEmoji([emoticon(':)', 'slight_smile')])]], + [' :)', [bigEmoji([emoticon(':)', 'slight_smile')])]], + [':) ', [bigEmoji([emoticon(':)', 'slight_smile')])]], + [' :) ', [bigEmoji([emoticon(':)', 'slight_smile')])]], + + // Should not render Emojis or BigEmojis if they are not surrounded by spaces + ['normal emojis :):):)', [paragraph([plain('normal emojis :):):)')])]], + [':):):) normal emojis', [paragraph([plain(':):):) normal emojis')])]], + [':):):):)', [paragraph([plain(':):):):)')])]], + ['10:30', [paragraph([plain('10:30')])]], + ['he:)llo', [paragraph([plain('he:)llo')])]], + [':)Hi', [paragraph([plain(':)Hi')])]], + ['Hi:) Hi', [paragraph([plain('Hi:) Hi')])]], + ['Hi:)', [paragraph([plain('Hi:)')])]], + ['@#@#! :)@!@', [paragraph([plain('@#@#! :)@!@')])]], ])('parses %p', (input, output) => { - expect(parser(input, { emoticons: true })).toMatchObject(output); + expect(parse(input, { emoticons: true })).toMatchObject(output); }); diff --git a/packages/message-parser/tests/emphasis.test.ts b/packages/message-parser/tests/emphasis.test.ts index c232865443..d82b91839a 100644 --- a/packages/message-parser/tests/emphasis.test.ts +++ b/packages/message-parser/tests/emphasis.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { italic, paragraph, @@ -98,5 +98,5 @@ test.each([ ['_hello_text', [paragraph([plain('_hello_text')])]], ['text_hello_', [paragraph([plain('text_hello_')])]], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/escaped.test.ts b/packages/message-parser/tests/escaped.test.ts index e22dfcc5e5..e0e6eaa939 100644 --- a/packages/message-parser/tests/escaped.test.ts +++ b/packages/message-parser/tests/escaped.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { paragraph, plain, bold } from '../src/utils'; test.each([ @@ -34,5 +34,5 @@ test.each([ [paragraph([plain('ö not a character entity')])], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/heading.test.ts b/packages/message-parser/tests/heading.test.ts index b1414294ef..84b9463bb6 100644 --- a/packages/message-parser/tests/heading.test.ts +++ b/packages/message-parser/tests/heading.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { heading, lineBreak, @@ -54,5 +54,5 @@ test.each([ ['# Hello\n', [heading([plain('Hello')], 1), lineBreak()]], ['# # Hello\n', [heading([plain('# Hello')], 1), lineBreak()]], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/image.test.ts b/packages/message-parser/tests/image.test.ts index 0680ae2ead..a9e0306bbf 100644 --- a/packages/message-parser/tests/image.test.ts +++ b/packages/message-parser/tests/image.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { image, paragraph, plain } from '../src/utils'; test.each([ @@ -15,5 +15,5 @@ test.each([ [paragraph([image('https://rocket.chat/assets/img/header/logo.svg')])], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/inlineCode.test.ts b/packages/message-parser/tests/inlineCode.test.ts index 1479574eb6..ddbc1a4d41 100644 --- a/packages/message-parser/tests/inlineCode.test.ts +++ b/packages/message-parser/tests/inlineCode.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { inlineCode, paragraph, plain } from '../src/utils'; test.each([ @@ -8,5 +8,5 @@ test.each([ ], [`\`code\``, [paragraph([inlineCode(plain('code'))])]], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/katex.test.ts b/packages/message-parser/tests/katex.test.ts index 7fcaea5d71..2ffb3ec2f0 100644 --- a/packages/message-parser/tests/katex.test.ts +++ b/packages/message-parser/tests/katex.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { inlineKatex, katex, paragraph, plain } from '../src/utils'; test.each([ @@ -27,7 +27,7 @@ test.each([ ], ], ])('parses %p', (input, output) => { - expect(parser(input, { katex: { parenthesisSyntax: true } })).toMatchObject( + expect(parse(input, { katex: { parenthesisSyntax: true } })).toMatchObject( output ); }); diff --git a/packages/message-parser/tests/lineBreak.test.ts b/packages/message-parser/tests/lineBreak.test.ts index e65e3b5784..e4faf67b17 100644 --- a/packages/message-parser/tests/lineBreak.test.ts +++ b/packages/message-parser/tests/lineBreak.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { lineBreak, paragraph, plain } from '../src/utils'; test.each([ @@ -31,5 +31,5 @@ test2 ], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/link.test.ts b/packages/message-parser/tests/link.test.ts index 84d9230617..bf4fe55be3 100644 --- a/packages/message-parser/tests/link.test.ts +++ b/packages/message-parser/tests/link.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { link, paragraph, @@ -239,6 +239,18 @@ test.each([ '[custom](custom://google.com)', [paragraph([link('custom://google.com', plain('custom'))])], ], + [ + 'https://t.me/joinchat/chatexample', + [paragraph([link('https://t.me/joinchat/chatexample')])], + ], + [ + '[telegram invite](https://t.me/joinchat/chatexample)', + [ + paragraph([ + link('https://t.me/joinchat/chatexample', plain('telegram invite')), + ]), + ], + ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/mention.test.ts b/packages/message-parser/tests/mention.test.ts index 10ce86921f..68d668ad21 100644 --- a/packages/message-parser/tests/mention.test.ts +++ b/packages/message-parser/tests/mention.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { paragraph, plain, mentionUser, mentionChannel } from '../src/utils'; test.each([ @@ -9,5 +9,5 @@ test.each([ ], ['#GENERAL', [paragraph([mentionChannel('GENERAL')])]], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/orderedList.test.ts b/packages/message-parser/tests/orderedList.test.ts index e35bf6638a..2939c4842e 100644 --- a/packages/message-parser/tests/orderedList.test.ts +++ b/packages/message-parser/tests/orderedList.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { bold, plain, orderedList, listItem } from '../src/utils'; test.each([ @@ -21,5 +21,5 @@ test.each([ ], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/phoneNumber.test.ts b/packages/message-parser/tests/phoneNumber.test.ts index b77b138ad2..57c95dfc63 100644 --- a/packages/message-parser/tests/phoneNumber.test.ts +++ b/packages/message-parser/tests/phoneNumber.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { link, paragraph, plain, bold } from '../src/utils'; test.each([ @@ -27,5 +27,5 @@ test.each([ [paragraph([link('tel:07563546725', bold([plain('here')]))])], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/strikethrough.test.ts b/packages/message-parser/tests/strikethrough.test.ts index 6376c17ee1..2891f34e40 100644 --- a/packages/message-parser/tests/strikethrough.test.ts +++ b/packages/message-parser/tests/strikethrough.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { strike, paragraph, plain, link } from '../src/utils'; test.each([ @@ -91,5 +91,5 @@ test.each([ ], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/strongEmphasis.test.ts b/packages/message-parser/tests/strongEmphasis.test.ts index 6e528574f7..9651aca317 100644 --- a/packages/message-parser/tests/strongEmphasis.test.ts +++ b/packages/message-parser/tests/strongEmphasis.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { bold, link, paragraph, plain, italic, strike } from '../src/utils'; test.each([ @@ -125,5 +125,5 @@ test.each([ ], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/tasks.test.ts b/packages/message-parser/tests/tasks.test.ts index a4d6fc0399..4230cecc1a 100644 --- a/packages/message-parser/tests/tasks.test.ts +++ b/packages/message-parser/tests/tasks.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { plain, tasks, @@ -45,5 +45,5 @@ test.each([ ], ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/unorderedList.test.ts b/packages/message-parser/tests/unorderedList.test.ts index f481acf33d..771e068927 100644 --- a/packages/message-parser/tests/unorderedList.test.ts +++ b/packages/message-parser/tests/unorderedList.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { unorderedList, plain, listItem, bold } from '../src/utils'; test.each([ @@ -74,5 +74,5 @@ test.each([ // [paragraph([])], // ], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); diff --git a/packages/message-parser/tests/url.test.ts b/packages/message-parser/tests/url.test.ts index 0892411895..5f2609d393 100644 --- a/packages/message-parser/tests/url.test.ts +++ b/packages/message-parser/tests/url.test.ts @@ -1,4 +1,4 @@ -import { parser } from '../src'; +import { parse } from '../src'; import { link, paragraph, plain } from '../src/utils'; test.each([ @@ -61,7 +61,7 @@ test.each([ ['custom://test@test.test', [paragraph([link('custom://test@test.test')])]], ['ftp://test.com', [paragraph([link('ftp://test.com')])]], ])('parses %p', (input, output) => { - expect(parser(input)).toMatchObject(output); + expect(parse(input)).toMatchObject(output); }); describe('link helper function', () => { diff --git a/yarn.lock b/yarn.lock index 8cc9f7aff5..9501aaba49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7511,7 +7511,7 @@ __metadata: languageName: unknown linkType: soft -"@rocket.chat/fuselage@*, @rocket.chat/fuselage@workspace:packages/fuselage, @rocket.chat/fuselage@workspace:~": +"@rocket.chat/fuselage@workspace:packages/fuselage, @rocket.chat/fuselage@workspace:~": version: 0.0.0-use.local resolution: "@rocket.chat/fuselage@workspace:packages/fuselage" dependencies: @@ -7626,7 +7626,7 @@ __metadata: resolution: "@rocket.chat/layout@workspace:packages/layout" dependencies: "@rocket.chat/eslint-config-alt": "workspace:~" - "@rocket.chat/fuselage": "*" + "@rocket.chat/fuselage": "workspace:~" "@rocket.chat/prettier-config": "workspace:~" "@storybook/addon-essentials": ~6.4.18 "@storybook/addons": ~6.4.18 @@ -7641,12 +7641,16 @@ __metadata: lint-staged: ~12.3.3 npm-run-all: ^4.1.5 prettier: ~2.5.1 - react-i18next: ~11.18.3 rimraf: ~3.0.2 storybook-dark-mode: ^1.0.8 ts-jest: ~27.1.3 typedoc: ~0.22.11 typescript: ~4.3.5 + peerDependencies: + "@rocket.chat/fuselage": "*" + react: 17.0.2 + react-dom: 17.0.2 + react-i18next: ~11.15.4 languageName: unknown linkType: soft @@ -28438,24 +28442,6 @@ fsevents@~2.1.2: languageName: node linkType: hard -"react-i18next@npm:~11.18.3": - version: 11.18.3 - resolution: "react-i18next@npm:11.18.3" - dependencies: - "@babel/runtime": ^7.14.5 - html-parse-stringify: ^3.0.1 - peerDependencies: - i18next: ">= 19.0.0" - react: ">= 16.8.0" - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 05fe3187dd092000c9f24dfd0cad2bd433f9a88a78cec2b43d74545ea1ec014f2b4e2ac84c579480be15bc571ef7fb2a2fafbe0bfac02f80ce10a8ffc6ad91e7 - languageName: node - linkType: hard - "react-inspector@npm:^5.1.0": version: 5.1.1 resolution: "react-inspector@npm:5.1.1"