@adminide-stack/yantra-mobile 12.0.69-alpha.20 โ 12.0.69-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/messaging/ContactsScreen.js +61 -3
- package/lib/features/messaging/ContactsScreen.js.map +1 -1
- package/lib/features/messaging/MessageActions.js +11 -4
- package/lib/features/messaging/MessageActions.js.map +1 -1
- package/lib/features/messaging/NativeChatExperience.js +4 -1
- package/lib/features/messaging/NativeChatExperience.js.map +1 -1
- package/lib/features/messaging/chatInviteLink.js +2 -2
- package/lib/features/messaging/chatInviteLink.js.map +1 -1
- package/lib/features/messaging/emojiCatalog.js +26 -2
- package/lib/features/messaging/emojiCatalog.js.map +1 -1
- package/lib/features/messaging/emojiKeywords.js +1592 -0
- package/lib/features/messaging/emojiKeywords.js.map +1 -0
- package/lib/features/messaging/useContactMatches.js +13 -1
- package/lib/features/messaging/useContactMatches.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const list = (s) => Array.from(s.replace(/\s+/g, " ").trim().split(" "));
|
|
1
|
+
import {EMOJI_KEYWORDS_SOURCE}from'./emojiKeywords.js';const list = (s) => Array.from(s.replace(/\s+/g, " ").trim().split(" "));
|
|
2
2
|
const EMOJI_CATEGORIES = [{
|
|
3
3
|
key: "smileys",
|
|
4
4
|
title: "Smileys & People",
|
|
@@ -33,4 +33,28 @@ function emojiFromInput(text) {
|
|
|
33
33
|
if (!value || value.length > 16) return null;
|
|
34
34
|
if (/[A-Za-z0-9\s.,;:'"!?@#$%^&*()\-_=+[\]{}<>/\\|`~]/.test(value)) return null;
|
|
35
35
|
return value;
|
|
36
|
-
}
|
|
36
|
+
}
|
|
37
|
+
let emojiIndex = null;
|
|
38
|
+
function getEmojiIndex() {
|
|
39
|
+
if (!emojiIndex) {
|
|
40
|
+
emojiIndex = EMOJI_KEYWORDS_SOURCE.split("\n").map((line) => line.trim().split(" ")).filter((parts) => parts.length > 1).map(([emoji, ...words]) => ({
|
|
41
|
+
emoji,
|
|
42
|
+
words
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
return emojiIndex;
|
|
46
|
+
}
|
|
47
|
+
function searchEmoji(query, limit = 96) {
|
|
48
|
+
const terms = query.toLowerCase().trim().split(/\s+/).filter(Boolean);
|
|
49
|
+
if (!terms.length) return [];
|
|
50
|
+
const named = [];
|
|
51
|
+
const tagged = [];
|
|
52
|
+
for (const {
|
|
53
|
+
emoji,
|
|
54
|
+
words
|
|
55
|
+
} of getEmojiIndex()) {
|
|
56
|
+
if (!terms.every((t) => words.some((w) => w.startsWith(t)))) continue;
|
|
57
|
+
(words[0].startsWith(terms[0]) ? named : tagged).push(emoji);
|
|
58
|
+
}
|
|
59
|
+
return [...named, ...tagged].slice(0, limit);
|
|
60
|
+
}export{EMOJI_CATEGORIES,emojiFromInput,searchEmoji};//# sourceMappingURL=emojiCatalog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emojiCatalog.js","sources":["../../../src/features/messaging/emojiCatalog.ts"],"sourcesContent":["/**\n * Emoji grid for the \"+\" Tapback picker. Plain data rather than an emoji\n * package: the remote ships no extra dependencies, and the system emoji\n * keyboard in the picker covers everything not listed here.\n */\nexport interface EmojiCategory {\n key: string;\n title: string;\n emojis: string[];\n}\n\nconst list = (s: string) => Array.from(s.replace(/\\s+/g, ' ').trim().split(' '));\n\nexport const EMOJI_CATEGORIES: EmojiCategory[] = [\n {\n key: 'smileys',\n title: 'Smileys & People',\n emojis: list(\n `๐ ๐ ๐ ๐ ๐ ๐
๐คฃ ๐ ๐ ๐ ๐ ๐ ๐ ๐ฅฐ ๐ ๐คฉ ๐ ๐ ๐ ๐ ๐ฅฒ ๐ ๐ ๐ ๐คช ๐ ๐ค ๐ค ๐คญ ๐คซ ๐ค ๐ค ๐คจ ๐ ๐ ๐ถ ๐ ๐ ๐ ๐ฌ ๐ฎโ๐จ ๐คฅ ๐ ๐ ๐ช ๐คค ๐ด ๐ท ๐ค ๐ค ๐คข ๐คฎ ๐ฅต ๐ฅถ ๐ฅด ๐ต ๐คฏ ๐ค ๐ฅณ ๐ฅธ ๐ ๐ค ๐ง ๐ ๐ ๐ ๐ฎ ๐ฏ ๐ฒ ๐ณ ๐ฅบ ๐ฆ ๐ง ๐จ ๐ฐ ๐ฅ ๐ข ๐ญ ๐ฑ ๐ ๐ฃ ๐ ๐ ๐ฉ ๐ซ ๐ฅฑ ๐ค ๐ก ๐ ๐คฌ ๐ ๐ฟ ๐ ๐ฉ ๐คก ๐ป ๐ฝ ๐ค ๐บ ๐ธ ๐น ๐ป ๐ผ ๐ฝ ๐ ๐ฟ ๐พ`,\n ),\n },\n {\n key: 'gestures',\n title: 'Gestures & Body',\n emojis: list(\n `๐ ๐ค ๐๏ธ โ ๐ ๐ ๐ค ๐ค โ๏ธ ๐ค ๐ค ๐ค ๐ค ๐ ๐ ๐ ๐ โ๏ธ ๐ ๐ โ ๐ ๐ค ๐ค ๐ ๐ ๐ ๐คฒ ๐ค ๐ โ๏ธ ๐
๐ช ๐ฆพ ๐ง ๐ ๐๏ธ ๐
๐ ๐ ๐ซถ ๐ซก ๐ซ ๐ซข ๐ซฃ ๐ซฅ`,\n ),\n },\n {\n key: 'hearts',\n title: 'Hearts & Symbols',\n emojis: list(\n `โค๏ธ ๐งก ๐ ๐ ๐ ๐ ๐ค ๐ค ๐ค ๐ โค๏ธโ๐ฅ โค๏ธโ๐ฉน โฃ๏ธ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ฏ ๐ข ๐ฅ ๐ซ ๐ฆ ๐จ ๐ณ๏ธ ๐ฌ ๐ญ ๐ค โจ โญ ๐ ๐ฅ โก โผ๏ธ โ๏ธ โ โ โ
โ โญ ๐ซ ๐ก ๐ฏ ๐ ๐ต ๐ถ โ โ โ๏ธ ๐ ๐ ๐ ๐`,\n ),\n },\n {\n key: 'animals',\n title: 'Animals & Nature',\n emojis: list(\n `๐ถ ๐ฑ ๐ญ ๐น ๐ฐ ๐ฆ ๐ป ๐ผ ๐จ ๐ฏ ๐ฆ ๐ฎ ๐ท ๐ธ ๐ต ๐ ๐ ๐ ๐ ๐ง ๐ฆ ๐ฆ ๐ฆ
๐ฆ ๐บ ๐ด ๐ฆ ๐ ๐ฆ ๐ ๐ ๐ข ๐ ๐ ๐ฆ ๐ ๐ฌ ๐ณ ๐ฆ ๐ ๐ ๐ฆ ๐ช ๐ ๐ ๐ต ๐ ๐ฒ ๐ด ๐ฑ ๐ ๐ ๐ ๐ท ๐น ๐บ ๐ธ ๐ผ ๐ป ๐ ๐ ๐ ๐ ๐ โ๏ธ โ
โ๏ธ ๐ง๏ธ โ๏ธ โ๏ธ โ๏ธ ๐`,\n ),\n },\n {\n key: 'food',\n title: 'Food & Drink',\n emojis: list(\n `๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ซ ๐ ๐ ๐ฅญ ๐ ๐ฅฅ ๐ฅ ๐
๐ฅ ๐ถ๏ธ ๐ฝ ๐ฅ ๐ฅ ๐ฅ ๐ ๐ง ๐ฅ ๐ณ ๐ฅ ๐ฅ ๐ ๐ ๐ญ ๐ ๐ ๐ ๐ฅช ๐ฎ ๐ฏ ๐ฅ ๐ ๐ ๐ฒ ๐ ๐ฃ ๐ฑ ๐ฅ ๐ค ๐ ๐ฆ ๐ฉ ๐ช ๐ ๐ฐ ๐ง ๐ซ ๐ฌ ๐ญ ๐ฟ โ ๐ต ๐ง ๐ฅค ๐ง ๐บ ๐ป ๐ฅ ๐ท ๐ธ ๐น`,\n ),\n },\n {\n key: 'activity',\n title: 'Activity & Objects',\n emojis: list(\n `โฝ ๐ ๐ โพ ๐พ ๐ ๐ ๐ฑ ๐ ๐ธ ๐ โณ ๐ฅ ๐ ๐ฅ ๐ฅ ๐ฅ ๐
๐๏ธ ๐ ๐ ๐ ๐ ๐ ๐ฎ ๐น๏ธ ๐ฒ ๐งฉ ๐จ ๐ฌ ๐ค ๐ง ๐ธ ๐น ๐ฅ ๐ท ๐ฑ ๐ป โจ๏ธ ๐ฅ๏ธ ๐ ๐ฐ ๐ต ๐ณ ๐ ๐ ๐ ๐ โ๏ธ ๐ ๐ ๐
โฐ โ ๐ ๐ ๐จ ๐ ๏ธ ๐ ๐ ๐ ๐ ๐ โ๏ธ ๐ฒ ๐ ๐ข ๐บ๏ธ ๐๏ธ โฐ๏ธ`,\n ),\n },\n {\n key: 'flags',\n title: 'Flags',\n emojis: list(`๐ณ๏ธ ๐ด ๐ ๐ฉ ๐ณ๏ธโ๐ ๐ฎ๐ณ ๐บ๐ธ ๐ฌ๐ง ๐จ๐ฆ ๐ฆ๐บ ๐ฉ๐ช ๐ซ๐ท ๐ช๐ธ ๐ฎ๐น ๐ฏ๐ต ๐ฐ๐ท ๐จ๐ณ ๐ง๐ท ๐ฒ๐ฝ ๐ฆ๐ช ๐ธ๐ฆ ๐ธ๐ฌ ๐ณ๐ฟ ๐ฟ๐ฆ ๐ณ๐ฌ ๐ท๐บ ๐น๐ท ๐ณ๐ฑ ๐ธ๐ช ๐จ๐ญ`),\n },\n];\n\n/**\n * The reaction to use from what the user typed in the picker's text field, or\n * null while it holds nothing emoji-like. Letters, digits and plain punctuation\n * are ignored so the field cannot turn into a free-text reaction.\n */\nexport function emojiFromInput(text: string): string | null {\n const value = text.trim();\n if (!value || value.length > 16) return null;\n if (/[A-Za-z0-9\\s.,;:'\"!?@#$%^&*()\\-_=+[\\]{}<>/\\\\|`~]/.test(value)) return null;\n return value;\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emojiCatalog.js","sources":["../../../src/features/messaging/emojiCatalog.ts"],"sourcesContent":["import { EMOJI_KEYWORDS_SOURCE } from './emojiKeywords';\n\n/**\n * Emoji grid for the \"+\" Tapback picker. Plain data rather than an emoji\n * package: the remote ships no extra dependencies, and the system emoji\n * keyboard in the picker covers everything not listed here.\n */\nexport interface EmojiCategory {\n key: string;\n title: string;\n emojis: string[];\n}\n\nconst list = (s: string) => Array.from(s.replace(/\\s+/g, ' ').trim().split(' '));\n\nexport const EMOJI_CATEGORIES: EmojiCategory[] = [\n {\n key: 'smileys',\n title: 'Smileys & People',\n emojis: list(\n `๐ ๐ ๐ ๐ ๐ ๐
๐คฃ ๐ ๐ ๐ ๐ ๐ ๐ ๐ฅฐ ๐ ๐คฉ ๐ ๐ ๐ ๐ ๐ฅฒ ๐ ๐ ๐ ๐คช ๐ ๐ค ๐ค ๐คญ ๐คซ ๐ค ๐ค ๐คจ ๐ ๐ ๐ถ ๐ ๐ ๐ ๐ฌ ๐ฎโ๐จ ๐คฅ ๐ ๐ ๐ช ๐คค ๐ด ๐ท ๐ค ๐ค ๐คข ๐คฎ ๐ฅต ๐ฅถ ๐ฅด ๐ต ๐คฏ ๐ค ๐ฅณ ๐ฅธ ๐ ๐ค ๐ง ๐ ๐ ๐ ๐ฎ ๐ฏ ๐ฒ ๐ณ ๐ฅบ ๐ฆ ๐ง ๐จ ๐ฐ ๐ฅ ๐ข ๐ญ ๐ฑ ๐ ๐ฃ ๐ ๐ ๐ฉ ๐ซ ๐ฅฑ ๐ค ๐ก ๐ ๐คฌ ๐ ๐ฟ ๐ ๐ฉ ๐คก ๐ป ๐ฝ ๐ค ๐บ ๐ธ ๐น ๐ป ๐ผ ๐ฝ ๐ ๐ฟ ๐พ`,\n ),\n },\n {\n key: 'gestures',\n title: 'Gestures & Body',\n emojis: list(\n `๐ ๐ค ๐๏ธ โ ๐ ๐ ๐ค ๐ค โ๏ธ ๐ค ๐ค ๐ค ๐ค ๐ ๐ ๐ ๐ โ๏ธ ๐ ๐ โ ๐ ๐ค ๐ค ๐ ๐ ๐ ๐คฒ ๐ค ๐ โ๏ธ ๐
๐ช ๐ฆพ ๐ง ๐ ๐๏ธ ๐
๐ ๐ ๐ซถ ๐ซก ๐ซ ๐ซข ๐ซฃ ๐ซฅ`,\n ),\n },\n {\n key: 'hearts',\n title: 'Hearts & Symbols',\n emojis: list(\n `โค๏ธ ๐งก ๐ ๐ ๐ ๐ ๐ค ๐ค ๐ค ๐ โค๏ธโ๐ฅ โค๏ธโ๐ฉน โฃ๏ธ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ฏ ๐ข ๐ฅ ๐ซ ๐ฆ ๐จ ๐ณ๏ธ ๐ฌ ๐ญ ๐ค โจ โญ ๐ ๐ฅ โก โผ๏ธ โ๏ธ โ โ โ
โ โญ ๐ซ ๐ก ๐ฏ ๐ ๐ต ๐ถ โ โ โ๏ธ ๐ ๐ ๐ ๐`,\n ),\n },\n {\n key: 'animals',\n title: 'Animals & Nature',\n emojis: list(\n `๐ถ ๐ฑ ๐ญ ๐น ๐ฐ ๐ฆ ๐ป ๐ผ ๐จ ๐ฏ ๐ฆ ๐ฎ ๐ท ๐ธ ๐ต ๐ ๐ ๐ ๐ ๐ง ๐ฆ ๐ฆ ๐ฆ
๐ฆ ๐บ ๐ด ๐ฆ ๐ ๐ฆ ๐ ๐ ๐ข ๐ ๐ ๐ฆ ๐ ๐ฌ ๐ณ ๐ฆ ๐ ๐ ๐ฆ ๐ช ๐ ๐ ๐ต ๐ ๐ฒ ๐ด ๐ฑ ๐ ๐ ๐ ๐ท ๐น ๐บ ๐ธ ๐ผ ๐ป ๐ ๐ ๐ ๐ ๐ โ๏ธ โ
โ๏ธ ๐ง๏ธ โ๏ธ โ๏ธ โ๏ธ ๐`,\n ),\n },\n {\n key: 'food',\n title: 'Food & Drink',\n emojis: list(\n `๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ซ ๐ ๐ ๐ฅญ ๐ ๐ฅฅ ๐ฅ ๐
๐ฅ ๐ถ๏ธ ๐ฝ ๐ฅ ๐ฅ ๐ฅ ๐ ๐ง ๐ฅ ๐ณ ๐ฅ ๐ฅ ๐ ๐ ๐ญ ๐ ๐ ๐ ๐ฅช ๐ฎ ๐ฏ ๐ฅ ๐ ๐ ๐ฒ ๐ ๐ฃ ๐ฑ ๐ฅ ๐ค ๐ ๐ฆ ๐ฉ ๐ช ๐ ๐ฐ ๐ง ๐ซ ๐ฌ ๐ญ ๐ฟ โ ๐ต ๐ง ๐ฅค ๐ง ๐บ ๐ป ๐ฅ ๐ท ๐ธ ๐น`,\n ),\n },\n {\n key: 'activity',\n title: 'Activity & Objects',\n emojis: list(\n `โฝ ๐ ๐ โพ ๐พ ๐ ๐ ๐ฑ ๐ ๐ธ ๐ โณ ๐ฅ ๐ ๐ฅ ๐ฅ ๐ฅ ๐
๐๏ธ ๐ ๐ ๐ ๐ ๐ ๐ฎ ๐น๏ธ ๐ฒ ๐งฉ ๐จ ๐ฌ ๐ค ๐ง ๐ธ ๐น ๐ฅ ๐ท ๐ฑ ๐ป โจ๏ธ ๐ฅ๏ธ ๐ ๐ฐ ๐ต ๐ณ ๐ ๐ ๐ ๐ โ๏ธ ๐ ๐ ๐
โฐ โ ๐ ๐ ๐จ ๐ ๏ธ ๐ ๐ ๐ ๐ ๐ โ๏ธ ๐ฒ ๐ ๐ข ๐บ๏ธ ๐๏ธ โฐ๏ธ`,\n ),\n },\n {\n key: 'flags',\n title: 'Flags',\n emojis: list(`๐ณ๏ธ ๐ด ๐ ๐ฉ ๐ณ๏ธโ๐ ๐ฎ๐ณ ๐บ๐ธ ๐ฌ๐ง ๐จ๐ฆ ๐ฆ๐บ ๐ฉ๐ช ๐ซ๐ท ๐ช๐ธ ๐ฎ๐น ๐ฏ๐ต ๐ฐ๐ท ๐จ๐ณ ๐ง๐ท ๐ฒ๐ฝ ๐ฆ๐ช ๐ธ๐ฆ ๐ธ๐ฌ ๐ณ๐ฟ ๐ฟ๐ฆ ๐ณ๐ฌ ๐ท๐บ ๐น๐ท ๐ณ๐ฑ ๐ธ๐ช ๐จ๐ญ`),\n },\n];\n\n/**\n * The reaction to use from what the user typed in the picker's text field, or\n * null while it holds nothing emoji-like. Letters, digits and plain punctuation\n * are ignored so the field cannot turn into a free-text reaction.\n */\nexport function emojiFromInput(text: string): string | null {\n const value = text.trim();\n if (!value || value.length > 16) return null;\n if (/[A-Za-z0-9\\s.,;:'\"!?@#$%^&*()\\-_=+[\\]{}<>/\\\\|`~]/.test(value)) return null;\n return value;\n}\n\ninterface EmojiEntry {\n emoji: string;\n words: string[];\n}\n\nlet emojiIndex: EmojiEntry[] | null = null;\n\n/** Parsed on first search only; the picker's grid does not need it. */\nfunction getEmojiIndex(): EmojiEntry[] {\n if (!emojiIndex) {\n emojiIndex = EMOJI_KEYWORDS_SOURCE.split('\\n')\n .map((line) => line.trim().split(' '))\n .filter((parts) => parts.length > 1)\n .map(([emoji, ...words]) => ({ emoji, words }));\n }\n return emojiIndex;\n}\n\n/**\n * Emoji whose name or keywords start with every word typed (\"sleep\" -> ๐ด ๐ช ๐ ๐ค,\n * \"red heart\" -> โค๏ธ). Emoji whose name starts with the first word come first.\n */\nexport function searchEmoji(query: string, limit = 96): string[] {\n const terms = query.toLowerCase().trim().split(/\\s+/).filter(Boolean);\n if (!terms.length) return [];\n const named: string[] = [];\n const tagged: string[] = [];\n for (const { emoji, words } of getEmojiIndex()) {\n if (!terms.every((t) => words.some((w) => w.startsWith(t)))) continue;\n (words[0].startsWith(terms[0]) ? named : tagged).push(emoji);\n }\n return [...named, ...tagged].slice(0, limit);\n}\n"],"names":[],"mappings":"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"}
|