@chayns-components/emoji-input 5.6.6 → 5.6.8

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.
Files changed (26) hide show
  1. package/lib/cjs/build.test.js +34 -0
  2. package/lib/cjs/build.test.js.map +1 -0
  3. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.js +48 -219
  4. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.js.map +1 -1
  5. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.test.js +316 -0
  6. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.test.js.map +1 -0
  7. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/emoji/Emoji.js +1 -0
  8. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/emoji/Emoji.js.map +1 -1
  9. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.js +109 -0
  10. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.js.map +1 -0
  11. package/lib/esm/build.test.js +32 -0
  12. package/lib/esm/build.test.js.map +1 -0
  13. package/lib/esm/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.js +47 -218
  14. package/lib/esm/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.js.map +1 -1
  15. package/lib/esm/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.test.js +312 -0
  16. package/lib/esm/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.test.js.map +1 -0
  17. package/lib/esm/components/emoji-picker/emoji-picker-emojis/emoji/Emoji.js +1 -0
  18. package/lib/esm/components/emoji-picker/emoji-picker-emojis/emoji/Emoji.js.map +1 -1
  19. package/lib/esm/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.js +101 -0
  20. package/lib/esm/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.js.map +1 -0
  21. package/lib/types/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.d.ts +15 -0
  22. package/package.json +2 -2
  23. package/lib/types/components/emoji-input/EmojiInput.test.d.ts +0 -1
  24. package/lib/types/utils/emoji.test.d.ts +0 -1
  25. package/lib/types/utils/selection.test.d.ts +0 -1
  26. package/lib/types/utils/text.test.d.ts +0 -1
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _nodeChild_process = require("node:child_process");
4
+ var _nodeFs = require("node:fs");
5
+ var _nodeModule = require("node:module");
6
+ var _nodeOs = require("node:os");
7
+ var _nodePath = require("node:path");
8
+ var _nodeUrl = require("node:url");
9
+ var _vitest = require("vitest");
10
+ (0, _vitest.it)('emits the public type entry at the declared package path without test declarations', () => {
11
+ const packageRoot = (0, _nodePath.join)((0, _nodePath.dirname)((0, _nodeUrl.fileURLToPath)(import.meta.url)), '..');
12
+ const {
13
+ types
14
+ } = JSON.parse((0, _nodeFs.readFileSync)((0, _nodePath.join)(packageRoot, 'package.json'), 'utf8'));
15
+ const outputDirectory = (0, _nodeFs.mkdtempSync)((0, _nodePath.join)((0, _nodeOs.tmpdir)(), 'emoji-input-types-'));
16
+ try {
17
+ (0, _nodeChild_process.execFileSync)(process.execPath, [(0, _nodeModule.createRequire)(import.meta.url).resolve('typescript/bin/tsc'), '--project', (0, _nodePath.join)(packageRoot, 'tsconfig.json'), '--outDir', outputDirectory], {
18
+ timeout: 25_000,
19
+ stdio: 'pipe'
20
+ });
21
+
22
+ // A fresh output directory prevents old declarations from hiding a changed emit layout.
23
+ (0, _vitest.expect)((0, _nodeFs.existsSync)((0, _nodePath.join)(outputDirectory, (0, _nodePath.relative)('lib/types', types)))).toBe(true);
24
+ (0, _vitest.expect)((0, _nodeFs.readdirSync)(outputDirectory, {
25
+ recursive: true
26
+ }).filter(file => file.toString().endsWith('.test.d.ts'))).toEqual([]);
27
+ } finally {
28
+ (0, _nodeFs.rmSync)(outputDirectory, {
29
+ recursive: true,
30
+ force: true
31
+ });
32
+ }
33
+ }, 30_000);
34
+ //# sourceMappingURL=build.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.test.js","names":["_nodeChild_process","require","_nodeFs","_nodeModule","_nodeOs","_nodePath","_nodeUrl","_vitest","it","packageRoot","join","dirname","fileURLToPath","import","meta","url","types","JSON","parse","readFileSync","outputDirectory","mkdtempSync","tmpdir","execFileSync","process","execPath","createRequire","resolve","timeout","stdio","expect","existsSync","relative","toBe","readdirSync","recursive","filter","file","toString","endsWith","toEqual","rmSync","force"],"sources":["../../src/build.test.ts"],"sourcesContent":["import { execFileSync } from 'node:child_process';\nimport { existsSync, mkdtempSync, readFileSync, readdirSync, rmSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { tmpdir } from 'node:os';\nimport { dirname, join, relative } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { expect, it } from 'vitest';\n\nit('emits the public type entry at the declared package path without test declarations', () => {\n const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..');\n const { types } = JSON.parse(readFileSync(join(packageRoot, 'package.json'), 'utf8')) as {\n types: string;\n };\n const outputDirectory = mkdtempSync(join(tmpdir(), 'emoji-input-types-'));\n\n try {\n execFileSync(\n process.execPath,\n [\n createRequire(import.meta.url).resolve('typescript/bin/tsc'),\n '--project',\n join(packageRoot, 'tsconfig.json'),\n '--outDir',\n outputDirectory,\n ],\n { timeout: 25_000, stdio: 'pipe' },\n );\n\n // A fresh output directory prevents old declarations from hiding a changed emit layout.\n expect(existsSync(join(outputDirectory, relative('lib/types', types)))).toBe(true);\n expect(\n readdirSync(outputDirectory, { recursive: true }).filter((file) =>\n file.toString().endsWith('.test.d.ts'),\n ),\n ).toEqual([]);\n } finally {\n rmSync(outputDirectory, { recursive: true, force: true });\n }\n}, 30_000);\n"],"mappings":";;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AAEA,IAAAO,UAAE,EAAC,oFAAoF,EAAE,MAAM;EAC3F,MAAMC,WAAW,GAAG,IAAAC,cAAI,EAAC,IAAAC,iBAAO,EAAC,IAAAC,sBAAa,EAACC,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;EACvE,MAAM;IAAEC;EAAM,CAAC,GAAGC,IAAI,CAACC,KAAK,CAAC,IAAAC,oBAAY,EAAC,IAAAT,cAAI,EAACD,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAEnF;EACD,MAAMW,eAAe,GAAG,IAAAC,mBAAW,EAAC,IAAAX,cAAI,EAAC,IAAAY,cAAM,EAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;EAEzE,IAAI;IACA,IAAAC,+BAAY,EACRC,OAAO,CAACC,QAAQ,EAChB,CACI,IAAAC,yBAAa,EAACb,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAACY,OAAO,CAAC,oBAAoB,CAAC,EAC5D,WAAW,EACX,IAAAjB,cAAI,EAACD,WAAW,EAAE,eAAe,CAAC,EAClC,UAAU,EACVW,eAAe,CAClB,EACD;MAAEQ,OAAO,EAAE,MAAM;MAAEC,KAAK,EAAE;IAAO,CACrC,CAAC;;IAED;IACA,IAAAC,cAAM,EAAC,IAAAC,kBAAU,EAAC,IAAArB,cAAI,EAACU,eAAe,EAAE,IAAAY,kBAAQ,EAAC,WAAW,EAAEhB,KAAK,CAAC,CAAC,CAAC,CAAC,CAACiB,IAAI,CAAC,IAAI,CAAC;IAClF,IAAAH,cAAM,EACF,IAAAI,mBAAW,EAACd,eAAe,EAAE;MAAEe,SAAS,EAAE;IAAK,CAAC,CAAC,CAACC,MAAM,CAAEC,IAAI,IAC1DA,IAAI,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,YAAY,CACzC,CACJ,CAAC,CAACC,OAAO,CAAC,EAAE,CAAC;EACjB,CAAC,SAAS;IACN,IAAAC,cAAM,EAACrB,eAAe,EAAE;MAAEe,SAAS,EAAE,IAAI;MAAEO,KAAK,EAAE;IAAK,CAAC,CAAC;EAC7D;AACJ,CAAC,EAAE,MAAM,CAAC","ignoreList":[]}
@@ -4,15 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _core = require("@chayns-components/core");
8
- var _emojilib = _interopRequireDefault(require("emojilib"));
9
7
  var _react = _interopRequireWildcard(require("react"));
8
+ var _emojilib = _interopRequireDefault(require("emojilib"));
10
9
  var _emojiDeDE = _interopRequireDefault(require("../../../constants/emoji-de-DE.json"));
11
10
  var _emojiHistory = require("../../../hooks/emojiHistory");
12
- var _Emoji = _interopRequireDefault(require("./emoji/Emoji"));
13
- var _EmojiPickerEmojis = require("./EmojiPickerEmojis.styles");
11
+ var _EmojiPickerEmojiList = _interopRequireDefault(require("./emoji-picker-emoji-list/EmojiPickerEmojiList"));
14
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } // @ts-nocheck
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
16
14
  const EmojiPickerEmojis = ({
17
15
  accessToken,
18
16
  onSelect,
@@ -20,11 +18,20 @@ const EmojiPickerEmojis = ({
20
18
  searchString,
21
19
  selectedCategory
22
20
  }) => {
23
- const [shouldPreventScroll, setShouldPreventScroll] = (0, _react.useState)(false);
24
- const [shouldShowSkinTonePopup, setShouldShowSkinTonePopup] = (0, _react.useState)(false);
25
- const [focusedIndex, setFocusedIndex] = (0, _react.useState)(0);
26
21
  const [emojiCategories, setEmojiCategories] = (0, _react.useState)([]);
27
- const [emojiList, setEmojiList] = (0, _react.useState)([]);
22
+ const [emojiList, setEmojiList] = (0, _react.useState)({});
23
+ const {
24
+ addOrUpdateEmojiInHistory,
25
+ historyEmojis
26
+ } = (0, _emojiHistory.useEmojiHistory)({
27
+ accessToken,
28
+ personId,
29
+ selectedCategory
30
+ });
31
+ const handleSelect = (0, _react.useCallback)((emoji, shouldRestoreInputFocus = false) => {
32
+ onSelect(emoji.emoji, shouldRestoreInputFocus);
33
+ void addOrUpdateEmojiInHistory(emoji);
34
+ }, [addOrUpdateEmojiInHistory, onSelect]);
28
35
  (0, _react.useEffect)(() => {
29
36
  void Promise.resolve().then(() => _interopRequireWildcard(require('unicode-emoji-json/data-by-group.json'))).then(({
30
37
  default: categories
@@ -37,219 +44,41 @@ const EmojiPickerEmojis = ({
37
44
  setEmojiList(emojis);
38
45
  });
39
46
  }, []);
40
- const [shouldPreventListener, ref] = (0, _core.useIsMeasuredClone)();
41
- const emojiRef = (0, _react.useRef)(null);
42
- const shouldPreventEmojiControlsRef = (0, _react.useRef)(false);
43
- const combinedRef = (0, _core.useCombinedRefs)(emojiRef, ref);
44
- const {
45
- addOrUpdateEmojiInHistory,
46
- historyEmojis
47
- } = (0, _emojiHistory.useEmojiHistory)({
48
- accessToken,
49
- personId,
50
- selectedCategory
51
- });
52
- const handlePopupVisibilityChange = (0, _react.useCallback)(isVisible => {
53
- setShouldShowSkinTonePopup(isVisible);
54
- shouldPreventEmojiControlsRef.current = isVisible;
55
- setShouldPreventScroll(isVisible);
56
- }, []);
57
- const handleSelect = (0, _react.useCallback)(({
58
- emoji,
59
- name,
60
- skin_tone_support,
61
- index
62
- }, shouldRestoreInputFocus = false) => {
63
- onSelect(emoji, shouldRestoreInputFocus);
64
- if (index) {
65
- setFocusedIndex(index);
66
- }
67
- void addOrUpdateEmojiInHistory({
47
+ let visibleEmojis;
48
+ if (searchString.trim() !== '') {
49
+ const lowerSearchString = searchString.toLowerCase();
50
+ visibleEmojis = Object.entries(emojiList).filter(([emoji, {
51
+ name
52
+ }]) => {
53
+ const keywords = _emojilib.default[emoji];
54
+ const germanKeywords = _emojiDeDE.default[emoji];
55
+ return name.includes(lowerSearchString) || (keywords === null || keywords === void 0 ? void 0 : keywords.some(keyword => keyword.includes(lowerSearchString))) || (germanKeywords === null || germanKeywords === void 0 ? void 0 : germanKeywords.some(keyword => keyword.includes(lowerSearchString)));
56
+ }).map(([emoji, data]) => ({
68
57
  emoji,
69
- name,
70
- skin_tone_support
71
- });
72
- }, [addOrUpdateEmojiInHistory, onSelect]);
73
- (0, _react.useEffect)(() => {
74
- if (selectedCategory) {
75
- setFocusedIndex(0);
76
- const container = emojiRef.current;
77
- if (!container) {
78
- return;
79
- }
80
- container.scrollTop = 0;
81
- }
82
- }, [selectedCategory]);
83
- (0, _react.useEffect)(() => {
84
- const handleKeyDown = event => {
85
- if (shouldPreventListener) {
86
- return;
87
- }
88
- if (!shouldPreventEmojiControlsRef.current && (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {
89
- var _emojiRef$current;
90
- event.preventDefault();
91
- const children = (_emojiRef$current = emojiRef.current) === null || _emojiRef$current === void 0 ? void 0 : _emojiRef$current.children;
92
- if (children && children.length > 0) {
93
- const container = emojiRef.current;
94
- let newIndex = focusedIndex !== null ? focusedIndex : 0;
95
- if (event.ctrlKey) {
96
- return;
97
- }
98
- if (event.key === 'ArrowUp') {
99
- newIndex = (newIndex - 6) % children.length;
100
- } else if (event.key === 'ArrowDown') {
101
- newIndex = (newIndex + 6) % children.length;
102
- } else if (event.key === 'ArrowLeft') {
103
- newIndex = (newIndex - 1) % children.length;
104
- } else if (event.key === 'ArrowRight') {
105
- newIndex = (newIndex + 1) % children.length;
106
- }
107
-
108
- // remove focus from the old element
109
- if (focusedIndex !== null) {
110
- const prevElement = children[focusedIndex];
111
- prevElement.tabIndex = -1;
112
- }
113
- if (newIndex < 0) {
114
- newIndex = children.length - 1;
115
- } else if (newIndex > children.length - 1) {
116
- newIndex = 0;
117
- }
118
- setFocusedIndex(newIndex);
119
-
120
- // Set focus to the element
121
- const newElement = children[newIndex];
122
- newElement.tabIndex = 0;
123
- const containerRect = container.getBoundingClientRect();
124
- const elementRect = newElement.getBoundingClientRect();
125
- if (elementRect.bottom > containerRect.bottom) {
126
- container.scrollTop += elementRect.bottom - containerRect.bottom;
127
- } else if (elementRect.top < containerRect.top) {
128
- container.scrollTop -= containerRect.top - elementRect.top;
129
- }
130
- }
131
- } else if (event.key === 'Enter' && !shouldPreventEmojiControlsRef.current && focusedIndex !== null) {
132
- var _emojiRef$current2;
133
- if (event.ctrlKey) {
134
- setShouldShowSkinTonePopup(true);
135
- return;
136
- }
137
- const {
138
- dataset
139
- } = (_emojiRef$current2 = emojiRef.current) === null || _emojiRef$current2 === void 0 ? void 0 : _emojiRef$current2.children[focusedIndex];
140
- const {
141
- emoji,
142
- name,
143
- skinToneSupport
144
- } = dataset;
145
- if (!emoji || !name || !skinToneSupport) {
146
- return;
147
- }
148
- handleSelect({
149
- emoji,
150
- name,
151
- skin_tone_support: skinToneSupport === 'true'
152
- }, true);
153
- }
154
- };
155
- document.addEventListener('keydown', handleKeyDown);
156
- return () => {
157
- document.removeEventListener('keydown', handleKeyDown);
158
- };
159
- }, [focusedIndex, handleSelect, shouldPreventListener]);
160
- const handleRightClick = (0, _react.useCallback)(index => {
161
- setFocusedIndex(index);
162
- }, []);
163
- const emojis = (0, _react.useMemo)(() => {
58
+ ...data
59
+ }));
60
+ } else if (selectedCategory === 'history') {
61
+ visibleEmojis = historyEmojis;
62
+ } else {
164
63
  var _emojiCategories$find;
165
- if (searchString.trim() !== '') {
166
- const lowerSearchString = searchString.toLowerCase();
167
- const searchResults = [];
168
- Object.entries(emojiList).forEach(([emoji, {
169
- name,
170
- skin_tone_support
171
- }], index) => {
172
- const keywords = _emojilib.default[emoji];
173
- const germanKeywords = _emojiDeDE.default[emoji];
174
- if (name.includes(lowerSearchString) || keywords !== null && keywords !== void 0 && keywords.some(keyword => keyword.includes(lowerSearchString)) || germanKeywords !== null && germanKeywords !== void 0 && germanKeywords.some(keyword => keyword.includes(lowerSearchString))) {
175
- searchResults.push(/*#__PURE__*/_react.default.createElement(_Emoji.default, {
176
- shouldShowSkinTonePopup: index === focusedIndex && skin_tone_support && shouldShowSkinTonePopup,
177
- isSelected: index === focusedIndex,
178
- emoji: emoji,
179
- index: index,
180
- onRightClick: handleRightClick,
181
- isSkinToneSupported: skin_tone_support,
182
- key: name,
183
- name: name,
184
- onPopupVisibilityChange: handlePopupVisibilityChange,
185
- onSelect: e => handleSelect({
186
- emoji: e,
187
- name,
188
- skin_tone_support,
189
- index
190
- }),
191
- emojiList: emojiList
192
- }));
193
- }
194
- });
195
- return searchResults;
196
- }
197
- if (selectedCategory === 'history') {
198
- return historyEmojis.map(({
199
- emoji,
200
- name,
201
- skin_tone_support
202
- }, index) => /*#__PURE__*/_react.default.createElement(_Emoji.default, {
203
- isSelected: index === focusedIndex,
204
- shouldShowSkinTonePopup: index === focusedIndex && skin_tone_support && shouldShowSkinTonePopup,
205
- emoji: emoji,
206
- name: name,
207
- key: name,
208
- index: index,
209
- onRightClick: handleRightClick,
210
- onPopupVisibilityChange: handlePopupVisibilityChange,
211
- onSelect: e => handleSelect({
212
- emoji: e,
213
- name,
214
- skin_tone_support,
215
- index
216
- }),
217
- isSkinToneSupported: false,
218
- emojiList: emojiList
219
- }));
220
- }
221
- return (_emojiCategories$find = emojiCategories.find(({
64
+ visibleEmojis = ((_emojiCategories$find = emojiCategories.find(({
222
65
  slug
223
- }) => slug === selectedCategory)) === null || _emojiCategories$find === void 0 ? void 0 : _emojiCategories$find.emojis.map(({
224
- emoji,
225
- name,
226
- skin_tone_support
227
- }, index) => /*#__PURE__*/_react.default.createElement(_Emoji.default, {
228
- isSelected: index === focusedIndex,
229
- shouldShowSkinTonePopup: index === focusedIndex && skin_tone_support && shouldShowSkinTonePopup,
230
- emoji: emoji,
231
- name: name,
232
- index: index,
233
- onRightClick: handleRightClick,
234
- isSkinToneSupported: skin_tone_support,
235
- key: name,
236
- onPopupVisibilityChange: handlePopupVisibilityChange,
237
- onSelect: e => handleSelect({
238
- emoji: e,
239
- name,
240
- skin_tone_support,
241
- index
242
- }),
243
- emojiList: emojiList
244
- }));
245
- }, [searchString, selectedCategory, focusedIndex, shouldShowSkinTonePopup, handleRightClick, handlePopupVisibilityChange, handleSelect, historyEmojis]);
246
- const shouldShowNoContentInfo = !emojis || emojis.length === 0;
247
- return /*#__PURE__*/_react.default.createElement(_EmojiPickerEmojis.StyledEmojiPickerEmojis, {
248
- className: "chayns-scrollbar",
249
- $shouldPreventScroll: shouldPreventScroll,
250
- $shouldShowNoContentInfo: shouldShowNoContentInfo,
251
- ref: combinedRef
252
- }, emojis, shouldShowNoContentInfo && /*#__PURE__*/_react.default.createElement(_EmojiPickerEmojis.StyledEmojiPickerEmojisNoContentInfo, null, "Hier werden die zuletzt verwendeten Emojis angezeigt, die \xFCber diese Auswahl gew\xE4hlt wurden."));
66
+ }) => slug === selectedCategory)) === null || _emojiCategories$find === void 0 ? void 0 : _emojiCategories$find.emojis) ?? [];
67
+ }
68
+
69
+ // Reset navigation and dismiss popups when the displayed identities or their order change,
70
+ // following the existing category-change rule without taking focus from the search field.
71
+ const isHistory = searchString.trim() === '' && selectedCategory === 'history';
72
+ const listKey = JSON.stringify([selectedCategory, isHistory, visibleEmojis.map(({
73
+ emoji
74
+ }) => emoji)]);
75
+ return /*#__PURE__*/_react.default.createElement(_EmojiPickerEmojiList.default, {
76
+ key: listKey,
77
+ emojis: visibleEmojis,
78
+ emojiList: emojiList,
79
+ isHistory: isHistory,
80
+ onSelect: handleSelect
81
+ });
253
82
  };
254
83
  EmojiPickerEmojis.displayName = 'EmojiPickerEmojis';
255
84
  var _default = exports.default = EmojiPickerEmojis;
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiPickerEmojis.js","names":["_core","require","_emojilib","_interopRequireDefault","_react","_interopRequireWildcard","_emojiDeDE","_emojiHistory","_Emoji","_EmojiPickerEmojis","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","EmojiPickerEmojis","accessToken","onSelect","personId","searchString","selectedCategory","shouldPreventScroll","setShouldPreventScroll","useState","shouldShowSkinTonePopup","setShouldShowSkinTonePopup","focusedIndex","setFocusedIndex","emojiCategories","setEmojiCategories","emojiList","setEmojiList","useEffect","Promise","resolve","then","categories","emojis","shouldPreventListener","ref","useIsMeasuredClone","emojiRef","useRef","shouldPreventEmojiControlsRef","combinedRef","useCombinedRefs","addOrUpdateEmojiInHistory","historyEmojis","useEmojiHistory","handlePopupVisibilityChange","useCallback","isVisible","current","handleSelect","emoji","name","skin_tone_support","index","shouldRestoreInputFocus","container","scrollTop","handleKeyDown","event","key","_emojiRef$current","preventDefault","children","length","newIndex","ctrlKey","prevElement","tabIndex","newElement","containerRect","getBoundingClientRect","elementRect","bottom","top","_emojiRef$current2","dataset","skinToneSupport","document","addEventListener","removeEventListener","handleRightClick","useMemo","_emojiCategories$find","trim","lowerSearchString","toLowerCase","searchResults","entries","forEach","keywords","emojiLib","germanKeywords","germanEmojiLib","includes","some","keyword","push","createElement","isSelected","onRightClick","isSkinToneSupported","onPopupVisibilityChange","map","find","slug","shouldShowNoContentInfo","StyledEmojiPickerEmojis","className","$shouldPreventScroll","$shouldShowNoContentInfo","StyledEmojiPickerEmojisNoContentInfo","displayName","_default","exports"],"sources":["../../../../../src/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.tsx"],"sourcesContent":["// @ts-nocheck\n\nimport { useCombinedRefs, useIsMeasuredClone } from '@chayns-components/core';\nimport emojiLib from 'emojilib';\nimport React, { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport germanEmojiLib from '../../../constants/emoji-de-DE.json';\nimport { useEmojiHistory } from '../../../hooks/emojiHistory';\nimport type { Category } from '../../../types/category';\nimport Emoji from './emoji/Emoji';\nimport {\n StyledEmojiPickerEmojis,\n StyledEmojiPickerEmojisNoContentInfo,\n} from './EmojiPickerEmojis.styles';\n\nexport type EmojiPickerEmojisProps = {\n accessToken?: string;\n onSelect: (emoji: string, shouldRestoreInputFocus?: boolean) => void;\n personId?: string;\n searchString: string;\n selectedCategory: Category;\n};\n\ninterface EmojiType {\n emoji: string;\n skin_tone_support: boolean;\n name: string;\n slug: string;\n unicode_version: string;\n emoji_version: string;\n group?: string;\n}\n\ninterface EmojiCategory {\n name: string;\n slug: string;\n emojis: EmojiType[];\n}\n\ntype EmojiData = EmojiCategory[];\ninterface EmojiDictionary {\n [key: string]: EmojiType;\n}\n\nconst EmojiPickerEmojis: FC<EmojiPickerEmojisProps> = ({\n accessToken,\n onSelect,\n personId,\n searchString,\n selectedCategory,\n}) => {\n const [shouldPreventScroll, setShouldPreventScroll] = useState(false);\n const [shouldShowSkinTonePopup, setShouldShowSkinTonePopup] = useState(false);\n const [focusedIndex, setFocusedIndex] = useState<number>(0);\n const [emojiCategories, setEmojiCategories] = useState<EmojiData>([]);\n const [emojiList, setEmojiList] = useState<EmojiDictionary[]>([]);\n\n useEffect(() => {\n void import('unicode-emoji-json/data-by-group.json').then(({ default: categories }) => {\n setEmojiCategories(categories);\n });\n void import('unicode-emoji-json/data-by-emoji.json').then(({ default: emojis }) => {\n setEmojiList(emojis);\n });\n }, []);\n\n const [shouldPreventListener, ref] = useIsMeasuredClone();\n\n const emojiRef = useRef<HTMLDivElement>(null);\n const shouldPreventEmojiControlsRef = useRef(false);\n\n const combinedRef = useCombinedRefs(emojiRef, ref);\n\n const { addOrUpdateEmojiInHistory, historyEmojis } = useEmojiHistory({\n accessToken,\n personId,\n selectedCategory,\n });\n\n const handlePopupVisibilityChange = useCallback((isVisible: boolean) => {\n setShouldShowSkinTonePopup(isVisible);\n shouldPreventEmojiControlsRef.current = isVisible;\n setShouldPreventScroll(isVisible);\n }, []);\n\n const handleSelect = useCallback(\n (\n {\n emoji,\n name,\n skin_tone_support,\n index,\n }: {\n emoji: string;\n name: string;\n skin_tone_support: boolean;\n index?: number;\n },\n shouldRestoreInputFocus = false,\n ) => {\n onSelect(emoji, shouldRestoreInputFocus);\n\n if (index) {\n setFocusedIndex(index);\n }\n\n void addOrUpdateEmojiInHistory({ emoji, name, skin_tone_support });\n },\n [addOrUpdateEmojiInHistory, onSelect],\n );\n\n useEffect(() => {\n if (selectedCategory) {\n setFocusedIndex(0);\n\n const container = emojiRef.current;\n\n if (!container) {\n return;\n }\n\n container.scrollTop = 0;\n }\n }, [selectedCategory]);\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (shouldPreventListener) {\n return;\n }\n\n if (\n !shouldPreventEmojiControlsRef.current &&\n (event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight')\n ) {\n event.preventDefault();\n const children = emojiRef.current?.children;\n if (children && children.length > 0) {\n const container = emojiRef.current;\n let newIndex = focusedIndex !== null ? focusedIndex : 0;\n\n if (event.ctrlKey) {\n return;\n }\n\n if (event.key === 'ArrowUp') {\n newIndex = (newIndex - 6) % children.length;\n } else if (event.key === 'ArrowDown') {\n newIndex = (newIndex + 6) % children.length;\n } else if (event.key === 'ArrowLeft') {\n newIndex = (newIndex - 1) % children.length;\n } else if (event.key === 'ArrowRight') {\n newIndex = (newIndex + 1) % children.length;\n }\n\n // remove focus from the old element\n if (focusedIndex !== null) {\n const prevElement = children[focusedIndex] as HTMLDivElement;\n prevElement.tabIndex = -1;\n }\n\n if (newIndex < 0) {\n newIndex = children.length - 1;\n } else if (newIndex > children.length - 1) {\n newIndex = 0;\n }\n\n setFocusedIndex(newIndex);\n\n // Set focus to the element\n const newElement = children[newIndex] as HTMLDivElement;\n newElement.tabIndex = 0;\n\n const containerRect = container.getBoundingClientRect();\n const elementRect = newElement.getBoundingClientRect();\n\n if (elementRect.bottom > containerRect.bottom) {\n container.scrollTop += elementRect.bottom - containerRect.bottom;\n } else if (elementRect.top < containerRect.top) {\n container.scrollTop -= containerRect.top - elementRect.top;\n }\n }\n } else if (\n event.key === 'Enter' &&\n !shouldPreventEmojiControlsRef.current &&\n focusedIndex !== null\n ) {\n if (event.ctrlKey) {\n setShouldShowSkinTonePopup(true);\n\n return;\n }\n\n const { dataset } = emojiRef.current?.children[focusedIndex] as HTMLDivElement;\n\n const { emoji, name, skinToneSupport } = dataset;\n\n if (!emoji || !name || !skinToneSupport) {\n return;\n }\n\n handleSelect({ emoji, name, skin_tone_support: skinToneSupport === 'true' }, true);\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [focusedIndex, handleSelect, shouldPreventListener]);\n\n const handleRightClick = useCallback((index: number) => {\n setFocusedIndex(index);\n }, []);\n\n const emojis = useMemo(() => {\n if (searchString.trim() !== '') {\n const lowerSearchString = searchString.toLowerCase();\n\n const searchResults: JSX.Element[] = [];\n\n Object.entries(emojiList).forEach(([emoji, { name, skin_tone_support }], index) => {\n const keywords = (emojiLib as { [key: string]: string[] })[emoji] as\n | string[]\n | undefined;\n\n const germanKeywords = (germanEmojiLib as { [key: string]: string[] })[emoji] as\n | string[]\n | undefined;\n\n if (\n name.includes(lowerSearchString) ||\n keywords?.some((keyword) => keyword.includes(lowerSearchString)) ||\n germanKeywords?.some((keyword) => keyword.includes(lowerSearchString))\n ) {\n searchResults.push(\n <Emoji\n shouldShowSkinTonePopup={\n index === focusedIndex &&\n skin_tone_support &&\n shouldShowSkinTonePopup\n }\n isSelected={index === focusedIndex}\n emoji={emoji}\n index={index}\n onRightClick={handleRightClick}\n isSkinToneSupported={skin_tone_support}\n key={name}\n name={name}\n onPopupVisibilityChange={handlePopupVisibilityChange}\n onSelect={(e) =>\n handleSelect({ emoji: e, name, skin_tone_support, index })\n }\n emojiList={emojiList}\n />,\n );\n }\n });\n\n return searchResults;\n }\n\n if (selectedCategory === 'history') {\n return historyEmojis.map(({ emoji, name, skin_tone_support }, index) => (\n <Emoji\n isSelected={index === focusedIndex}\n shouldShowSkinTonePopup={\n index === focusedIndex && skin_tone_support && shouldShowSkinTonePopup\n }\n emoji={emoji}\n name={name}\n key={name}\n index={index}\n onRightClick={handleRightClick}\n onPopupVisibilityChange={handlePopupVisibilityChange}\n onSelect={(e) => handleSelect({ emoji: e, name, skin_tone_support, index })}\n isSkinToneSupported={false}\n emojiList={emojiList}\n />\n ));\n }\n\n return emojiCategories\n .find(({ slug }) => slug === selectedCategory)\n ?.emojis.map(({ emoji, name, skin_tone_support }, index) => (\n <Emoji\n isSelected={index === focusedIndex}\n shouldShowSkinTonePopup={\n index === focusedIndex && skin_tone_support && shouldShowSkinTonePopup\n }\n emoji={emoji}\n name={name}\n index={index}\n onRightClick={handleRightClick}\n isSkinToneSupported={skin_tone_support}\n key={name}\n onPopupVisibilityChange={handlePopupVisibilityChange}\n onSelect={(e) => handleSelect({ emoji: e, name, skin_tone_support, index })}\n emojiList={emojiList}\n />\n ));\n }, [\n searchString,\n selectedCategory,\n focusedIndex,\n shouldShowSkinTonePopup,\n handleRightClick,\n handlePopupVisibilityChange,\n handleSelect,\n historyEmojis,\n ]);\n\n const shouldShowNoContentInfo = !emojis || emojis.length === 0;\n\n return (\n <StyledEmojiPickerEmojis\n className=\"chayns-scrollbar\"\n $shouldPreventScroll={shouldPreventScroll}\n $shouldShowNoContentInfo={shouldShowNoContentInfo}\n ref={combinedRef}\n >\n {emojis}\n {shouldShowNoContentInfo && (\n <StyledEmojiPickerEmojisNoContentInfo>\n Hier werden die zuletzt verwendeten Emojis angezeigt, die über diese Auswahl\n gewählt wurden.\n </StyledEmojiPickerEmojisNoContentInfo>\n )}\n </StyledEmojiPickerEmojis>\n );\n};\n\nEmojiPickerEmojis.displayName = 'EmojiPickerEmojis';\n\nexport default EmojiPickerEmojis;\n"],"mappings":";;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,MAAA,GAAAC,uBAAA,CAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AAEA,IAAAO,MAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,kBAAA,GAAAR,OAAA;AAGoC,SAAAE,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAT,uBAAA,YAAAA,CAAAK,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA,KAZpC;AA2CA,MAAMgB,iBAA6C,GAAGA,CAAC;EACnDC,WAAW;EACXC,QAAQ;EACRC,QAAQ;EACRC,YAAY;EACZC;AACJ,CAAC,KAAK;EACF,MAAM,CAACC,mBAAmB,EAAEC,sBAAsB,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACrE,MAAM,CAACC,uBAAuB,EAAEC,0BAA0B,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EAC7E,MAAM,CAACG,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAJ,eAAQ,EAAS,CAAC,CAAC;EAC3D,MAAM,CAACK,eAAe,EAAEC,kBAAkB,CAAC,GAAG,IAAAN,eAAQ,EAAY,EAAE,CAAC;EACrE,MAAM,CAACO,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAR,eAAQ,EAAoB,EAAE,CAAC;EAEjE,IAAAS,gBAAS,EAAC,MAAM;IACZ,KAAKC,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAA5C,uBAAA,CAAAJ,OAAA,CAAO,uCAAuC,IAAEgD,IAAI,CAAC,CAAC;MAAErC,OAAO,EAAEsC;IAAW,CAAC,KAAK;MACnFP,kBAAkB,CAACO,UAAU,CAAC;IAClC,CAAC,CAAC;IACF,KAAKH,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAA5C,uBAAA,CAAAJ,OAAA,CAAO,uCAAuC,IAAEgD,IAAI,CAAC,CAAC;MAAErC,OAAO,EAAEuC;IAAO,CAAC,KAAK;MAC/EN,YAAY,CAACM,MAAM,CAAC;IACxB,CAAC,CAAC;EACN,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM,CAACC,qBAAqB,EAAEC,GAAG,CAAC,GAAG,IAAAC,wBAAkB,EAAC,CAAC;EAEzD,MAAMC,QAAQ,GAAG,IAAAC,aAAM,EAAiB,IAAI,CAAC;EAC7C,MAAMC,6BAA6B,GAAG,IAAAD,aAAM,EAAC,KAAK,CAAC;EAEnD,MAAME,WAAW,GAAG,IAAAC,qBAAe,EAACJ,QAAQ,EAAEF,GAAG,CAAC;EAElD,MAAM;IAAEO,yBAAyB;IAAEC;EAAc,CAAC,GAAG,IAAAC,6BAAe,EAAC;IACjEhC,WAAW;IACXE,QAAQ;IACRE;EACJ,CAAC,CAAC;EAEF,MAAM6B,2BAA2B,GAAG,IAAAC,kBAAW,EAAEC,SAAkB,IAAK;IACpE1B,0BAA0B,CAAC0B,SAAS,CAAC;IACrCR,6BAA6B,CAACS,OAAO,GAAGD,SAAS;IACjD7B,sBAAsB,CAAC6B,SAAS,CAAC;EACrC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,YAAY,GAAG,IAAAH,kBAAW,EAC5B,CACI;IACII,KAAK;IACLC,IAAI;IACJC,iBAAiB;IACjBC;EAMJ,CAAC,EACDC,uBAAuB,GAAG,KAAK,KAC9B;IACDzC,QAAQ,CAACqC,KAAK,EAAEI,uBAAuB,CAAC;IAExC,IAAID,KAAK,EAAE;MACP9B,eAAe,CAAC8B,KAAK,CAAC;IAC1B;IAEA,KAAKX,yBAAyB,CAAC;MAAEQ,KAAK;MAAEC,IAAI;MAAEC;IAAkB,CAAC,CAAC;EACtE,CAAC,EACD,CAACV,yBAAyB,EAAE7B,QAAQ,CACxC,CAAC;EAED,IAAAe,gBAAS,EAAC,MAAM;IACZ,IAAIZ,gBAAgB,EAAE;MAClBO,eAAe,CAAC,CAAC,CAAC;MAElB,MAAMgC,SAAS,GAAGlB,QAAQ,CAACW,OAAO;MAElC,IAAI,CAACO,SAAS,EAAE;QACZ;MACJ;MAEAA,SAAS,CAACC,SAAS,GAAG,CAAC;IAC3B;EACJ,CAAC,EAAE,CAACxC,gBAAgB,CAAC,CAAC;EAEtB,IAAAY,gBAAS,EAAC,MAAM;IACZ,MAAM6B,aAAa,GAAIC,KAAoB,IAAK;MAC5C,IAAIxB,qBAAqB,EAAE;QACvB;MACJ;MAEA,IACI,CAACK,6BAA6B,CAACS,OAAO,KACrCU,KAAK,CAACC,GAAG,KAAK,SAAS,IACpBD,KAAK,CAACC,GAAG,KAAK,WAAW,IACzBD,KAAK,CAACC,GAAG,KAAK,WAAW,IACzBD,KAAK,CAACC,GAAG,KAAK,YAAY,CAAC,EACjC;QAAA,IAAAC,iBAAA;QACEF,KAAK,CAACG,cAAc,CAAC,CAAC;QACtB,MAAMC,QAAQ,IAAAF,iBAAA,GAAGvB,QAAQ,CAACW,OAAO,cAAAY,iBAAA,uBAAhBA,iBAAA,CAAkBE,QAAQ;QAC3C,IAAIA,QAAQ,IAAIA,QAAQ,CAACC,MAAM,GAAG,CAAC,EAAE;UACjC,MAAMR,SAAS,GAAGlB,QAAQ,CAACW,OAAO;UAClC,IAAIgB,QAAQ,GAAG1C,YAAY,KAAK,IAAI,GAAGA,YAAY,GAAG,CAAC;UAEvD,IAAIoC,KAAK,CAACO,OAAO,EAAE;YACf;UACJ;UAEA,IAAIP,KAAK,CAACC,GAAG,KAAK,SAAS,EAAE;YACzBK,QAAQ,GAAG,CAACA,QAAQ,GAAG,CAAC,IAAIF,QAAQ,CAACC,MAAM;UAC/C,CAAC,MAAM,IAAIL,KAAK,CAACC,GAAG,KAAK,WAAW,EAAE;YAClCK,QAAQ,GAAG,CAACA,QAAQ,GAAG,CAAC,IAAIF,QAAQ,CAACC,MAAM;UAC/C,CAAC,MAAM,IAAIL,KAAK,CAACC,GAAG,KAAK,WAAW,EAAE;YAClCK,QAAQ,GAAG,CAACA,QAAQ,GAAG,CAAC,IAAIF,QAAQ,CAACC,MAAM;UAC/C,CAAC,MAAM,IAAIL,KAAK,CAACC,GAAG,KAAK,YAAY,EAAE;YACnCK,QAAQ,GAAG,CAACA,QAAQ,GAAG,CAAC,IAAIF,QAAQ,CAACC,MAAM;UAC/C;;UAEA;UACA,IAAIzC,YAAY,KAAK,IAAI,EAAE;YACvB,MAAM4C,WAAW,GAAGJ,QAAQ,CAACxC,YAAY,CAAmB;YAC5D4C,WAAW,CAACC,QAAQ,GAAG,CAAC,CAAC;UAC7B;UAEA,IAAIH,QAAQ,GAAG,CAAC,EAAE;YACdA,QAAQ,GAAGF,QAAQ,CAACC,MAAM,GAAG,CAAC;UAClC,CAAC,MAAM,IAAIC,QAAQ,GAAGF,QAAQ,CAACC,MAAM,GAAG,CAAC,EAAE;YACvCC,QAAQ,GAAG,CAAC;UAChB;UAEAzC,eAAe,CAACyC,QAAQ,CAAC;;UAEzB;UACA,MAAMI,UAAU,GAAGN,QAAQ,CAACE,QAAQ,CAAmB;UACvDI,UAAU,CAACD,QAAQ,GAAG,CAAC;UAEvB,MAAME,aAAa,GAAGd,SAAS,CAACe,qBAAqB,CAAC,CAAC;UACvD,MAAMC,WAAW,GAAGH,UAAU,CAACE,qBAAqB,CAAC,CAAC;UAEtD,IAAIC,WAAW,CAACC,MAAM,GAAGH,aAAa,CAACG,MAAM,EAAE;YAC3CjB,SAAS,CAACC,SAAS,IAAIe,WAAW,CAACC,MAAM,GAAGH,aAAa,CAACG,MAAM;UACpE,CAAC,MAAM,IAAID,WAAW,CAACE,GAAG,GAAGJ,aAAa,CAACI,GAAG,EAAE;YAC5ClB,SAAS,CAACC,SAAS,IAAIa,aAAa,CAACI,GAAG,GAAGF,WAAW,CAACE,GAAG;UAC9D;QACJ;MACJ,CAAC,MAAM,IACHf,KAAK,CAACC,GAAG,KAAK,OAAO,IACrB,CAACpB,6BAA6B,CAACS,OAAO,IACtC1B,YAAY,KAAK,IAAI,EACvB;QAAA,IAAAoD,kBAAA;QACE,IAAIhB,KAAK,CAACO,OAAO,EAAE;UACf5C,0BAA0B,CAAC,IAAI,CAAC;UAEhC;QACJ;QAEA,MAAM;UAAEsD;QAAQ,CAAC,IAAAD,kBAAA,GAAGrC,QAAQ,CAACW,OAAO,cAAA0B,kBAAA,uBAAhBA,kBAAA,CAAkBZ,QAAQ,CAACxC,YAAY,CAAmB;QAE9E,MAAM;UAAE4B,KAAK;UAAEC,IAAI;UAAEyB;QAAgB,CAAC,GAAGD,OAAO;QAEhD,IAAI,CAACzB,KAAK,IAAI,CAACC,IAAI,IAAI,CAACyB,eAAe,EAAE;UACrC;QACJ;QAEA3B,YAAY,CAAC;UAAEC,KAAK;UAAEC,IAAI;UAAEC,iBAAiB,EAAEwB,eAAe,KAAK;QAAO,CAAC,EAAE,IAAI,CAAC;MACtF;IACJ,CAAC;IAEDC,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAErB,aAAa,CAAC;IAEnD,OAAO,MAAM;MACToB,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEtB,aAAa,CAAC;IAC1D,CAAC;EACL,CAAC,EAAE,CAACnC,YAAY,EAAE2B,YAAY,EAAEf,qBAAqB,CAAC,CAAC;EAEvD,MAAM8C,gBAAgB,GAAG,IAAAlC,kBAAW,EAAEO,KAAa,IAAK;IACpD9B,eAAe,CAAC8B,KAAK,CAAC;EAC1B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMpB,MAAM,GAAG,IAAAgD,cAAO,EAAC,MAAM;IAAA,IAAAC,qBAAA;IACzB,IAAInE,YAAY,CAACoE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;MAC5B,MAAMC,iBAAiB,GAAGrE,YAAY,CAACsE,WAAW,CAAC,CAAC;MAEpD,MAAMC,aAA4B,GAAG,EAAE;MAEvC9E,MAAM,CAAC+E,OAAO,CAAC7D,SAAS,CAAC,CAAC8D,OAAO,CAAC,CAAC,CAACtC,KAAK,EAAE;QAAEC,IAAI;QAAEC;MAAkB,CAAC,CAAC,EAAEC,KAAK,KAAK;QAC/E,MAAMoC,QAAQ,GAAIC,iBAAQ,CAAiCxC,KAAK,CAEjD;QAEf,MAAMyC,cAAc,GAAIC,kBAAc,CAAiC1C,KAAK,CAE7D;QAEf,IACIC,IAAI,CAAC0C,QAAQ,CAACT,iBAAiB,CAAC,IAChCK,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEK,IAAI,CAAEC,OAAO,IAAKA,OAAO,CAACF,QAAQ,CAACT,iBAAiB,CAAC,CAAC,IAChEO,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAEG,IAAI,CAAEC,OAAO,IAAKA,OAAO,CAACF,QAAQ,CAACT,iBAAiB,CAAC,CAAC,EACxE;UACEE,aAAa,CAACU,IAAI,cACd9G,MAAA,CAAAQ,OAAA,CAAAuG,aAAA,CAAC3G,MAAA,CAAAI,OAAK;YACF0B,uBAAuB,EACnBiC,KAAK,KAAK/B,YAAY,IACtB8B,iBAAiB,IACjBhC,uBACH;YACD8E,UAAU,EAAE7C,KAAK,KAAK/B,YAAa;YACnC4B,KAAK,EAAEA,KAAM;YACbG,KAAK,EAAEA,KAAM;YACb8C,YAAY,EAAEnB,gBAAiB;YAC/BoB,mBAAmB,EAAEhD,iBAAkB;YACvCO,GAAG,EAAER,IAAK;YACVA,IAAI,EAAEA,IAAK;YACXkD,uBAAuB,EAAExD,2BAA4B;YACrDhC,QAAQ,EAAGrB,CAAC,IACRyD,YAAY,CAAC;cAAEC,KAAK,EAAE1D,CAAC;cAAE2D,IAAI;cAAEC,iBAAiB;cAAEC;YAAM,CAAC,CAC5D;YACD3B,SAAS,EAAEA;UAAU,CACxB,CACL,CAAC;QACL;MACJ,CAAC,CAAC;MAEF,OAAO4D,aAAa;IACxB;IAEA,IAAItE,gBAAgB,KAAK,SAAS,EAAE;MAChC,OAAO2B,aAAa,CAAC2D,GAAG,CAAC,CAAC;QAAEpD,KAAK;QAAEC,IAAI;QAAEC;MAAkB,CAAC,EAAEC,KAAK,kBAC/DnE,MAAA,CAAAQ,OAAA,CAAAuG,aAAA,CAAC3G,MAAA,CAAAI,OAAK;QACFwG,UAAU,EAAE7C,KAAK,KAAK/B,YAAa;QACnCF,uBAAuB,EACnBiC,KAAK,KAAK/B,YAAY,IAAI8B,iBAAiB,IAAIhC,uBAClD;QACD8B,KAAK,EAAEA,KAAM;QACbC,IAAI,EAAEA,IAAK;QACXQ,GAAG,EAAER,IAAK;QACVE,KAAK,EAAEA,KAAM;QACb8C,YAAY,EAAEnB,gBAAiB;QAC/BqB,uBAAuB,EAAExD,2BAA4B;QACrDhC,QAAQ,EAAGrB,CAAC,IAAKyD,YAAY,CAAC;UAAEC,KAAK,EAAE1D,CAAC;UAAE2D,IAAI;UAAEC,iBAAiB;UAAEC;QAAM,CAAC,CAAE;QAC5E+C,mBAAmB,EAAE,KAAM;QAC3B1E,SAAS,EAAEA;MAAU,CACxB,CACJ,CAAC;IACN;IAEA,QAAAwD,qBAAA,GAAO1D,eAAe,CACjB+E,IAAI,CAAC,CAAC;MAAEC;IAAK,CAAC,KAAKA,IAAI,KAAKxF,gBAAgB,CAAC,cAAAkE,qBAAA,uBAD3CA,qBAAA,CAEDjD,MAAM,CAACqE,GAAG,CAAC,CAAC;MAAEpD,KAAK;MAAEC,IAAI;MAAEC;IAAkB,CAAC,EAAEC,KAAK,kBACnDnE,MAAA,CAAAQ,OAAA,CAAAuG,aAAA,CAAC3G,MAAA,CAAAI,OAAK;MACFwG,UAAU,EAAE7C,KAAK,KAAK/B,YAAa;MACnCF,uBAAuB,EACnBiC,KAAK,KAAK/B,YAAY,IAAI8B,iBAAiB,IAAIhC,uBAClD;MACD8B,KAAK,EAAEA,KAAM;MACbC,IAAI,EAAEA,IAAK;MACXE,KAAK,EAAEA,KAAM;MACb8C,YAAY,EAAEnB,gBAAiB;MAC/BoB,mBAAmB,EAAEhD,iBAAkB;MACvCO,GAAG,EAAER,IAAK;MACVkD,uBAAuB,EAAExD,2BAA4B;MACrDhC,QAAQ,EAAGrB,CAAC,IAAKyD,YAAY,CAAC;QAAEC,KAAK,EAAE1D,CAAC;QAAE2D,IAAI;QAAEC,iBAAiB;QAAEC;MAAM,CAAC,CAAE;MAC5E3B,SAAS,EAAEA;IAAU,CACxB,CACJ,CAAC;EACV,CAAC,EAAE,CACCX,YAAY,EACZC,gBAAgB,EAChBM,YAAY,EACZF,uBAAuB,EACvB4D,gBAAgB,EAChBnC,2BAA2B,EAC3BI,YAAY,EACZN,aAAa,CAChB,CAAC;EAEF,MAAM8D,uBAAuB,GAAG,CAACxE,MAAM,IAAIA,MAAM,CAAC8B,MAAM,KAAK,CAAC;EAE9D,oBACI7E,MAAA,CAAAQ,OAAA,CAAAuG,aAAA,CAAC1G,kBAAA,CAAAmH,uBAAuB;IACpBC,SAAS,EAAC,kBAAkB;IAC5BC,oBAAoB,EAAE3F,mBAAoB;IAC1C4F,wBAAwB,EAAEJ,uBAAwB;IAClDtE,GAAG,EAAEK;EAAY,GAEhBP,MAAM,EACNwE,uBAAuB,iBACpBvH,MAAA,CAAAQ,OAAA,CAAAuG,aAAA,CAAC1G,kBAAA,CAAAuH,oCAAoC,QAAC,oGAGA,CAErB,CAAC;AAElC,CAAC;AAEDnG,iBAAiB,CAACoG,WAAW,GAAG,mBAAmB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAvH,OAAA,GAErCiB,iBAAiB","ignoreList":[]}
1
+ {"version":3,"file":"EmojiPickerEmojis.js","names":["_react","_interopRequireWildcard","require","_emojilib","_interopRequireDefault","_emojiDeDE","_emojiHistory","_EmojiPickerEmojiList","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","EmojiPickerEmojis","accessToken","onSelect","personId","searchString","selectedCategory","emojiCategories","setEmojiCategories","useState","emojiList","setEmojiList","addOrUpdateEmojiInHistory","historyEmojis","useEmojiHistory","handleSelect","useCallback","emoji","shouldRestoreInputFocus","useEffect","Promise","resolve","then","categories","emojis","visibleEmojis","trim","lowerSearchString","toLowerCase","entries","filter","name","keywords","emojiLib","germanKeywords","germanEmojiLib","includes","some","keyword","map","data","_emojiCategories$find","find","slug","isHistory","listKey","JSON","stringify","createElement","key","displayName","_default","exports"],"sources":["../../../../../src/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useState } from 'react';\nimport emojiLib from 'emojilib';\nimport germanEmojiLib from '../../../constants/emoji-de-DE.json';\nimport { useEmojiHistory } from '../../../hooks/emojiHistory';\nimport type { Category } from '../../../types/category';\nimport EmojiPickerEmojiList, {\n type PickerEmoji,\n} from './emoji-picker-emoji-list/EmojiPickerEmojiList';\n\nexport type EmojiPickerEmojisProps = {\n accessToken?: string;\n onSelect: (emoji: string, shouldRestoreInputFocus?: boolean) => void;\n personId?: string;\n searchString: string;\n selectedCategory: Category;\n};\n\ntype EmojiDictionary = Record<string, Omit<PickerEmoji, 'emoji'>>;\ntype EmojiCategory = { slug: string; emojis: PickerEmoji[] };\n\nconst EmojiPickerEmojis: FC<EmojiPickerEmojisProps> = ({\n accessToken,\n onSelect,\n personId,\n searchString,\n selectedCategory,\n}) => {\n const [emojiCategories, setEmojiCategories] = useState<EmojiCategory[]>([]);\n const [emojiList, setEmojiList] = useState<EmojiDictionary>({});\n\n const { addOrUpdateEmojiInHistory, historyEmojis } = useEmojiHistory({\n accessToken,\n personId,\n selectedCategory,\n });\n\n const handleSelect = useCallback(\n (emoji: PickerEmoji, shouldRestoreInputFocus = false) => {\n onSelect(emoji.emoji, shouldRestoreInputFocus);\n void addOrUpdateEmojiInHistory(emoji);\n },\n [addOrUpdateEmojiInHistory, onSelect],\n );\n\n useEffect(() => {\n void import('unicode-emoji-json/data-by-group.json').then(({ default: categories }) => {\n setEmojiCategories(categories);\n });\n void import('unicode-emoji-json/data-by-emoji.json').then(({ default: emojis }) => {\n setEmojiList(emojis);\n });\n }, []);\n\n let visibleEmojis: PickerEmoji[];\n\n if (searchString.trim() !== '') {\n const lowerSearchString = searchString.toLowerCase();\n visibleEmojis = Object.entries(emojiList)\n .filter(([emoji, { name }]) => {\n const keywords = (emojiLib as Record<string, string[]>)[emoji];\n const germanKeywords = (germanEmojiLib as Record<string, string[]>)[emoji];\n\n return (\n name.includes(lowerSearchString) ||\n keywords?.some((keyword) => keyword.includes(lowerSearchString)) ||\n germanKeywords?.some((keyword) => keyword.includes(lowerSearchString))\n );\n })\n .map(([emoji, data]) => ({ emoji, ...data }));\n } else if (selectedCategory === 'history') {\n visibleEmojis = historyEmojis;\n } else {\n visibleEmojis = emojiCategories.find(({ slug }) => slug === selectedCategory)?.emojis ?? [];\n }\n\n // Reset navigation and dismiss popups when the displayed identities or their order change,\n // following the existing category-change rule without taking focus from the search field.\n const isHistory = searchString.trim() === '' && selectedCategory === 'history';\n const listKey = JSON.stringify([\n selectedCategory,\n isHistory,\n visibleEmojis.map(({ emoji }) => emoji),\n ]);\n\n return (\n <EmojiPickerEmojiList\n key={listKey}\n emojis={visibleEmojis}\n emojiList={emojiList}\n isHistory={isHistory}\n onSelect={handleSelect}\n />\n );\n};\n\nEmojiPickerEmojis.displayName = 'EmojiPickerEmojis';\n\nexport default EmojiPickerEmojis;\n"],"mappings":"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","ignoreList":[]}