@chayns-components/emoji-input 5.5.36 → 5.5.39
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/cjs/components/emoji-picker/EmojiPicker.js +3 -2
- package/lib/cjs/components/emoji-picker/EmojiPicker.js.map +1 -1
- package/lib/cjs/components/emoji-picker-popup/EmojiPickerPopup.js +9 -2
- package/lib/cjs/components/emoji-picker-popup/EmojiPickerPopup.js.map +1 -1
- package/lib/cjs/utils/emoji.test.js +18 -0
- package/lib/cjs/utils/emoji.test.js.map +1 -0
- package/lib/cjs/utils/emojiShortList.js +1 -1
- package/lib/cjs/utils/emojiShortList.js.map +1 -1
- package/lib/esm/components/emoji-picker/EmojiPicker.js +4 -3
- package/lib/esm/components/emoji-picker/EmojiPicker.js.map +1 -1
- package/lib/esm/components/emoji-picker-popup/EmojiPickerPopup.js +10 -3
- package/lib/esm/components/emoji-picker-popup/EmojiPickerPopup.js.map +1 -1
- package/lib/esm/utils/emoji.test.js +16 -0
- package/lib/esm/utils/emoji.test.js.map +1 -0
- package/lib/esm/utils/emojiShortList.js +1 -1
- package/lib/esm/utils/emojiShortList.js.map +1 -1
- package/lib/types/utils/emoji.test.d.ts +1 -0
- package/package.json +3 -3
|
@@ -4,7 +4,7 @@ import EmojiPickerCategories from './emoji-picker-categories/EmojiPickerCategori
|
|
|
4
4
|
import EmojiPickerEmojis from './emoji-picker-emojis/EmojiPickerEmojis';
|
|
5
5
|
import { StyledEmojiPicker } from './EmojiPicker.styles';
|
|
6
6
|
import textStrings from '../../constants/textStrings';
|
|
7
|
-
import { Translation,
|
|
7
|
+
import { Translation, TextStringProviderSSR } from '@chayns/textstrings';
|
|
8
8
|
const FirstEmojiSlug = 'smileys_emotion';
|
|
9
9
|
const EmojiPicker = ({
|
|
10
10
|
accessToken,
|
|
@@ -20,8 +20,9 @@ const EmojiPicker = ({
|
|
|
20
20
|
const handleSearchChange = useCallback(event => {
|
|
21
21
|
setSearchString(event.target.value);
|
|
22
22
|
}, []);
|
|
23
|
-
return /*#__PURE__*/React.createElement(StyledEmojiPicker, null, /*#__PURE__*/React.createElement(
|
|
24
|
-
libraries: "@chayns-component-emoji-input"
|
|
23
|
+
return /*#__PURE__*/React.createElement(StyledEmojiPicker, null, /*#__PURE__*/React.createElement(TextStringProviderSSR, {
|
|
24
|
+
libraries: "@chayns-component-emoji-input",
|
|
25
|
+
id: "emoji-picker"
|
|
25
26
|
}, /*#__PURE__*/React.createElement(Input, {
|
|
26
27
|
onChange: handleSearchChange,
|
|
27
28
|
placeholder: /*#__PURE__*/React.createElement(Translation, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiPicker.js","names":["Input","React","useCallback","useState","EmojiPickerCategories","EmojiPickerEmojis","StyledEmojiPicker","textStrings","Translation","
|
|
1
|
+
{"version":3,"file":"EmojiPicker.js","names":["Input","React","useCallback","useState","EmojiPickerCategories","EmojiPickerEmojis","StyledEmojiPicker","textStrings","Translation","TextStringProviderSSR","FirstEmojiSlug","EmojiPicker","accessToken","onSelect","personId","searchString","setSearchString","selectedCategory","setSelectedCategory","handleCategorySelect","category","handleSearchChange","event","target","value","createElement","libraries","id","onChange","placeholder","textString","components","emojiPicker","input","displayName"],"sources":["../../../../src/components/emoji-picker/EmojiPicker.tsx"],"sourcesContent":["import { Input } from '@chayns-components/core';\nimport React, { ChangeEvent, FC, useCallback, useState } from 'react';\nimport type { Category } from '../../types/category';\nimport EmojiPickerCategories from './emoji-picker-categories/EmojiPickerCategories';\nimport EmojiPickerEmojis from './emoji-picker-emojis/EmojiPickerEmojis';\nimport { StyledEmojiPicker } from './EmojiPicker.styles';\nimport textStrings from '../../constants/textStrings';\nimport { Translation, TextStringProviderSSR } from '@chayns/textstrings';\n\nexport type EmojiPickerProps = {\n /**\n * Access token of the logged-in user. Is needed to load and save the history of the emojis.\n */\n accessToken?: string;\n /**\n * Function executed when an emoji is selected in the popup\n * @param {string} emoji - Emoji that was selected\n */\n onSelect: (emoji: string, shouldRestoreInputFocus?: boolean) => void;\n /**\n * Person id of the logged-in user. Is needed to load and save the history of the emojis.\n */\n personId?: string;\n};\n\nconst FirstEmojiSlug = 'smileys_emotion';\n\nconst EmojiPicker: FC<EmojiPickerProps> = ({ accessToken, onSelect, personId }) => {\n const [searchString, setSearchString] = useState('');\n const [selectedCategory, setSelectedCategory] = useState(FirstEmojiSlug as Category);\n\n const handleCategorySelect = useCallback((category: Category) => {\n setSearchString('');\n setSelectedCategory(category);\n }, []);\n\n const handleSearchChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setSearchString(event.target.value);\n }, []);\n\n return (\n <StyledEmojiPicker>\n <TextStringProviderSSR libraries=\"@chayns-component-emoji-input\" id=\"emoji-picker\">\n <Input\n onChange={handleSearchChange}\n placeholder={\n <Translation\n textString={textStrings.components.emojiPicker.input.placeholder}\n />\n }\n value={searchString}\n />\n </TextStringProviderSSR>\n <EmojiPickerEmojis\n accessToken={accessToken}\n onSelect={onSelect}\n personId={personId}\n searchString={searchString}\n selectedCategory={selectedCategory}\n />\n <EmojiPickerCategories\n onSelect={handleCategorySelect}\n searchString={searchString}\n selectedCategory={selectedCategory}\n />\n </StyledEmojiPicker>\n );\n};\n\nEmojiPicker.displayName = 'EmojiPicker';\n\nexport default EmojiPicker;\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,yBAAyB;AAC/C,OAAOC,KAAK,IAAqBC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAErE,OAAOC,qBAAqB,MAAM,iDAAiD;AACnF,OAAOC,iBAAiB,MAAM,yCAAyC;AACvE,SAASC,iBAAiB,QAAQ,sBAAsB;AACxD,OAAOC,WAAW,MAAM,6BAA6B;AACrD,SAASC,WAAW,EAAEC,qBAAqB,QAAQ,qBAAqB;AAkBxE,MAAMC,cAAc,GAAG,iBAAiB;AAExC,MAAMC,WAAiC,GAAGA,CAAC;EAAEC,WAAW;EAAEC,QAAQ;EAAEC;AAAS,CAAC,KAAK;EAC/E,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGb,QAAQ,CAAC,EAAE,CAAC;EACpD,MAAM,CAACc,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGf,QAAQ,CAACO,cAA0B,CAAC;EAEpF,MAAMS,oBAAoB,GAAGjB,WAAW,CAAEkB,QAAkB,IAAK;IAC7DJ,eAAe,CAAC,EAAE,CAAC;IACnBE,mBAAmB,CAACE,QAAQ,CAAC;EACjC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,kBAAkB,GAAGnB,WAAW,CAAEoB,KAAoC,IAAK;IAC7EN,eAAe,CAACM,KAAK,CAACC,MAAM,CAACC,KAAK,CAAC;EACvC,CAAC,EAAE,EAAE,CAAC;EAEN,oBACIvB,KAAA,CAAAwB,aAAA,CAACnB,iBAAiB,qBACdL,KAAA,CAAAwB,aAAA,CAAChB,qBAAqB;IAACiB,SAAS,EAAC,+BAA+B;IAACC,EAAE,EAAC;EAAc,gBAC9E1B,KAAA,CAAAwB,aAAA,CAACzB,KAAK;IACF4B,QAAQ,EAAEP,kBAAmB;IAC7BQ,WAAW,eACP5B,KAAA,CAAAwB,aAAA,CAACjB,WAAW;MACRsB,UAAU,EAAEvB,WAAW,CAACwB,UAAU,CAACC,WAAW,CAACC,KAAK,CAACJ;IAAY,CACpE,CACJ;IACDL,KAAK,EAAET;EAAa,CACvB,CACkB,CAAC,eACxBd,KAAA,CAAAwB,aAAA,CAACpB,iBAAiB;IACdO,WAAW,EAAEA,WAAY;IACzBC,QAAQ,EAAEA,QAAS;IACnBC,QAAQ,EAAEA,QAAS;IACnBC,YAAY,EAAEA,YAAa;IAC3BE,gBAAgB,EAAEA;EAAiB,CACtC,CAAC,eACFhB,KAAA,CAAAwB,aAAA,CAACrB,qBAAqB;IAClBS,QAAQ,EAAEM,oBAAqB;IAC/BJ,YAAY,EAAEA,YAAa;IAC3BE,gBAAgB,EAAEA;EAAiB,CACtC,CACc,CAAC;AAE5B,CAAC;AAEDN,WAAW,CAACuB,WAAW,GAAG,aAAa;AAEvC,eAAevB,WAAW","ignoreList":[]}
|
|
@@ -2,9 +2,9 @@ import { AreaProvider, Icon, Popup, useFocusRingPortal, useKeyboardFocusHighligh
|
|
|
2
2
|
import React, { useCallback, useEffect, useRef } from 'react';
|
|
3
3
|
import EmojiPicker from '../emoji-picker/EmojiPicker';
|
|
4
4
|
import { StyledEmojiPickerPopup } from './EmojiPickerPopup.styles';
|
|
5
|
-
import { useTranslation } from '@chayns/textstrings';
|
|
5
|
+
import { TextStringProviderSSR, useTranslation } from '@chayns/textstrings';
|
|
6
6
|
import textStrings from '../../constants/textStrings';
|
|
7
|
-
const
|
|
7
|
+
const EmojiPickerPopupContent = ({
|
|
8
8
|
accessToken,
|
|
9
9
|
container,
|
|
10
10
|
isDisabled,
|
|
@@ -77,12 +77,19 @@ const EmojiPickerPopup = ({
|
|
|
77
77
|
onKeyDown: handleTriggerKeyDown,
|
|
78
78
|
ref: triggerRef,
|
|
79
79
|
tabIndex: isDisabled ? -1 : 0,
|
|
80
|
-
type: "button"
|
|
80
|
+
type: "button",
|
|
81
|
+
style: {
|
|
82
|
+
display: 'flex'
|
|
83
|
+
}
|
|
81
84
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
82
85
|
icons: ['far fa-smile'],
|
|
83
86
|
size: 18
|
|
84
87
|
}))));
|
|
85
88
|
};
|
|
89
|
+
const EmojiPickerPopup = props => /*#__PURE__*/React.createElement(TextStringProviderSSR, {
|
|
90
|
+
libraries: "@chayns-component-emoji-input",
|
|
91
|
+
id: "emoji-picker-popup"
|
|
92
|
+
}, /*#__PURE__*/React.createElement(EmojiPickerPopupContent, props));
|
|
86
93
|
EmojiPickerPopup.displayName = 'EmojiPickerPopup';
|
|
87
94
|
export default EmojiPickerPopup;
|
|
88
95
|
//# sourceMappingURL=EmojiPickerPopup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiPickerPopup.js","names":["AreaProvider","Icon","Popup","useFocusRingPortal","useKeyboardFocusHighlighting","React","useCallback","useEffect","useRef","EmojiPicker","StyledEmojiPickerPopup","useTranslation","textStrings","
|
|
1
|
+
{"version":3,"file":"EmojiPickerPopup.js","names":["AreaProvider","Icon","Popup","useFocusRingPortal","useKeyboardFocusHighlighting","React","useCallback","useEffect","useRef","EmojiPicker","StyledEmojiPickerPopup","TextStringProviderSSR","useTranslation","textStrings","EmojiPickerPopupContent","accessToken","container","isDisabled","onPopupVisibilityChange","onSelect","onSelectWithKeyboard","personId","shouldEnableKeyboardHighlighting","t","popupRef","triggerRef","shouldShowKeyboardHighlighting","isEnabled","shape","padding","handleKeyPress","event","key","shiftKey","current","hide","handleTriggerKeyDown","preventDefault","show","handleSelect","emoji","shouldRestoreInputFocus","document","addEventListener","removeEventListener","createElement","ref","onHide","undefined","onShow","content","shouldChangeColor","emojiPickerPopup","accessibility","open","className","disabled","onClick","stopPropagation","onKeyDown","tabIndex","type","style","display","icons","size","EmojiPickerPopup","props","libraries","id","displayName"],"sources":["../../../../src/components/emoji-picker-popup/EmojiPickerPopup.tsx"],"sourcesContent":["import {\n AreaProvider,\n Icon,\n Popup,\n PopupAlignment,\n useFocusRingPortal,\n useKeyboardFocusHighlighting,\n type PopupRef,\n} from '@chayns-components/core';\nimport React, { FC, KeyboardEventHandler, useCallback, useEffect, useRef } from 'react';\nimport EmojiPicker from '../emoji-picker/EmojiPicker';\nimport { StyledEmojiPickerPopup } from './EmojiPickerPopup.styles';\nimport { TextStringProviderSSR, useTranslation } from '@chayns/textstrings';\nimport textStrings from '../../constants/textStrings';\n\nexport type EmojiPickerPopupProps = {\n /**\n * Access token of the logged-in user. Is needed to load and save the history of the emojis.\n */\n accessToken?: string;\n /**\n * The DOM element that should receive the popup portal.\n */\n container?: Element;\n /**\n * Whether the picker trigger is disabled.\n */\n isDisabled?: boolean;\n /**\n * Function that is executed when the visibility of the popup changes.\n * @param {boolean} isVisible - Whether the popup is visible or not\n */\n onPopupVisibilityChange?: (isVisible: boolean) => void;\n /**\n * Person id of the logged-in user. Is needed to load and save the history of the emojis.\n */\n personId?: string;\n /**\n * Function executed when an emoji is selected in the popup\n * @param {string} emoji - Emoji that was selected\n */\n onSelect: (emoji: string) => void;\n /**\n * Enables keyboard-only focus highlighting for the picker trigger.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n /**\n * Receives focus after an emoji is selected with the keyboard.\n */\n onSelectWithKeyboard?: (emoji: string) => void;\n};\n\nconst EmojiPickerPopupContent: FC<EmojiPickerPopupProps> = ({\n accessToken,\n container,\n isDisabled,\n onPopupVisibilityChange,\n onSelect,\n onSelectWithKeyboard,\n personId,\n shouldEnableKeyboardHighlighting,\n}) => {\n const { t } = useTranslation();\n const popupRef = useRef<PopupRef>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n isDisabled ? false : shouldEnableKeyboardHighlighting,\n );\n\n useFocusRingPortal(triggerRef, {\n isEnabled: shouldShowKeyboardHighlighting,\n shape: 'circle',\n padding: 4,\n });\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.key === 'Escape' && !event.shiftKey) {\n popupRef.current?.hide();\n }\n }, []);\n\n const handleTriggerKeyDown = useCallback<KeyboardEventHandler<HTMLButtonElement>>(\n (event) => {\n if (isDisabled) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n popupRef.current?.show();\n }\n },\n [isDisabled],\n );\n\n const handleSelect = useCallback(\n (emoji: string, shouldRestoreInputFocus?: boolean) => {\n onSelect(emoji);\n\n if (shouldRestoreInputFocus) {\n onSelectWithKeyboard?.(emoji);\n }\n },\n [onSelect, onSelectWithKeyboard],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.removeEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n return (\n <StyledEmojiPickerPopup aria-hidden={isDisabled}>\n <Popup\n container={container}\n ref={popupRef}\n onHide={() =>\n typeof onPopupVisibilityChange === 'function'\n ? onPopupVisibilityChange(false)\n : undefined\n }\n onShow={() =>\n typeof onPopupVisibilityChange === 'function'\n ? onPopupVisibilityChange(true)\n : undefined\n }\n content={\n <AreaProvider shouldChangeColor={false}>\n <EmojiPicker\n accessToken={accessToken}\n onSelect={handleSelect}\n personId={personId}\n />\n </AreaProvider>\n }\n >\n <button\n aria-label={t(textStrings.emojiPickerPopup.accessibility.open)}\n className=\"prevent-lose-focus\"\n disabled={isDisabled}\n onClick={(event) => {\n if (isDisabled) {\n event.stopPropagation();\n }\n }}\n onKeyDown={handleTriggerKeyDown}\n ref={triggerRef}\n tabIndex={isDisabled ? -1 : 0}\n type=\"button\"\n style={{\n display: 'flex',\n }}\n >\n <Icon icons={['far fa-smile']} size={18} />\n </button>\n </Popup>\n </StyledEmojiPickerPopup>\n );\n};\n\nconst EmojiPickerPopup: FC<EmojiPickerPopupProps> = (props) => (\n <TextStringProviderSSR libraries=\"@chayns-component-emoji-input\" id=\"emoji-picker-popup\">\n <EmojiPickerPopupContent {...props} />\n </TextStringProviderSSR>\n);\n\nEmojiPickerPopup.displayName = 'EmojiPickerPopup';\n\nexport default EmojiPickerPopup;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { convertEmojisToUnicode } from './emoji';
|
|
3
|
+
import { regShortnames, shortNameList } from './emojiShortList';
|
|
4
|
+
describe('convertEmojisToUnicode', () => {
|
|
5
|
+
it('does not replace shortnames adjacent to letters or numbers', () => {
|
|
6
|
+
expect(convertEmojisToUnicode('x:smile:', regShortnames, shortNameList)).toBe('x:smile:');
|
|
7
|
+
expect(convertEmojisToUnicode(':smile:x', regShortnames, shortNameList)).toBe(':smile:x');
|
|
8
|
+
expect(convertEmojisToUnicode('x:smile:1', regShortnames, shortNameList)).toBe('x:smile:1');
|
|
9
|
+
});
|
|
10
|
+
it('replaces shortnames next to spaces or punctuation', () => {
|
|
11
|
+
const emoji = convertEmojisToUnicode(':smile:', regShortnames, shortNameList);
|
|
12
|
+
expect(convertEmojisToUnicode(' :smile: ', regShortnames, shortNameList)).toBe(` ${emoji} `);
|
|
13
|
+
expect(convertEmojisToUnicode('(:smile:),', regShortnames, shortNameList)).toBe(`(${emoji}),`);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=emoji.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emoji.test.js","names":["describe","expect","it","convertEmojisToUnicode","regShortnames","shortNameList","toBe","emoji"],"sources":["../../../src/utils/emoji.test.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest';\nimport { convertEmojisToUnicode } from './emoji';\nimport { regAscii } from '../constants/emoji';\nimport { regShortnames, shortNameList } from './emojiShortList';\n\ndescribe('convertEmojisToUnicode', () => {\n it('does not replace shortnames adjacent to letters or numbers', () => {\n expect(convertEmojisToUnicode('x:smile:', regShortnames, shortNameList)).toBe('x:smile:');\n expect(convertEmojisToUnicode(':smile:x', regShortnames, shortNameList)).toBe(':smile:x');\n expect(convertEmojisToUnicode('x:smile:1', regShortnames, shortNameList)).toBe('x:smile:1');\n });\n\n it('replaces shortnames next to spaces or punctuation', () => {\n const emoji = convertEmojisToUnicode(':smile:', regShortnames, shortNameList);\n\n expect(convertEmojisToUnicode(' :smile: ', regShortnames, shortNameList)).toBe(\n ` ${emoji} `,\n );\n expect(convertEmojisToUnicode('(:smile:),', regShortnames, shortNameList)).toBe(\n `(${emoji}),`,\n );\n });\n});\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,sBAAsB,QAAQ,SAAS;AAEhD,SAASC,aAAa,EAAEC,aAAa,QAAQ,kBAAkB;AAE/DL,QAAQ,CAAC,wBAAwB,EAAE,MAAM;EACrCE,EAAE,CAAC,4DAA4D,EAAE,MAAM;IACnED,MAAM,CAACE,sBAAsB,CAAC,UAAU,EAAEC,aAAa,EAAEC,aAAa,CAAC,CAAC,CAACC,IAAI,CAAC,UAAU,CAAC;IACzFL,MAAM,CAACE,sBAAsB,CAAC,UAAU,EAAEC,aAAa,EAAEC,aAAa,CAAC,CAAC,CAACC,IAAI,CAAC,UAAU,CAAC;IACzFL,MAAM,CAACE,sBAAsB,CAAC,WAAW,EAAEC,aAAa,EAAEC,aAAa,CAAC,CAAC,CAACC,IAAI,CAAC,WAAW,CAAC;EAC/F,CAAC,CAAC;EAEFJ,EAAE,CAAC,mDAAmD,EAAE,MAAM;IAC1D,MAAMK,KAAK,GAAGJ,sBAAsB,CAAC,SAAS,EAAEC,aAAa,EAAEC,aAAa,CAAC;IAE7EJ,MAAM,CAACE,sBAAsB,CAAC,WAAW,EAAEC,aAAa,EAAEC,aAAa,CAAC,CAAC,CAACC,IAAI,CAC1E,IAAIC,KAAK,GACb,CAAC;IACDN,MAAM,CAACE,sBAAsB,CAAC,YAAY,EAAEC,aAAa,EAAEC,aAAa,CAAC,CAAC,CAACC,IAAI,CAC3E,IAAIC,KAAK,IACb,CAAC;EACL,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|
|
@@ -3675,5 +3675,5 @@ let shortnameRegexp = '';
|
|
|
3675
3675
|
Object.keys(shortNameList).forEach((shortname, index) => {
|
|
3676
3676
|
shortnameRegexp += `${index !== 0 ? '|' : ''}${shortname}`;
|
|
3677
3677
|
});
|
|
3678
|
-
export const regShortnames = new RegExp(`<object[^>]*>.*?</object>|<span[^>]*>.*?</span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(${shortnameRegexp})`, '
|
|
3678
|
+
export const regShortnames = new RegExp(`<object[^>]*>.*?</object>|<span[^>]*>.*?</span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(?<![\\p{L}\\p{N}])(${shortnameRegexp})(?![\\p{L}\\p{N}])`, 'giu');
|
|
3679
3679
|
//# sourceMappingURL=emojiShortList.js.map
|