From 46a18e5b9c150631651d4859ce1e2d52b7ebc4b8 Mon Sep 17 00:00:00 2001 From: Ian Rehwinkel Date: Wed, 27 May 2026 13:01:27 +0200 Subject: [PATCH 1/2] fix(theme-common): fixed numbers being erroneously recognized as emojis --- .../src/utils/__tests__/emojiUtils.test.ts | 7 +++++++ packages/docusaurus-theme-common/src/utils/emojiUtils.ts | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/emojiUtils.test.ts b/packages/docusaurus-theme-common/src/utils/__tests__/emojiUtils.test.ts index 8fdaa6ccc25d..13a38228e597 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/emojiUtils.test.ts +++ b/packages/docusaurus-theme-common/src/utils/__tests__/emojiUtils.test.ts @@ -64,4 +64,11 @@ describe('extractLeadingEmoji', () => { rest: 'Hello World 😀', }); }); + + it('does not extract digits', () => { + expect(extractLeadingEmoji('11 Hello World')).toEqual({ + emoji: null, + rest: '11 Hello World', + }); + }); }); diff --git a/packages/docusaurus-theme-common/src/utils/emojiUtils.ts b/packages/docusaurus-theme-common/src/utils/emojiUtils.ts index c66cbfb3fa01..7c49cfbd1c14 100644 --- a/packages/docusaurus-theme-common/src/utils/emojiUtils.ts +++ b/packages/docusaurus-theme-common/src/utils/emojiUtils.ts @@ -29,10 +29,10 @@ export function extractLeadingEmoji(input: string): { return {emoji: null, rest: input}; } - // Leading grapheme contains an emoji (covers flags/ZWJ/skin tones) + // Leading grapheme contains an emoji (covers flags/ZWJ/skin tones, excludes digits) if ( !/\p{Extended_Pictographic}/u.test(grapheme) && - !/\p{Emoji}/u.test(grapheme) + !(/\p{Emoji}/u.test(grapheme) && !/\d/u.test(grapheme)) ) { return {emoji: null, rest: input}; } From fec07e4ea31d24b66456264fcf310b0aed2dd830 Mon Sep 17 00:00:00 2001 From: sebastien Date: Thu, 28 May 2026 14:23:25 +0200 Subject: [PATCH 2/2] fix extractLeadingEmoji --- .../src/utils/__tests__/emojiUtils.test.ts | 7 +++++++ packages/docusaurus-theme-common/src/utils/emojiUtils.ts | 9 ++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/emojiUtils.test.ts b/packages/docusaurus-theme-common/src/utils/__tests__/emojiUtils.test.ts index 13a38228e597..11c3983c2ed6 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/emojiUtils.test.ts +++ b/packages/docusaurus-theme-common/src/utils/__tests__/emojiUtils.test.ts @@ -71,4 +71,11 @@ describe('extractLeadingEmoji', () => { rest: '11 Hello World', }); }); + + it('extract emoji digits', () => { + expect(extractLeadingEmoji('1️⃣ Hello World')).toEqual({ + emoji: '1️⃣', + rest: ' Hello World', + }); + }); }); diff --git a/packages/docusaurus-theme-common/src/utils/emojiUtils.ts b/packages/docusaurus-theme-common/src/utils/emojiUtils.ts index 7c49cfbd1c14..cfa1cbde81c0 100644 --- a/packages/docusaurus-theme-common/src/utils/emojiUtils.ts +++ b/packages/docusaurus-theme-common/src/utils/emojiUtils.ts @@ -29,11 +29,10 @@ export function extractLeadingEmoji(input: string): { return {emoji: null, rest: input}; } - // Leading grapheme contains an emoji (covers flags/ZWJ/skin tones, excludes digits) - if ( - !/\p{Extended_Pictographic}/u.test(grapheme) && - !(/\p{Emoji}/u.test(grapheme) && !/\d/u.test(grapheme)) - ) { + // Leading grapheme contains an emoji + // Covers flags/ZWJ/skin tones, excludes digits + // See https://github.com/facebook/docusaurus/pull/12072 + if (!/^\p{RGI_Emoji}$/v.test(grapheme)) { return {emoji: null, rest: input}; }