@chayns-components/emoji-input 5.6.4 → 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 (41) 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-input/EmojiInput.js +8 -1
  4. package/lib/cjs/components/emoji-input/EmojiInput.js.map +1 -1
  5. package/lib/cjs/components/emoji-input/EmojiInput.test.js +120 -0
  6. package/lib/cjs/components/emoji-input/EmojiInput.test.js.map +1 -0
  7. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.js +48 -219
  8. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.js.map +1 -1
  9. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.test.js +316 -0
  10. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.test.js.map +1 -0
  11. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/emoji/Emoji.js +1 -0
  12. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/emoji/Emoji.js.map +1 -1
  13. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.js +109 -0
  14. package/lib/cjs/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.js.map +1 -0
  15. package/lib/cjs/utils/selection.js +61 -31
  16. package/lib/cjs/utils/selection.js.map +1 -1
  17. package/lib/cjs/utils/selection.test.js +160 -0
  18. package/lib/cjs/utils/selection.test.js.map +1 -0
  19. package/lib/esm/build.test.js +32 -0
  20. package/lib/esm/build.test.js.map +1 -0
  21. package/lib/esm/components/emoji-input/EmojiInput.js +4 -1
  22. package/lib/esm/components/emoji-input/EmojiInput.js.map +1 -1
  23. package/lib/esm/components/emoji-input/EmojiInput.test.js +116 -0
  24. package/lib/esm/components/emoji-input/EmojiInput.test.js.map +1 -0
  25. package/lib/esm/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.js +47 -218
  26. package/lib/esm/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.js.map +1 -1
  27. package/lib/esm/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.test.js +312 -0
  28. package/lib/esm/components/emoji-picker/emoji-picker-emojis/EmojiPickerEmojis.test.js.map +1 -0
  29. package/lib/esm/components/emoji-picker/emoji-picker-emojis/emoji/Emoji.js +1 -0
  30. package/lib/esm/components/emoji-picker/emoji-picker-emojis/emoji/Emoji.js.map +1 -1
  31. package/lib/esm/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.js +101 -0
  32. package/lib/esm/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.js.map +1 -0
  33. package/lib/esm/utils/selection.js +59 -30
  34. package/lib/esm/utils/selection.js.map +1 -1
  35. package/lib/esm/utils/selection.test.js +158 -0
  36. package/lib/esm/utils/selection.test.js.map +1 -0
  37. package/lib/types/components/emoji-picker/emoji-picker-emojis/emoji-picker-emoji-list/EmojiPickerEmojiList.d.ts +15 -0
  38. package/lib/types/utils/selection.d.ts +1 -1
  39. package/package.json +3 -3
  40. package/lib/types/utils/emoji.test.d.ts +0 -1
  41. package/lib/types/utils/text.test.d.ts +0 -1
@@ -0,0 +1,158 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { getCurrentCursorPosition, insertInvisibleCursorMarker, setCursorPositionByAbsIndex } from './selection';
3
+ const select = (node, offset) => {
4
+ const range = document.createRange();
5
+ range.setStart(node, offset);
6
+ range.collapse(true);
7
+ window.getSelection().removeAllRanges();
8
+ window.getSelection().addRange(range);
9
+ };
10
+ const createEditor = () => {
11
+ const editor = document.createElement('div');
12
+ editor.setAttribute('contenteditable', 'true');
13
+ editor.textContent = 'abcd';
14
+ document.body.append(editor);
15
+ editor.focus();
16
+ select(editor.firstChild, 2);
17
+ return editor;
18
+ };
19
+ beforeEach(() => {
20
+ vi.useFakeTimers();
21
+ // These single-line fixtures do not need layout-dependent innerText semantics.
22
+ Object.defineProperty(HTMLElement.prototype, 'innerText', {
23
+ configurable: true,
24
+ get() {
25
+ return this.textContent ?? '';
26
+ },
27
+ set(value) {
28
+ this.textContent = value;
29
+ }
30
+ });
31
+ // jsdom has Selection/Range but does not implement browser editing commands.
32
+ Object.defineProperty(document, 'execCommand', {
33
+ configurable: true,
34
+ value: vi.fn()
35
+ });
36
+ });
37
+ afterEach(() => {
38
+ vi.runOnlyPendingTimers();
39
+ vi.useRealTimers();
40
+ vi.restoreAllMocks();
41
+ // @ts-expect-error - jsdom does not define innerText.
42
+ delete HTMLElement.prototype.innerText;
43
+ document.body.replaceChildren();
44
+ window.getSelection().removeAllRanges();
45
+ });
46
+ describe('insertInvisibleCursorMarker', () => {
47
+ it('does not restore a cursor after the editor content was removed', () => {
48
+ const editor = createEditor();
49
+ insertInvisibleCursorMarker(editor);
50
+ editor.replaceChildren();
51
+ expect(() => vi.advanceTimersByTime(10)).not.toThrow();
52
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
53
+ });
54
+ it('does not restore a cursor after the editor was detached', () => {
55
+ const editor = createEditor();
56
+ insertInvisibleCursorMarker(editor);
57
+ editor.remove();
58
+ const focus = document.activeElement;
59
+ expect(() => vi.advanceTimersByTime(10)).not.toThrow();
60
+ expect(document.activeElement).toBe(focus);
61
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
62
+ });
63
+ it('does not use a marker moved into another editor', () => {
64
+ const editor = createEditor();
65
+ insertInvisibleCursorMarker(editor);
66
+ const marker = editor.querySelector('.invisible-cursor-marker');
67
+ const other = document.createElement('div');
68
+ other.setAttribute('contenteditable', 'true');
69
+ document.body.append(other);
70
+ other.append(marker);
71
+ const anchorNode = window.getSelection().anchorNode;
72
+ vi.advanceTimersByTime(10);
73
+ expect(window.getSelection().anchorNode).toBe(anchorNode);
74
+ expect(marker.isConnected).toBe(false);
75
+ });
76
+ it('preserves focus and the caret of another input', () => {
77
+ const editor = createEditor();
78
+ insertInvisibleCursorMarker(editor);
79
+ const input = document.createElement('input');
80
+ input.value = 'other';
81
+ document.body.append(input);
82
+ input.focus();
83
+ input.setSelectionRange(1, 3);
84
+ vi.advanceTimersByTime(10);
85
+ expect(document.activeElement).toBe(input);
86
+ expect([input.selectionStart, input.selectionEnd]).toEqual([1, 3]);
87
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
88
+ });
89
+ it('preserves a selection moved into another contenteditable', () => {
90
+ const editor = createEditor();
91
+ insertInvisibleCursorMarker(editor);
92
+ const other = createEditor();
93
+ select(other.firstChild, 1);
94
+ vi.advanceTimersByTime(10);
95
+ expect(document.activeElement).toBe(other);
96
+ expect(getCurrentCursorPosition(other)).toBe(1);
97
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
98
+ });
99
+ it('preserves a newer cursor operation in the same editor', () => {
100
+ const editor = createEditor();
101
+ insertInvisibleCursorMarker(editor);
102
+ setCursorPositionByAbsIndex({
103
+ editorElement: editor,
104
+ position: 1
105
+ });
106
+ vi.advanceTimersByTime(10);
107
+ expect(getCurrentCursorPosition(editor)).toBe(1);
108
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
109
+ });
110
+ it('respects a replaced selection even at the same interim coordinates', () => {
111
+ const editor = createEditor();
112
+ insertInvisibleCursorMarker(editor);
113
+ const selection = window.getSelection();
114
+ select(selection.anchorNode, selection.anchorOffset);
115
+ const expectedRange = selection.getRangeAt(0);
116
+ vi.advanceTimersByTime(10);
117
+ expect(selection.getRangeAt(0)).toBe(expectedRange);
118
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
119
+ });
120
+ it('supersedes an older marker operation', () => {
121
+ const editor = createEditor();
122
+ insertInvisibleCursorMarker(editor);
123
+ vi.advanceTimersByTime(5);
124
+ select(editor.lastChild, 1);
125
+ insertInvisibleCursorMarker(editor);
126
+ expect(editor.querySelectorAll('.invisible-cursor-marker')).toHaveLength(1);
127
+ vi.advanceTimersByTime(5);
128
+ expect(editor.querySelectorAll('.invisible-cursor-marker')).toHaveLength(1);
129
+ vi.advanceTimersByTime(5);
130
+ expect(getCurrentCursorPosition(editor)).toBe(3);
131
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
132
+ });
133
+ it('cleans up immediately when cancelled', () => {
134
+ const editor = createEditor();
135
+ const cancel = insertInvisibleCursorMarker(editor);
136
+ const timerCount = vi.getTimerCount();
137
+ cancel?.();
138
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
139
+ expect(vi.getTimerCount()).toBe(timerCount - 1);
140
+ });
141
+ it('restores the cursor after backward deletion and removes the marker', () => {
142
+ const editor = createEditor();
143
+ vi.mocked(document.execCommand).mockImplementation(() => {
144
+ const range = window.getSelection().getRangeAt(0);
145
+ range.setStart(range.startContainer, range.startOffset - 1);
146
+ range.deleteContents();
147
+ return true;
148
+ });
149
+ insertInvisibleCursorMarker(editor);
150
+ vi.advanceTimersByTime(10);
151
+ expect(document.execCommand).toHaveBeenCalledWith('delete', false);
152
+ expect(editor.textContent).toBe('acd');
153
+ expect(getCurrentCursorPosition(editor)).toBe(1);
154
+ expect(document.activeElement).toBe(editor);
155
+ expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();
156
+ });
157
+ });
158
+ //# sourceMappingURL=selection.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.test.js","names":["afterEach","beforeEach","describe","expect","it","vi","getCurrentCursorPosition","insertInvisibleCursorMarker","setCursorPositionByAbsIndex","select","node","offset","range","document","createRange","setStart","collapse","window","getSelection","removeAllRanges","addRange","createEditor","editor","createElement","setAttribute","textContent","body","append","focus","firstChild","useFakeTimers","Object","defineProperty","HTMLElement","prototype","configurable","get","set","value","fn","runOnlyPendingTimers","useRealTimers","restoreAllMocks","innerText","replaceChildren","advanceTimersByTime","not","toThrow","querySelector","toBeNull","remove","activeElement","toBe","marker","other","anchorNode","isConnected","input","setSelectionRange","selectionStart","selectionEnd","toEqual","editorElement","position","selection","anchorOffset","expectedRange","getRangeAt","lastChild","querySelectorAll","toHaveLength","cancel","timerCount","getTimerCount","mocked","execCommand","mockImplementation","startContainer","startOffset","deleteContents","toHaveBeenCalledWith"],"sources":["../../../src/utils/selection.test.ts"],"sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport {\n getCurrentCursorPosition,\n insertInvisibleCursorMarker,\n setCursorPositionByAbsIndex,\n} from './selection';\n\nconst select = (node: Node, offset: number) => {\n const range = document.createRange();\n range.setStart(node, offset);\n range.collapse(true);\n window.getSelection()!.removeAllRanges();\n window.getSelection()!.addRange(range);\n};\n\nconst createEditor = () => {\n const editor = document.createElement('div');\n editor.setAttribute('contenteditable', 'true');\n editor.textContent = 'abcd';\n document.body.append(editor);\n editor.focus();\n select(editor.firstChild!, 2);\n return editor;\n};\n\nbeforeEach(() => {\n vi.useFakeTimers();\n // These single-line fixtures do not need layout-dependent innerText semantics.\n Object.defineProperty(HTMLElement.prototype, 'innerText', {\n configurable: true,\n get() {\n return this.textContent ?? '';\n },\n set(value: string) {\n this.textContent = value;\n },\n });\n // jsdom has Selection/Range but does not implement browser editing commands.\n Object.defineProperty(document, 'execCommand', { configurable: true, value: vi.fn() });\n});\n\nafterEach(() => {\n vi.runOnlyPendingTimers();\n vi.useRealTimers();\n vi.restoreAllMocks();\n // @ts-expect-error - jsdom does not define innerText.\n delete HTMLElement.prototype.innerText;\n document.body.replaceChildren();\n window.getSelection()!.removeAllRanges();\n});\n\ndescribe('insertInvisibleCursorMarker', () => {\n it('does not restore a cursor after the editor content was removed', () => {\n const editor = createEditor();\n insertInvisibleCursorMarker(editor);\n editor.replaceChildren();\n expect(() => vi.advanceTimersByTime(10)).not.toThrow();\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n });\n\n it('does not restore a cursor after the editor was detached', () => {\n const editor = createEditor();\n insertInvisibleCursorMarker(editor);\n editor.remove();\n const focus = document.activeElement;\n expect(() => vi.advanceTimersByTime(10)).not.toThrow();\n expect(document.activeElement).toBe(focus);\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n });\n\n it('does not use a marker moved into another editor', () => {\n const editor = createEditor();\n insertInvisibleCursorMarker(editor);\n const marker = editor.querySelector('.invisible-cursor-marker')!;\n const other = document.createElement('div');\n other.setAttribute('contenteditable', 'true');\n document.body.append(other);\n other.append(marker);\n const anchorNode = window.getSelection()!.anchorNode;\n vi.advanceTimersByTime(10);\n expect(window.getSelection()!.anchorNode).toBe(anchorNode);\n expect(marker.isConnected).toBe(false);\n });\n\n it('preserves focus and the caret of another input', () => {\n const editor = createEditor();\n insertInvisibleCursorMarker(editor);\n const input = document.createElement('input');\n input.value = 'other';\n document.body.append(input);\n input.focus();\n input.setSelectionRange(1, 3);\n vi.advanceTimersByTime(10);\n expect(document.activeElement).toBe(input);\n expect([input.selectionStart, input.selectionEnd]).toEqual([1, 3]);\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n });\n\n it('preserves a selection moved into another contenteditable', () => {\n const editor = createEditor();\n insertInvisibleCursorMarker(editor);\n const other = createEditor();\n select(other.firstChild!, 1);\n vi.advanceTimersByTime(10);\n expect(document.activeElement).toBe(other);\n expect(getCurrentCursorPosition(other)).toBe(1);\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n });\n\n it('preserves a newer cursor operation in the same editor', () => {\n const editor = createEditor();\n insertInvisibleCursorMarker(editor);\n setCursorPositionByAbsIndex({ editorElement: editor, position: 1 });\n vi.advanceTimersByTime(10);\n expect(getCurrentCursorPosition(editor)).toBe(1);\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n });\n\n it('respects a replaced selection even at the same interim coordinates', () => {\n const editor = createEditor();\n insertInvisibleCursorMarker(editor);\n const selection = window.getSelection()!;\n select(selection.anchorNode!, selection.anchorOffset);\n const expectedRange = selection.getRangeAt(0);\n vi.advanceTimersByTime(10);\n expect(selection.getRangeAt(0)).toBe(expectedRange);\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n });\n\n it('supersedes an older marker operation', () => {\n const editor = createEditor();\n insertInvisibleCursorMarker(editor);\n vi.advanceTimersByTime(5);\n select(editor.lastChild!, 1);\n insertInvisibleCursorMarker(editor);\n expect(editor.querySelectorAll('.invisible-cursor-marker')).toHaveLength(1);\n vi.advanceTimersByTime(5);\n expect(editor.querySelectorAll('.invisible-cursor-marker')).toHaveLength(1);\n vi.advanceTimersByTime(5);\n expect(getCurrentCursorPosition(editor)).toBe(3);\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n });\n\n it('cleans up immediately when cancelled', () => {\n const editor = createEditor();\n const cancel = insertInvisibleCursorMarker(editor);\n const timerCount = vi.getTimerCount();\n cancel?.();\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n expect(vi.getTimerCount()).toBe(timerCount - 1);\n });\n\n it('restores the cursor after backward deletion and removes the marker', () => {\n const editor = createEditor();\n vi.mocked(document.execCommand).mockImplementation(() => {\n const range = window.getSelection()!.getRangeAt(0);\n range.setStart(range.startContainer, range.startOffset - 1);\n range.deleteContents();\n return true;\n });\n insertInvisibleCursorMarker(editor);\n vi.advanceTimersByTime(10);\n expect(document.execCommand).toHaveBeenCalledWith('delete', false);\n expect(editor.textContent).toBe('acd');\n expect(getCurrentCursorPosition(editor)).toBe(1);\n expect(document.activeElement).toBe(editor);\n expect(editor.querySelector('.invisible-cursor-marker')).toBeNull();\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { FC } from 'react';
2
+ import { type EmojiProps } from '../emoji/Emoji';
3
+ export interface PickerEmoji {
4
+ emoji: string;
5
+ name: string;
6
+ skin_tone_support: boolean;
7
+ }
8
+ interface EmojiPickerEmojiListProps {
9
+ emojis: PickerEmoji[];
10
+ emojiList: EmojiProps['emojiList'];
11
+ isHistory: boolean;
12
+ onSelect: (emoji: PickerEmoji, shouldRestoreInputFocus?: boolean) => void;
13
+ }
14
+ declare const EmojiPickerEmojiList: FC<EmojiPickerEmojiListProps>;
15
+ export default EmojiPickerEmojiList;
@@ -4,7 +4,7 @@ interface SaveSelectionOptions {
4
4
  }
5
5
  export declare const saveSelection: (element: HTMLDivElement, { shouldIgnoreEmptyTextNodes }?: SaveSelectionOptions) => void;
6
6
  export declare const restoreSelection: (element: HTMLDivElement) => void;
7
- export declare const insertInvisibleCursorMarker: () => void;
7
+ export declare const insertInvisibleCursorMarker: (editorElement: HTMLDivElement) => VoidFunction | undefined;
8
8
  export declare const insertPseudoMarker: () => void;
9
9
  export declare const insertCursorAtMarker: (ref: RefObject<HTMLDivElement>) => void;
10
10
  export declare const moveSelectionOffset: (distance: number) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/emoji-input",
3
- "version": "5.6.4",
3
+ "version": "5.6.8",
4
4
  "description": "Input field that supports HTML elements and emojis",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -75,7 +75,7 @@
75
75
  "vitest": "^1.6.1"
76
76
  },
77
77
  "dependencies": {
78
- "@chayns-components/core": "^5.6.4",
78
+ "@chayns-components/core": "^5.6.6",
79
79
  "@chayns/textstrings": "^1.0.2",
80
80
  "emojilib": "^3.0.12",
81
81
  "react-compiler-runtime": "^1.0.0",
@@ -91,5 +91,5 @@
91
91
  "publishConfig": {
92
92
  "access": "public"
93
93
  },
94
- "gitHead": "14fd754461f54c94eb03455cabd6c114fc6993f2"
94
+ "gitHead": "9d888b15d6d4bf4a420ae01c3df46e177de27886"
95
95
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};