@meenainwal/rich-text-editor 1.1.0 โ†’ 1.1.1

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/ReadME.md CHANGED
@@ -7,11 +7,15 @@ A premium, ultra-lightweight, and framework-agnostic **WYSIWYG rich text editor*
7
7
 
8
8
  ![Editor Preview](./images/editor-preview.png)
9
9
 
10
+ ## ๐ŸŽฎ Live React Preview
11
+ Wanna see it in action? Try the **Interactive React Demo** on StackBlitz:
12
+ [**Run Demo on StackBlitz**](https://stackblitz.com/edit/vitejs-vite-e8u5yntq?embed=1&view=preview)
13
+
10
14
  ## โœจ Premium Features & Why Choose This Editor?
11
15
 
12
16
  ### ๐Ÿ‘ Key Pros & Capabilities
13
- - **Zero Dependencies**: Pure Vanilla JS/TypeScript. No bloated third-party libraries.
14
- - **Microscopic Footprint**: Only **~25kB** gzipped, making it one of the most lightweight editors available.
17
+ - **Microscopic Footprint**: Only **~11kB** (Initial gzipped JS) + **2.3kB** (CSS). Total initial load is **~13kB gzipped**.
18
+ - **Performance Optimized**: Heavy components like the Emoji Picker (~19kB) are **lazy-loaded** only when clicked, ensuring your app stays fast.
15
19
  - **Framework Agnostic**: Native support for **React**, **Next.js**, **Vue**, **Angular**, and **Svelte**.
16
20
  - **Auto-Formatting Magic**: Intelligently parses pasted HTML strings into clean, formatted rich text.
17
21
  - **Professional UI/UX**: Modern aesthetics curated with a polished Slate & Indigo color palette.
@@ -20,6 +24,34 @@ A premium, ultra-lightweight, and framework-agnostic **WYSIWYG rich text editor*
20
24
  - **Dark Mode**: Sophisticated dark theme for premium developer experiences.
21
25
  - **Customizable Toolbar**: Granular control over tool visibility and layout.
22
26
 
27
+ ---
28
+
29
+ ## ๐ŸŒ Documentation Website (Coming Soon!)
30
+ We are currently building a dedicated official website to provide the best possible developer experience.
31
+
32
+ **What to expect:**
33
+ - **Interactive Playground**: Test all features live in your browser.
34
+ - **Deep-Dive Guides**: Detailed integration steps for React, Next.js, Vue, and more.
35
+ - **Full API Reference**: Comprehensive documentation for every method and option.
36
+ - **Custom Theme Builder**: Visually design your editor's look and feel.
37
+
38
+ ๐Ÿš€ **Stay tuned for the official launch!**
39
+
40
+ ---
41
+
42
+ ### ๐Ÿ“ฆ Bundle Size Breakdown
43
+ Transparency matters. Here's a breakdown of what your users download:
44
+
45
+ | Asset | Minified | Gzipped (Download) |
46
+ | :--- | :--- | :--- |
47
+ | **Core Bundle (JS)** | ~45 kB | **~11 kB** |
48
+ | **Styles (CSS)** | ~9 kB | **~2 kB** |
49
+ | **Total Initial Load** | **~54 kB** | **~13 kB** |
50
+ | Emoji Picker (Lazy-loaded) | +19 kB | +3 kB |
51
+
52
+ > [!TIP]
53
+ > The editor is optimized for performance. Features like the **Emoji Picker** are only loaded when needed, keeping your initial page load lightning fast.
54
+
23
55
  ### ๐Ÿ‘Ž Cons (Current Limitations)
24
56
  - Base64 image storage can increase the raw output string size for very large images (Backend S3 uploading adapter coming soon).
25
57
  - Markdown shortcut typing (e.g., typing `#` for H1) is not natively supported yet.
@@ -49,29 +81,63 @@ const editor = new TestEditor(container, {
49
81
  });
50
82
  ```
51
83
 
52
- ### In React / Next.js (SSR Safe)
84
+ ### In React (Preventing Duplicates)
85
+ In React **Strict Mode**, components mount twice in development. Always use the cleanup function to destroy the editor instance.
53
86
 
54
87
  ```tsx
55
- "use client";
56
88
  import { useEffect, useRef } from 'react';
57
89
  import { TestEditor } from '@meenainwal/rich-text-editor';
58
90
  import '@meenainwal/rich-text-editor/style';
59
91
 
60
- export default function Editor() {
92
+ export default function App() {
61
93
  const containerRef = useRef<HTMLDivElement>(null);
94
+ const editorRef = useRef<TestEditor | null>(null);
62
95
 
63
96
  useEffect(() => {
64
- if (containerRef.current) {
65
- new TestEditor(containerRef.current, {
66
- onSave: (html) => console.log("Saved:", html)
97
+ if (containerRef.current && !editorRef.current) {
98
+ editorRef.current = new TestEditor(containerRef.current, {
99
+ placeholder: 'Start writing...',
67
100
  });
68
101
  }
102
+
103
+ return () => {
104
+ if (editorRef.current) {
105
+ editorRef.current.destroy();
106
+ editorRef.current = null;
107
+ }
108
+ };
69
109
  }, []);
70
110
 
71
111
  return <div ref={containerRef} />;
72
112
  }
73
113
  ```
74
114
 
115
+ ### In Next.js (Safe Implementation)
116
+ For Next.js, ensure the editor is only initialized on the client side using `useEffect`.
117
+
118
+ ```tsx
119
+ "use client";
120
+ import { useEffect, useRef } from 'react';
121
+ import { TestEditor } from '@meenainwal/rich-text-editor';
122
+ import '@meenainwal/rich-text-editor/style';
123
+
124
+ export default function MyEditor() {
125
+ const containerRef = useRef<HTMLDivElement>(null);
126
+
127
+ useEffect(() => {
128
+ if (!containerRef.current) return;
129
+
130
+ const editor = new TestEditor(containerRef.current, {
131
+ onSave: (html) => console.log(html)
132
+ });
133
+
134
+ return () => editor.destroy(); // Crucial for HMR and Strict Mode
135
+ }, []);
136
+
137
+ return <div ref={containerRef} className="editor-shell" />;
138
+ }
139
+ ```
140
+
75
141
  ---
76
142
 
77
143
  ## โš™๏ธ Configuration Options
@@ -88,12 +154,32 @@ export default function Editor() {
88
154
 
89
155
  ## ๐Ÿ›  API Methods
90
156
 
157
+ - `destroy()`: **Crucial** - Cleans up DOM, event listeners, and memory leaks.
91
158
  - `getHTML()`: Returns the content as a sanitized HTML string.
92
159
  - `setHTML(html)`: Programmatically sets the editor content.
93
160
  - `focus()`: Forces focus onto the editor.
94
161
  - `setDarkMode(boolean)`: Dynamically toggle dark mode.
95
162
  - `insertTable(rows, cols)`: Programmatically insert a table.
96
163
 
164
+ ## ๐Ÿ’ก Troubleshooting: Duplicate Editors?
165
+ If you see multiple toolbars or editors, it's likely because:
166
+ 1. **React Strict Mode**: Ensure you call `editor.destroy()` in the `useEffect` cleanup.
167
+ 2. **Missing Cleanup**: The editor injects elements into the DOM; if you don't destroy it when the component unmounts, those elements remain.
168
+
169
+ ## ๐Ÿ“ Patch Notes (v1.1.1)
170
+
171
+ ### ๐Ÿ› Bug Fixes
172
+ - **Fixed Missing `destroy()` Export**: Resolved TypeScript error where the `destroy()` method was missing from the generated type declarations.
173
+ - **Image Resizer Cleanup**: Fixed a memory leak where window-level event listeners for image resizing were not being removed on editor destruction.
174
+ - **Double Initializing Failsafe**: Added an internal check to clear the container before initialization, preventing duplicate editors in React Strict Mode.
175
+ - **Lazy-Loaded Emojis**: Moved the Emoji List to a separate chunk (~19kB) that only loads when the picker is opened, reducing the initial bundle size.
176
+
177
+ ### โœจ Improvements
178
+ - **Optimized Initial Load**: Critical path JS is now only **~11kB gzipped**.
179
+ - **Robust Documentation**: Added detailed React and Next.js implementation guides with proper lifecycle cleanup examples.
180
+ - **Troubleshooting Guide**: New section for common pitfalls like duplicate editors and SSR issues.
181
+ - **Live Demo**: Added StackBlitz interactive demo for instant preview.
182
+
97
183
  ---
98
184
 
99
185
  ## ๐Ÿ“„ License
@@ -0,0 +1,333 @@
1
+ const e = [
2
+ // Smileys & Emotion
3
+ { emoji: "๐Ÿ˜€", name: "grinning", category: "Smileys" },
4
+ { emoji: "๐Ÿ˜ƒ", name: "smiley", category: "Smileys" },
5
+ { emoji: "๐Ÿ˜„", name: "smile", category: "Smileys" },
6
+ { emoji: "๐Ÿ˜", name: "grin", category: "Smileys" },
7
+ { emoji: "๐Ÿ˜†", name: "laughing", category: "Smileys" },
8
+ { emoji: "๐Ÿ˜…", name: "sweat smile", category: "Smileys" },
9
+ { emoji: "๐Ÿคฃ", name: "rofl", category: "Smileys" },
10
+ { emoji: "๐Ÿ˜‚", name: "joy", category: "Smileys" },
11
+ { emoji: "๐Ÿ™‚", name: "slight smile", category: "Smileys" },
12
+ { emoji: "๐Ÿ™ƒ", name: "upside down", category: "Smileys" },
13
+ { emoji: "๐Ÿ˜‰", name: "wink", category: "Smileys" },
14
+ { emoji: "๐Ÿ˜Š", name: "blush", category: "Smileys" },
15
+ { emoji: "๐Ÿ˜‡", name: "innocent", category: "Smileys" },
16
+ { emoji: "๐Ÿฅฐ", name: "smiling face with hearts", category: "Smileys" },
17
+ { emoji: "๐Ÿ˜", name: "heart eyes", category: "Smileys" },
18
+ { emoji: "๐Ÿคฉ", name: "star struck", category: "Smileys" },
19
+ { emoji: "๐Ÿ˜˜", name: "kissing heart", category: "Smileys" },
20
+ { emoji: "๐Ÿ˜—", name: "kissing", category: "Smileys" },
21
+ { emoji: "๐Ÿ˜š", name: "kissing closed eyes", category: "Smileys" },
22
+ { emoji: "๐Ÿ˜‹", name: "yum", category: "Smileys" },
23
+ { emoji: "๐Ÿ˜›", name: "stuck out tongue", category: "Smileys" },
24
+ { emoji: "๐Ÿ˜œ", name: "stuck out tongue winking eye", category: "Smileys" },
25
+ { emoji: "๐Ÿคช", name: "zany face", category: "Smileys" },
26
+ { emoji: "๐Ÿคจ", name: "raised eyebrow", category: "Smileys" },
27
+ { emoji: "๐Ÿง", name: "monocle", category: "Smileys" },
28
+ { emoji: "๐Ÿค“", name: "nerd", category: "Smileys" },
29
+ { emoji: "๐Ÿ˜Ž", name: "sunglasses", category: "Smileys" },
30
+ { emoji: "๐Ÿฅณ", name: "partying face", category: "Smileys" },
31
+ { emoji: "๐Ÿ˜", name: "smirk", category: "Smileys" },
32
+ { emoji: "๐Ÿ˜’", name: "unamused", category: "Smileys" },
33
+ { emoji: "๐Ÿ˜ž", name: "disappointed", category: "Smileys" },
34
+ { emoji: "๐Ÿ˜”", name: "pensive", category: "Smileys" },
35
+ { emoji: "๐Ÿ˜Ÿ", name: "worried", category: "Smileys" },
36
+ { emoji: "๐Ÿ˜•", name: "confused", category: "Smileys" },
37
+ { emoji: "๐Ÿ˜ซ", name: "tired", category: "Smileys" },
38
+ { emoji: "๐Ÿฅต", name: "hot face", category: "Smileys" },
39
+ { emoji: "๐Ÿฅถ", name: "cold face", category: "Smileys" },
40
+ { emoji: "๐Ÿ˜ณ", name: "flushed", category: "Smileys" },
41
+ { emoji: "๐Ÿ˜ฑ", name: "scream", category: "Smileys" },
42
+ { emoji: "๐Ÿคข", name: "nauseated", category: "Smileys" },
43
+ { emoji: "๐Ÿคฎ", name: "vomiting", category: "Smileys" },
44
+ { emoji: "๐Ÿคฌ", name: "cursing", category: "Smileys" },
45
+ { emoji: "๐Ÿคซ", name: "shushing", category: "Smileys" },
46
+ { emoji: "๐Ÿค”", name: "thinking", category: "Smileys" },
47
+ { emoji: "๐Ÿค—", name: "hugs", category: "Smileys" },
48
+ { emoji: "๐Ÿฅฑ", name: "yawn", category: "Smileys" },
49
+ { emoji: "๐Ÿ˜ด", name: "sleeping", category: "Smileys" },
50
+ { emoji: "๐Ÿคค", name: "drooling", category: "Smileys" },
51
+ { emoji: "๐Ÿ˜ต", name: "dizzy", category: "Smileys" },
52
+ { emoji: "๐Ÿค", name: "zipper mouth", category: "Smileys" },
53
+ { emoji: "๐Ÿฅด", name: "woozy", category: "Smileys" },
54
+ { emoji: "๐Ÿค’", name: "fever", category: "Smileys" },
55
+ { emoji: "๐Ÿค•", name: "bandage", category: "Smileys" },
56
+ { emoji: "๐Ÿคก", name: "clown", category: "Smileys" },
57
+ { emoji: "๐Ÿ‘ป", name: "ghost", category: "Smileys" },
58
+ { emoji: "๐Ÿ‘ฝ", name: "alien", category: "Smileys" },
59
+ { emoji: "๐Ÿ‘พ", name: "robot", category: "Smileys" },
60
+ { emoji: "๐Ÿ’ฉ", name: "poop", category: "Smileys" },
61
+ // Hearts & Symbols
62
+ { emoji: "โค๏ธ", name: "heart", category: "Symbols" },
63
+ { emoji: "๐Ÿงก", name: "orange heart", category: "Symbols" },
64
+ { emoji: "๐Ÿ’›", name: "yellow heart", category: "Symbols" },
65
+ { emoji: "๐Ÿ’š", name: "green heart", category: "Symbols" },
66
+ { emoji: "๐Ÿ’™", name: "blue heart", category: "Symbols" },
67
+ { emoji: "๐Ÿ’œ", name: "purple heart", category: "Symbols" },
68
+ { emoji: "๐Ÿ–ค", name: "black heart", category: "Symbols" },
69
+ { emoji: "๐Ÿค", name: "white heart", category: "Symbols" },
70
+ { emoji: "๐ŸคŽ", name: "brown heart", category: "Symbols" },
71
+ { emoji: "๐Ÿ’”", name: "broken heart", category: "Symbols" },
72
+ { emoji: "โฃ๏ธ", name: "heart exclamation", category: "Symbols" },
73
+ { emoji: "๐Ÿ’•", name: "two hearts", category: "Symbols" },
74
+ { emoji: "๐Ÿ’ž", name: "revolving hearts", category: "Symbols" },
75
+ { emoji: "โœจ", name: "sparkles", category: "Symbols" },
76
+ { emoji: "๐Ÿ”ฅ", name: "fire", category: "Symbols" },
77
+ { emoji: "โญ", name: "star", category: "Symbols" },
78
+ { emoji: "๐ŸŒŸ", name: "glowing star", category: "Symbols" },
79
+ { emoji: "โœ…", name: "check", category: "Symbols" },
80
+ { emoji: "โŒ", name: "cross", category: "Symbols" },
81
+ { emoji: "๐Ÿ’ฏ", name: "hundred", category: "Symbols" },
82
+ { emoji: "๐Ÿ’ข", name: "anger", category: "Symbols" },
83
+ { emoji: "๐Ÿ’ฅ", name: "collision", category: "Symbols" },
84
+ { emoji: "๐Ÿ’ซ", name: "dizzy symbol", category: "Symbols" },
85
+ { emoji: "๐Ÿ’ฆ", name: "sweat drops", category: "Symbols" },
86
+ { emoji: "๐Ÿ’จ", name: "dash", category: "Symbols" },
87
+ // Hand Gestures
88
+ { emoji: "๐Ÿ‘", name: "thumbs up", category: "Hands" },
89
+ { emoji: "๐Ÿ‘Ž", name: "thumbs down", category: "Hands" },
90
+ { emoji: "๐Ÿ‘Œ", name: "ok", category: "Hands" },
91
+ { emoji: "โœŒ๏ธ", name: "victory", category: "Hands" },
92
+ { emoji: "๐Ÿคž", name: "fingers crossed", category: "Hands" },
93
+ { emoji: "๐ŸคŸ", name: "rock on", category: "Hands" },
94
+ { emoji: "๐Ÿค˜", name: "horns", category: "Hands" },
95
+ { emoji: "๐Ÿค™", name: "call me", category: "Hands" },
96
+ { emoji: "๐Ÿ‘ˆ", name: "point left", category: "Hands" },
97
+ { emoji: "๐Ÿ‘‰", name: "point right", category: "Hands" },
98
+ { emoji: "๐Ÿ‘†", name: "point up", category: "Hands" },
99
+ { emoji: "๐Ÿ‘‡", name: "point down", category: "Hands" },
100
+ { emoji: "๐Ÿ–๏ธ", name: "hand splayed", category: "Hands" },
101
+ { emoji: "โœ‹", name: "raised hand", category: "Hands" },
102
+ { emoji: "๐Ÿ––", name: "vulcan salute", category: "Hands" },
103
+ { emoji: "๐Ÿ‘‹", name: "wave", category: "Hands" },
104
+ { emoji: "๐Ÿ‘", name: "clap", category: "Hands" },
105
+ { emoji: "๐Ÿ™Œ", name: "hands up", category: "Hands" },
106
+ { emoji: "๐Ÿ‘", name: "open hands", category: "Hands" },
107
+ { emoji: "๐Ÿคฒ", name: "palms up", category: "Hands" },
108
+ { emoji: "๐Ÿค", name: "handshake", category: "Hands" },
109
+ { emoji: "๐Ÿ™", name: "pray", category: "Hands" },
110
+ { emoji: "๐Ÿ’ช", name: "flex", category: "Hands" },
111
+ { emoji: "โœ๏ธ", name: "writing", category: "Hands" },
112
+ { emoji: "๐Ÿคณ", name: "selfie", category: "Hands" },
113
+ // Animals & Nature
114
+ { emoji: "๐Ÿถ", name: "dog", category: "Animals" },
115
+ { emoji: "๐Ÿฑ", name: "cat", category: "Animals" },
116
+ { emoji: "๐Ÿญ", name: "mouse", category: "Animals" },
117
+ { emoji: "๐Ÿน", name: "hamster", category: "Animals" },
118
+ { emoji: "๐Ÿฐ", name: "rabbit", category: "Animals" },
119
+ { emoji: "๐ŸฆŠ", name: "fox", category: "Animals" },
120
+ { emoji: "๐Ÿป", name: "bear", category: "Animals" },
121
+ { emoji: "๐Ÿผ", name: "panda", category: "Animals" },
122
+ { emoji: "๐Ÿจ", name: "koala", category: "Animals" },
123
+ { emoji: "๐Ÿฏ", name: "tiger", category: "Animals" },
124
+ { emoji: "๐Ÿฆ", name: "lion", category: "Animals" },
125
+ { emoji: "๐Ÿฎ", name: "cow", category: "Animals" },
126
+ { emoji: "๐Ÿท", name: "pig", category: "Animals" },
127
+ { emoji: "๐Ÿธ", name: "frog", category: "Animals" },
128
+ { emoji: "๐Ÿต", name: "monkey", category: "Animals" },
129
+ { emoji: "๐Ÿ”", name: "chicken", category: "Animals" },
130
+ { emoji: "๐Ÿง", name: "penguin", category: "Animals" },
131
+ { emoji: "๐Ÿฆ", name: "bird", category: "Animals" },
132
+ { emoji: "๐Ÿค", name: "chick", category: "Animals" },
133
+ { emoji: "๐Ÿฆ†", name: "duck", category: "Animals" },
134
+ { emoji: "๐Ÿฆ…", name: "eagle", category: "Animals" },
135
+ { emoji: "๐Ÿฆ‰", name: "owl", category: "Animals" },
136
+ { emoji: "๐Ÿฆ‡", name: "bat", category: "Animals" },
137
+ { emoji: "๐Ÿฆ„", name: "unicorn", category: "Animals" },
138
+ { emoji: "๐Ÿ", name: "bee", category: "Animals" },
139
+ { emoji: "๐Ÿฆ‹", name: "butterfly", category: "Animals" },
140
+ { emoji: "๐ŸŒ", name: "snail", category: "Animals" },
141
+ { emoji: "๐Ÿž", name: "ladybeetle", category: "Animals" },
142
+ { emoji: "๐Ÿข", name: "turtle", category: "Animals" },
143
+ { emoji: "๐Ÿ", name: "snake", category: "Animals" },
144
+ { emoji: "๐Ÿ™", name: "octopus", category: "Animals" },
145
+ { emoji: "๐Ÿฌ", name: "dolphin", category: "Animals" },
146
+ { emoji: "๐Ÿณ", name: "whale", category: "Animals" },
147
+ { emoji: "๐ŸŸ", name: "fish", category: "Animals" },
148
+ { emoji: "๐Ÿฆ“", name: "zebra", category: "Animals" },
149
+ { emoji: "๐Ÿฆ’", name: "giraffe", category: "Animals" },
150
+ { emoji: "๐Ÿ˜", name: "elephant", category: "Animals" },
151
+ { emoji: "๐Ÿฆ", name: "rhino", category: "Animals" },
152
+ { emoji: "๐Ÿช", name: "camel", category: "Animals" },
153
+ { emoji: "๐Ÿ’", name: "monkey", category: "Animals" },
154
+ // Food & Drink
155
+ { emoji: "๐ŸŽ", name: "apple", category: "Food" },
156
+ { emoji: "๐Ÿ", name: "pear", category: "Food" },
157
+ { emoji: "๐ŸŠ", name: "tangerine", category: "Food" },
158
+ { emoji: "๐Ÿ‹", name: "lemon", category: "Food" },
159
+ { emoji: "๐ŸŒ", name: "banana", category: "Food" },
160
+ { emoji: "๐Ÿ‰", name: "watermelon", category: "Food" },
161
+ { emoji: "๐Ÿ‡", name: "grapes", category: "Food" },
162
+ { emoji: "๐Ÿ“", name: "strawberry", category: "Food" },
163
+ { emoji: "๐Ÿ’", name: "cherries", category: "Food" },
164
+ { emoji: "๐Ÿ‘", name: "peach", category: "Food" },
165
+ { emoji: "๐Ÿฅญ", name: "mango", category: "Food" },
166
+ { emoji: "๐Ÿ", name: "pineapple", category: "Food" },
167
+ { emoji: "๐Ÿฅฅ", name: "coconut", category: "Food" },
168
+ { emoji: "๐Ÿฅ", name: "kiwi", category: "Food" },
169
+ { emoji: "๐Ÿ…", name: "tomato", category: "Food" },
170
+ { emoji: "๐Ÿฅ‘", name: "avocado", category: "Food" },
171
+ { emoji: "๐Ÿ†", name: "eggplant", category: "Food" },
172
+ { emoji: "๐Ÿฅ”", name: "potato", category: "Food" },
173
+ { emoji: "๐Ÿฅ•", name: "carrot", category: "Food" },
174
+ { emoji: "๐ŸŒฝ", name: "corn", category: "Food" },
175
+ { emoji: "๐ŸŒถ๏ธ", name: "hot pepper", category: "Food" },
176
+ { emoji: "๐Ÿฅฆ", name: "broccoli", category: "Food" },
177
+ { emoji: "๐Ÿ„", name: "mushroom", category: "Food" },
178
+ { emoji: "๐Ÿฅœ", name: "peanuts", category: "Food" },
179
+ { emoji: "๐Ÿž", name: "bread", category: "Food" },
180
+ { emoji: "๐Ÿฅ", name: "croissant", category: "Food" },
181
+ { emoji: "๐Ÿฅฏ", name: "bagel", category: "Food" },
182
+ { emoji: "๐Ÿฅž", name: "pancakes", category: "Food" },
183
+ { emoji: "๐Ÿง€", name: "cheese", category: "Food" },
184
+ { emoji: "๐Ÿ–", name: "meat", category: "Food" },
185
+ { emoji: "๐Ÿ—", name: "poultry leg", category: "Food" },
186
+ { emoji: "๐Ÿฅ“", name: "bacon", category: "Food" },
187
+ { emoji: "๐Ÿ”", name: "hamburger", category: "Food" },
188
+ { emoji: "๐ŸŸ", name: "fries", category: "Food" },
189
+ { emoji: "๐Ÿ•", name: "pizza", category: "Food" },
190
+ { emoji: "๐ŸŒญ", name: "hot dog", category: "Food" },
191
+ { emoji: "๐Ÿฅช", name: "sandwich", category: "Food" },
192
+ { emoji: "๐ŸŒฎ", name: "taco", category: "Food" },
193
+ { emoji: "๐ŸŒฏ", name: "burrito", category: "Food" },
194
+ { emoji: "๐Ÿณ", name: "egg", category: "Food" },
195
+ { emoji: "๐Ÿฒ", name: "stew", category: "Food" },
196
+ { emoji: "๐Ÿฅฃ", name: "bowl", category: "Food" },
197
+ { emoji: "๐Ÿฅ—", name: "salad", category: "Food" },
198
+ { emoji: "๐Ÿฟ", name: "popcorn", category: "Food" },
199
+ { emoji: "๐Ÿฑ", name: "bento", category: "Food" },
200
+ { emoji: "๐Ÿฃ", name: "sushi", category: "Food" },
201
+ { emoji: "๐Ÿค", name: "shrimp", category: "Food" },
202
+ { emoji: "๐Ÿฆ", name: "ice cream", category: "Food" },
203
+ { emoji: "๐Ÿง", name: "shaved ice", category: "Food" },
204
+ { emoji: "๐Ÿจ", name: "ice cream", category: "Food" },
205
+ { emoji: "๐Ÿฉ", name: "donut", category: "Food" },
206
+ { emoji: "๐Ÿช", name: "cookie", category: "Food" },
207
+ { emoji: "๐ŸŽ‚", name: "cake", category: "Food" },
208
+ { emoji: "๐Ÿฐ", name: "shortcake", category: "Food" },
209
+ { emoji: "๐Ÿง", name: "cupcake", category: "Food" },
210
+ { emoji: "๐Ÿฅง", name: "pie", category: "Food" },
211
+ { emoji: "๐Ÿซ", name: "chocolate", category: "Food" },
212
+ { emoji: "๐Ÿฌ", name: "candy", category: "Food" },
213
+ { emoji: "๐Ÿญ", name: "lollipop", category: "Food" },
214
+ { emoji: "๐Ÿฎ", name: "custard", category: "Food" },
215
+ { emoji: "๐Ÿฏ", name: "honey", category: "Food" },
216
+ { emoji: "๐Ÿผ", name: "baby bottle", category: "Food" },
217
+ { emoji: "๐Ÿฅ›", name: "milk", category: "Food" },
218
+ { emoji: "โ˜•", name: "coffee", category: "Food" },
219
+ { emoji: "๐Ÿต", name: "tea", category: "Food" },
220
+ { emoji: "๐Ÿถ", name: "sake", category: "Food" },
221
+ { emoji: "๐Ÿพ", name: "champagne", category: "Food" },
222
+ { emoji: "๐Ÿท", name: "wine", category: "Food" },
223
+ { emoji: "๐Ÿธ", name: "cocktail", category: "Food" },
224
+ { emoji: "๐Ÿน", name: "tropical drink", category: "Food" },
225
+ { emoji: "๐Ÿบ", name: "beer", category: "Food" },
226
+ { emoji: "๐Ÿป", name: "beers", category: "Food" },
227
+ { emoji: "๐Ÿฅƒ", name: "tumbler glass", category: "Food" },
228
+ { emoji: "๐Ÿฅค", name: "soda", category: "Food" },
229
+ // Travel & Places
230
+ { emoji: "๐Ÿš—", name: "car", category: "Travel" },
231
+ { emoji: "๐Ÿš•", name: "taxi", category: "Travel" },
232
+ { emoji: "๐Ÿš™", name: "bus", category: "Travel" },
233
+ { emoji: "๐ŸšŒ", name: "trolleybus", category: "Travel" },
234
+ { emoji: "๐ŸŽ๏ธ", name: "racing car", category: "Travel" },
235
+ { emoji: "๐Ÿš“", name: "police car", category: "Travel" },
236
+ { emoji: "๐Ÿš‘", name: "ambulance", category: "Travel" },
237
+ { emoji: "๐Ÿš’", name: "fire engine", category: "Travel" },
238
+ { emoji: "๐Ÿš", name: "minibus", category: "Travel" },
239
+ { emoji: "๐Ÿšš", name: "truck", category: "Travel" },
240
+ { emoji: "๐Ÿš›", name: "articulated lorry", category: "Travel" },
241
+ { emoji: "๐Ÿšœ", name: "tractor", category: "Travel" },
242
+ { emoji: "๐Ÿšฒ", name: "bicycle", category: "Travel" },
243
+ { emoji: "๐Ÿ›ต", name: "scooter", category: "Travel" },
244
+ { emoji: "๐Ÿ๏ธ", name: "motorcycle", category: "Travel" },
245
+ { emoji: "๐Ÿš„", name: "bullet train", category: "Travel" },
246
+ { emoji: "๐Ÿš†", name: "train", category: "Travel" },
247
+ { emoji: "โœˆ๏ธ", name: "airplane", category: "Travel" },
248
+ { emoji: "๐Ÿš€", name: "rocket", category: "Travel" },
249
+ { emoji: "๐Ÿ›ธ", name: "ufo", category: "Travel" },
250
+ { emoji: "๐Ÿš", name: "helicopter", category: "Travel" },
251
+ { emoji: "๐Ÿšข", name: "ship", category: "Travel" },
252
+ { emoji: "โ›ต", name: "sailboat", category: "Travel" },
253
+ { emoji: "โš“", name: "anchor", category: "Travel" },
254
+ { emoji: "โ›ฝ", name: "fuel pump", category: "Travel" },
255
+ { emoji: "๐Ÿšฆ", name: "traffic light", category: "Travel" },
256
+ // Objects & Tools
257
+ { emoji: "๐Ÿ’ป", name: "laptop", category: "Objects" },
258
+ { emoji: "๐Ÿ“ฑ", name: "mobile", category: "Objects" },
259
+ { emoji: "โ˜Ž๏ธ", name: "telephone", category: "Objects" },
260
+ { emoji: "โŒจ๏ธ", name: "keyboard", category: "Objects" },
261
+ { emoji: "๐Ÿ–ฅ๏ธ", name: "desktop", category: "Objects" },
262
+ { emoji: "๐Ÿ–จ๏ธ", name: "printer", category: "Objects" },
263
+ { emoji: "๐Ÿ“ธ", name: "camera", category: "Objects" },
264
+ { emoji: "๐ŸŽฅ", name: "video camera", category: "Objects" },
265
+ { emoji: "๐Ÿ“บ", name: "tv", category: "Objects" },
266
+ { emoji: "๐Ÿ“ป", name: "radio", category: "Objects" },
267
+ { emoji: "โฐ", name: "alarm clock", category: "Objects" },
268
+ { emoji: "๐Ÿ’ก", name: "light bulb", category: "Objects" },
269
+ { emoji: "๐Ÿ”ฆ", name: "flashlight", category: "Objects" },
270
+ { emoji: "๐Ÿ•ฏ๏ธ", name: "candle", category: "Objects" },
271
+ { emoji: "๐Ÿ”จ", name: "hammer", category: "Objects" },
272
+ { emoji: "๐Ÿ”ง", name: "wrench", category: "Objects" },
273
+ { emoji: "๐Ÿ”ฉ", name: "nut and bolt", category: "Objects" },
274
+ { emoji: "๐Ÿ”ซ", name: "water pistol", category: "Objects" },
275
+ { emoji: "๐Ÿ’ธ", name: "money", category: "Objects" },
276
+ { emoji: "๐Ÿ’ต", name: "dollar bill", category: "Objects" },
277
+ { emoji: "๐Ÿ’ณ", name: "credit card", category: "Objects" },
278
+ { emoji: "๐Ÿ’Ž", name: "gem", category: "Objects" },
279
+ { emoji: "โš–๏ธ", name: "balance scale", category: "Objects" },
280
+ { emoji: "๐Ÿ”—", name: "link", category: "Objects" },
281
+ { emoji: "โ›“๏ธ", name: "chains", category: "Objects" },
282
+ { emoji: "๐Ÿ’‰", name: "syringe", category: "Objects" },
283
+ { emoji: "๐Ÿ’Š", name: "pill", category: "Objects" },
284
+ { emoji: "๐Ÿšช", name: "door", category: "Objects" },
285
+ { emoji: "๐Ÿ›๏ธ", name: "bed", category: "Objects" },
286
+ { emoji: "๐Ÿ›‹๏ธ", name: "couch", category: "Objects" },
287
+ { emoji: "๐Ÿšฟ", name: "shower", category: "Objects" },
288
+ { emoji: "๐Ÿ›", name: "bathtub", category: "Objects" },
289
+ { emoji: "๐Ÿ”‘", name: "key", category: "Objects" },
290
+ { emoji: "๐Ÿงน", name: "broom", category: "Objects" },
291
+ // Activities & Hobbies
292
+ { emoji: "โšฝ", name: "soccer", category: "Activities" },
293
+ { emoji: "๐Ÿ€", name: "basketball", category: "Activities" },
294
+ { emoji: "๐Ÿˆ", name: "football", category: "Activities" },
295
+ { emoji: "โšพ", name: "baseball", category: "Activities" },
296
+ { emoji: "๐ŸŽพ", name: "tennis", category: "Activities" },
297
+ { emoji: "๐Ÿ", name: "volleyball", category: "Activities" },
298
+ { emoji: "๐Ÿ‰", name: "rugby", category: "Activities" },
299
+ { emoji: "๐ŸŽฑ", name: "pool", category: "Activities" },
300
+ { emoji: "โ›ณ", name: "golf", category: "Activities" },
301
+ { emoji: "๐Ÿช", name: "kite", category: "Activities" },
302
+ { emoji: "๐Ÿน", name: "bow and arrow", category: "Activities" },
303
+ { emoji: "๐ŸŽฃ", name: "fishing", category: "Activities" },
304
+ { emoji: "๐ŸฅŠ", name: "boxing", category: "Activities" },
305
+ { emoji: "๐Ÿฅ‹", name: "martial arts", category: "Activities" },
306
+ { emoji: "โ›ธ๏ธ", name: "ice skate", category: "Activities" },
307
+ { emoji: "๐ŸŽฟ", name: "ski", category: "Activities" },
308
+ { emoji: "๐Ÿ‚", name: "snowboard", category: "Activities" },
309
+ { emoji: "๐Ÿ‹๏ธ", name: "weightlifter", category: "Activities" },
310
+ { emoji: "๐Ÿคบ", name: "fencing", category: "Activities" },
311
+ { emoji: "๐Ÿคผ", name: "wrestling", category: "Activities" },
312
+ { emoji: "๐Ÿคธ", name: "cartwheel", category: "Activities" },
313
+ { emoji: "๐Ÿ†", name: "trophy", category: "Activities" },
314
+ { emoji: "๐Ÿ…", name: "medal", category: "Activities" },
315
+ { emoji: "๐Ÿฅ‡", name: "first place", category: "Activities" },
316
+ { emoji: "๐ŸŽŸ๏ธ", name: "ticket", category: "Activities" },
317
+ { emoji: "๐ŸŽฎ", name: "video game", category: "Activities" },
318
+ { emoji: "๐ŸŽฒ", name: "die", category: "Activities" },
319
+ { emoji: "โ™Ÿ๏ธ", name: "chess", category: "Activities" },
320
+ { emoji: "๐ŸŽน", name: "piano", category: "Activities" },
321
+ { emoji: "๐ŸŽธ", name: "guitar", category: "Activities" },
322
+ { emoji: "๐ŸŽบ", name: "trumpet", category: "Activities" },
323
+ { emoji: "๐ŸŽป", name: "violin", category: "Activities" },
324
+ { emoji: "๐Ÿฅ", name: "drum", category: "Activities" },
325
+ { emoji: "๐ŸŽญ", name: "performing arts", category: "Activities" },
326
+ { emoji: "๐ŸŽจ", name: "artist palette", category: "Activities" },
327
+ { emoji: "๐ŸŽฌ", name: "clapper board", category: "Activities" },
328
+ { emoji: "๐ŸŽค", name: "microphone", category: "Activities" },
329
+ { emoji: "๐ŸŽง", name: "headphone", category: "Activities" }
330
+ ];
331
+ export {
332
+ e as EMOJI_LIST
333
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=[{emoji:"๐Ÿ˜€",name:"grinning",category:"Smileys"},{emoji:"๐Ÿ˜ƒ",name:"smiley",category:"Smileys"},{emoji:"๐Ÿ˜„",name:"smile",category:"Smileys"},{emoji:"๐Ÿ˜",name:"grin",category:"Smileys"},{emoji:"๐Ÿ˜†",name:"laughing",category:"Smileys"},{emoji:"๐Ÿ˜…",name:"sweat smile",category:"Smileys"},{emoji:"๐Ÿคฃ",name:"rofl",category:"Smileys"},{emoji:"๐Ÿ˜‚",name:"joy",category:"Smileys"},{emoji:"๐Ÿ™‚",name:"slight smile",category:"Smileys"},{emoji:"๐Ÿ™ƒ",name:"upside down",category:"Smileys"},{emoji:"๐Ÿ˜‰",name:"wink",category:"Smileys"},{emoji:"๐Ÿ˜Š",name:"blush",category:"Smileys"},{emoji:"๐Ÿ˜‡",name:"innocent",category:"Smileys"},{emoji:"๐Ÿฅฐ",name:"smiling face with hearts",category:"Smileys"},{emoji:"๐Ÿ˜",name:"heart eyes",category:"Smileys"},{emoji:"๐Ÿคฉ",name:"star struck",category:"Smileys"},{emoji:"๐Ÿ˜˜",name:"kissing heart",category:"Smileys"},{emoji:"๐Ÿ˜—",name:"kissing",category:"Smileys"},{emoji:"๐Ÿ˜š",name:"kissing closed eyes",category:"Smileys"},{emoji:"๐Ÿ˜‹",name:"yum",category:"Smileys"},{emoji:"๐Ÿ˜›",name:"stuck out tongue",category:"Smileys"},{emoji:"๐Ÿ˜œ",name:"stuck out tongue winking eye",category:"Smileys"},{emoji:"๐Ÿคช",name:"zany face",category:"Smileys"},{emoji:"๐Ÿคจ",name:"raised eyebrow",category:"Smileys"},{emoji:"๐Ÿง",name:"monocle",category:"Smileys"},{emoji:"๐Ÿค“",name:"nerd",category:"Smileys"},{emoji:"๐Ÿ˜Ž",name:"sunglasses",category:"Smileys"},{emoji:"๐Ÿฅณ",name:"partying face",category:"Smileys"},{emoji:"๐Ÿ˜",name:"smirk",category:"Smileys"},{emoji:"๐Ÿ˜’",name:"unamused",category:"Smileys"},{emoji:"๐Ÿ˜ž",name:"disappointed",category:"Smileys"},{emoji:"๐Ÿ˜”",name:"pensive",category:"Smileys"},{emoji:"๐Ÿ˜Ÿ",name:"worried",category:"Smileys"},{emoji:"๐Ÿ˜•",name:"confused",category:"Smileys"},{emoji:"๐Ÿ˜ซ",name:"tired",category:"Smileys"},{emoji:"๐Ÿฅต",name:"hot face",category:"Smileys"},{emoji:"๐Ÿฅถ",name:"cold face",category:"Smileys"},{emoji:"๐Ÿ˜ณ",name:"flushed",category:"Smileys"},{emoji:"๐Ÿ˜ฑ",name:"scream",category:"Smileys"},{emoji:"๐Ÿคข",name:"nauseated",category:"Smileys"},{emoji:"๐Ÿคฎ",name:"vomiting",category:"Smileys"},{emoji:"๐Ÿคฌ",name:"cursing",category:"Smileys"},{emoji:"๐Ÿคซ",name:"shushing",category:"Smileys"},{emoji:"๐Ÿค”",name:"thinking",category:"Smileys"},{emoji:"๐Ÿค—",name:"hugs",category:"Smileys"},{emoji:"๐Ÿฅฑ",name:"yawn",category:"Smileys"},{emoji:"๐Ÿ˜ด",name:"sleeping",category:"Smileys"},{emoji:"๐Ÿคค",name:"drooling",category:"Smileys"},{emoji:"๐Ÿ˜ต",name:"dizzy",category:"Smileys"},{emoji:"๐Ÿค",name:"zipper mouth",category:"Smileys"},{emoji:"๐Ÿฅด",name:"woozy",category:"Smileys"},{emoji:"๐Ÿค’",name:"fever",category:"Smileys"},{emoji:"๐Ÿค•",name:"bandage",category:"Smileys"},{emoji:"๐Ÿคก",name:"clown",category:"Smileys"},{emoji:"๐Ÿ‘ป",name:"ghost",category:"Smileys"},{emoji:"๐Ÿ‘ฝ",name:"alien",category:"Smileys"},{emoji:"๐Ÿ‘พ",name:"robot",category:"Smileys"},{emoji:"๐Ÿ’ฉ",name:"poop",category:"Smileys"},{emoji:"โค๏ธ",name:"heart",category:"Symbols"},{emoji:"๐Ÿงก",name:"orange heart",category:"Symbols"},{emoji:"๐Ÿ’›",name:"yellow heart",category:"Symbols"},{emoji:"๐Ÿ’š",name:"green heart",category:"Symbols"},{emoji:"๐Ÿ’™",name:"blue heart",category:"Symbols"},{emoji:"๐Ÿ’œ",name:"purple heart",category:"Symbols"},{emoji:"๐Ÿ–ค",name:"black heart",category:"Symbols"},{emoji:"๐Ÿค",name:"white heart",category:"Symbols"},{emoji:"๐ŸคŽ",name:"brown heart",category:"Symbols"},{emoji:"๐Ÿ’”",name:"broken heart",category:"Symbols"},{emoji:"โฃ๏ธ",name:"heart exclamation",category:"Symbols"},{emoji:"๐Ÿ’•",name:"two hearts",category:"Symbols"},{emoji:"๐Ÿ’ž",name:"revolving hearts",category:"Symbols"},{emoji:"โœจ",name:"sparkles",category:"Symbols"},{emoji:"๐Ÿ”ฅ",name:"fire",category:"Symbols"},{emoji:"โญ",name:"star",category:"Symbols"},{emoji:"๐ŸŒŸ",name:"glowing star",category:"Symbols"},{emoji:"โœ…",name:"check",category:"Symbols"},{emoji:"โŒ",name:"cross",category:"Symbols"},{emoji:"๐Ÿ’ฏ",name:"hundred",category:"Symbols"},{emoji:"๐Ÿ’ข",name:"anger",category:"Symbols"},{emoji:"๐Ÿ’ฅ",name:"collision",category:"Symbols"},{emoji:"๐Ÿ’ซ",name:"dizzy symbol",category:"Symbols"},{emoji:"๐Ÿ’ฆ",name:"sweat drops",category:"Symbols"},{emoji:"๐Ÿ’จ",name:"dash",category:"Symbols"},{emoji:"๐Ÿ‘",name:"thumbs up",category:"Hands"},{emoji:"๐Ÿ‘Ž",name:"thumbs down",category:"Hands"},{emoji:"๐Ÿ‘Œ",name:"ok",category:"Hands"},{emoji:"โœŒ๏ธ",name:"victory",category:"Hands"},{emoji:"๐Ÿคž",name:"fingers crossed",category:"Hands"},{emoji:"๐ŸคŸ",name:"rock on",category:"Hands"},{emoji:"๐Ÿค˜",name:"horns",category:"Hands"},{emoji:"๐Ÿค™",name:"call me",category:"Hands"},{emoji:"๐Ÿ‘ˆ",name:"point left",category:"Hands"},{emoji:"๐Ÿ‘‰",name:"point right",category:"Hands"},{emoji:"๐Ÿ‘†",name:"point up",category:"Hands"},{emoji:"๐Ÿ‘‡",name:"point down",category:"Hands"},{emoji:"๐Ÿ–๏ธ",name:"hand splayed",category:"Hands"},{emoji:"โœ‹",name:"raised hand",category:"Hands"},{emoji:"๐Ÿ––",name:"vulcan salute",category:"Hands"},{emoji:"๐Ÿ‘‹",name:"wave",category:"Hands"},{emoji:"๐Ÿ‘",name:"clap",category:"Hands"},{emoji:"๐Ÿ™Œ",name:"hands up",category:"Hands"},{emoji:"๐Ÿ‘",name:"open hands",category:"Hands"},{emoji:"๐Ÿคฒ",name:"palms up",category:"Hands"},{emoji:"๐Ÿค",name:"handshake",category:"Hands"},{emoji:"๐Ÿ™",name:"pray",category:"Hands"},{emoji:"๐Ÿ’ช",name:"flex",category:"Hands"},{emoji:"โœ๏ธ",name:"writing",category:"Hands"},{emoji:"๐Ÿคณ",name:"selfie",category:"Hands"},{emoji:"๐Ÿถ",name:"dog",category:"Animals"},{emoji:"๐Ÿฑ",name:"cat",category:"Animals"},{emoji:"๐Ÿญ",name:"mouse",category:"Animals"},{emoji:"๐Ÿน",name:"hamster",category:"Animals"},{emoji:"๐Ÿฐ",name:"rabbit",category:"Animals"},{emoji:"๐ŸฆŠ",name:"fox",category:"Animals"},{emoji:"๐Ÿป",name:"bear",category:"Animals"},{emoji:"๐Ÿผ",name:"panda",category:"Animals"},{emoji:"๐Ÿจ",name:"koala",category:"Animals"},{emoji:"๐Ÿฏ",name:"tiger",category:"Animals"},{emoji:"๐Ÿฆ",name:"lion",category:"Animals"},{emoji:"๐Ÿฎ",name:"cow",category:"Animals"},{emoji:"๐Ÿท",name:"pig",category:"Animals"},{emoji:"๐Ÿธ",name:"frog",category:"Animals"},{emoji:"๐Ÿต",name:"monkey",category:"Animals"},{emoji:"๐Ÿ”",name:"chicken",category:"Animals"},{emoji:"๐Ÿง",name:"penguin",category:"Animals"},{emoji:"๐Ÿฆ",name:"bird",category:"Animals"},{emoji:"๐Ÿค",name:"chick",category:"Animals"},{emoji:"๐Ÿฆ†",name:"duck",category:"Animals"},{emoji:"๐Ÿฆ…",name:"eagle",category:"Animals"},{emoji:"๐Ÿฆ‰",name:"owl",category:"Animals"},{emoji:"๐Ÿฆ‡",name:"bat",category:"Animals"},{emoji:"๐Ÿฆ„",name:"unicorn",category:"Animals"},{emoji:"๐Ÿ",name:"bee",category:"Animals"},{emoji:"๐Ÿฆ‹",name:"butterfly",category:"Animals"},{emoji:"๐ŸŒ",name:"snail",category:"Animals"},{emoji:"๐Ÿž",name:"ladybeetle",category:"Animals"},{emoji:"๐Ÿข",name:"turtle",category:"Animals"},{emoji:"๐Ÿ",name:"snake",category:"Animals"},{emoji:"๐Ÿ™",name:"octopus",category:"Animals"},{emoji:"๐Ÿฌ",name:"dolphin",category:"Animals"},{emoji:"๐Ÿณ",name:"whale",category:"Animals"},{emoji:"๐ŸŸ",name:"fish",category:"Animals"},{emoji:"๐Ÿฆ“",name:"zebra",category:"Animals"},{emoji:"๐Ÿฆ’",name:"giraffe",category:"Animals"},{emoji:"๐Ÿ˜",name:"elephant",category:"Animals"},{emoji:"๐Ÿฆ",name:"rhino",category:"Animals"},{emoji:"๐Ÿช",name:"camel",category:"Animals"},{emoji:"๐Ÿ’",name:"monkey",category:"Animals"},{emoji:"๐ŸŽ",name:"apple",category:"Food"},{emoji:"๐Ÿ",name:"pear",category:"Food"},{emoji:"๐ŸŠ",name:"tangerine",category:"Food"},{emoji:"๐Ÿ‹",name:"lemon",category:"Food"},{emoji:"๐ŸŒ",name:"banana",category:"Food"},{emoji:"๐Ÿ‰",name:"watermelon",category:"Food"},{emoji:"๐Ÿ‡",name:"grapes",category:"Food"},{emoji:"๐Ÿ“",name:"strawberry",category:"Food"},{emoji:"๐Ÿ’",name:"cherries",category:"Food"},{emoji:"๐Ÿ‘",name:"peach",category:"Food"},{emoji:"๐Ÿฅญ",name:"mango",category:"Food"},{emoji:"๐Ÿ",name:"pineapple",category:"Food"},{emoji:"๐Ÿฅฅ",name:"coconut",category:"Food"},{emoji:"๐Ÿฅ",name:"kiwi",category:"Food"},{emoji:"๐Ÿ…",name:"tomato",category:"Food"},{emoji:"๐Ÿฅ‘",name:"avocado",category:"Food"},{emoji:"๐Ÿ†",name:"eggplant",category:"Food"},{emoji:"๐Ÿฅ”",name:"potato",category:"Food"},{emoji:"๐Ÿฅ•",name:"carrot",category:"Food"},{emoji:"๐ŸŒฝ",name:"corn",category:"Food"},{emoji:"๐ŸŒถ๏ธ",name:"hot pepper",category:"Food"},{emoji:"๐Ÿฅฆ",name:"broccoli",category:"Food"},{emoji:"๐Ÿ„",name:"mushroom",category:"Food"},{emoji:"๐Ÿฅœ",name:"peanuts",category:"Food"},{emoji:"๐Ÿž",name:"bread",category:"Food"},{emoji:"๐Ÿฅ",name:"croissant",category:"Food"},{emoji:"๐Ÿฅฏ",name:"bagel",category:"Food"},{emoji:"๐Ÿฅž",name:"pancakes",category:"Food"},{emoji:"๐Ÿง€",name:"cheese",category:"Food"},{emoji:"๐Ÿ–",name:"meat",category:"Food"},{emoji:"๐Ÿ—",name:"poultry leg",category:"Food"},{emoji:"๐Ÿฅ“",name:"bacon",category:"Food"},{emoji:"๐Ÿ”",name:"hamburger",category:"Food"},{emoji:"๐ŸŸ",name:"fries",category:"Food"},{emoji:"๐Ÿ•",name:"pizza",category:"Food"},{emoji:"๐ŸŒญ",name:"hot dog",category:"Food"},{emoji:"๐Ÿฅช",name:"sandwich",category:"Food"},{emoji:"๐ŸŒฎ",name:"taco",category:"Food"},{emoji:"๐ŸŒฏ",name:"burrito",category:"Food"},{emoji:"๐Ÿณ",name:"egg",category:"Food"},{emoji:"๐Ÿฒ",name:"stew",category:"Food"},{emoji:"๐Ÿฅฃ",name:"bowl",category:"Food"},{emoji:"๐Ÿฅ—",name:"salad",category:"Food"},{emoji:"๐Ÿฟ",name:"popcorn",category:"Food"},{emoji:"๐Ÿฑ",name:"bento",category:"Food"},{emoji:"๐Ÿฃ",name:"sushi",category:"Food"},{emoji:"๐Ÿค",name:"shrimp",category:"Food"},{emoji:"๐Ÿฆ",name:"ice cream",category:"Food"},{emoji:"๐Ÿง",name:"shaved ice",category:"Food"},{emoji:"๐Ÿจ",name:"ice cream",category:"Food"},{emoji:"๐Ÿฉ",name:"donut",category:"Food"},{emoji:"๐Ÿช",name:"cookie",category:"Food"},{emoji:"๐ŸŽ‚",name:"cake",category:"Food"},{emoji:"๐Ÿฐ",name:"shortcake",category:"Food"},{emoji:"๐Ÿง",name:"cupcake",category:"Food"},{emoji:"๐Ÿฅง",name:"pie",category:"Food"},{emoji:"๐Ÿซ",name:"chocolate",category:"Food"},{emoji:"๐Ÿฌ",name:"candy",category:"Food"},{emoji:"๐Ÿญ",name:"lollipop",category:"Food"},{emoji:"๐Ÿฎ",name:"custard",category:"Food"},{emoji:"๐Ÿฏ",name:"honey",category:"Food"},{emoji:"๐Ÿผ",name:"baby bottle",category:"Food"},{emoji:"๐Ÿฅ›",name:"milk",category:"Food"},{emoji:"โ˜•",name:"coffee",category:"Food"},{emoji:"๐Ÿต",name:"tea",category:"Food"},{emoji:"๐Ÿถ",name:"sake",category:"Food"},{emoji:"๐Ÿพ",name:"champagne",category:"Food"},{emoji:"๐Ÿท",name:"wine",category:"Food"},{emoji:"๐Ÿธ",name:"cocktail",category:"Food"},{emoji:"๐Ÿน",name:"tropical drink",category:"Food"},{emoji:"๐Ÿบ",name:"beer",category:"Food"},{emoji:"๐Ÿป",name:"beers",category:"Food"},{emoji:"๐Ÿฅƒ",name:"tumbler glass",category:"Food"},{emoji:"๐Ÿฅค",name:"soda",category:"Food"},{emoji:"๐Ÿš—",name:"car",category:"Travel"},{emoji:"๐Ÿš•",name:"taxi",category:"Travel"},{emoji:"๐Ÿš™",name:"bus",category:"Travel"},{emoji:"๐ŸšŒ",name:"trolleybus",category:"Travel"},{emoji:"๐ŸŽ๏ธ",name:"racing car",category:"Travel"},{emoji:"๐Ÿš“",name:"police car",category:"Travel"},{emoji:"๐Ÿš‘",name:"ambulance",category:"Travel"},{emoji:"๐Ÿš’",name:"fire engine",category:"Travel"},{emoji:"๐Ÿš",name:"minibus",category:"Travel"},{emoji:"๐Ÿšš",name:"truck",category:"Travel"},{emoji:"๐Ÿš›",name:"articulated lorry",category:"Travel"},{emoji:"๐Ÿšœ",name:"tractor",category:"Travel"},{emoji:"๐Ÿšฒ",name:"bicycle",category:"Travel"},{emoji:"๐Ÿ›ต",name:"scooter",category:"Travel"},{emoji:"๐Ÿ๏ธ",name:"motorcycle",category:"Travel"},{emoji:"๐Ÿš„",name:"bullet train",category:"Travel"},{emoji:"๐Ÿš†",name:"train",category:"Travel"},{emoji:"โœˆ๏ธ",name:"airplane",category:"Travel"},{emoji:"๐Ÿš€",name:"rocket",category:"Travel"},{emoji:"๐Ÿ›ธ",name:"ufo",category:"Travel"},{emoji:"๐Ÿš",name:"helicopter",category:"Travel"},{emoji:"๐Ÿšข",name:"ship",category:"Travel"},{emoji:"โ›ต",name:"sailboat",category:"Travel"},{emoji:"โš“",name:"anchor",category:"Travel"},{emoji:"โ›ฝ",name:"fuel pump",category:"Travel"},{emoji:"๐Ÿšฆ",name:"traffic light",category:"Travel"},{emoji:"๐Ÿ’ป",name:"laptop",category:"Objects"},{emoji:"๐Ÿ“ฑ",name:"mobile",category:"Objects"},{emoji:"โ˜Ž๏ธ",name:"telephone",category:"Objects"},{emoji:"โŒจ๏ธ",name:"keyboard",category:"Objects"},{emoji:"๐Ÿ–ฅ๏ธ",name:"desktop",category:"Objects"},{emoji:"๐Ÿ–จ๏ธ",name:"printer",category:"Objects"},{emoji:"๐Ÿ“ธ",name:"camera",category:"Objects"},{emoji:"๐ŸŽฅ",name:"video camera",category:"Objects"},{emoji:"๐Ÿ“บ",name:"tv",category:"Objects"},{emoji:"๐Ÿ“ป",name:"radio",category:"Objects"},{emoji:"โฐ",name:"alarm clock",category:"Objects"},{emoji:"๐Ÿ’ก",name:"light bulb",category:"Objects"},{emoji:"๐Ÿ”ฆ",name:"flashlight",category:"Objects"},{emoji:"๐Ÿ•ฏ๏ธ",name:"candle",category:"Objects"},{emoji:"๐Ÿ”จ",name:"hammer",category:"Objects"},{emoji:"๐Ÿ”ง",name:"wrench",category:"Objects"},{emoji:"๐Ÿ”ฉ",name:"nut and bolt",category:"Objects"},{emoji:"๐Ÿ”ซ",name:"water pistol",category:"Objects"},{emoji:"๐Ÿ’ธ",name:"money",category:"Objects"},{emoji:"๐Ÿ’ต",name:"dollar bill",category:"Objects"},{emoji:"๐Ÿ’ณ",name:"credit card",category:"Objects"},{emoji:"๐Ÿ’Ž",name:"gem",category:"Objects"},{emoji:"โš–๏ธ",name:"balance scale",category:"Objects"},{emoji:"๐Ÿ”—",name:"link",category:"Objects"},{emoji:"โ›“๏ธ",name:"chains",category:"Objects"},{emoji:"๐Ÿ’‰",name:"syringe",category:"Objects"},{emoji:"๐Ÿ’Š",name:"pill",category:"Objects"},{emoji:"๐Ÿšช",name:"door",category:"Objects"},{emoji:"๐Ÿ›๏ธ",name:"bed",category:"Objects"},{emoji:"๐Ÿ›‹๏ธ",name:"couch",category:"Objects"},{emoji:"๐Ÿšฟ",name:"shower",category:"Objects"},{emoji:"๐Ÿ›",name:"bathtub",category:"Objects"},{emoji:"๐Ÿ”‘",name:"key",category:"Objects"},{emoji:"๐Ÿงน",name:"broom",category:"Objects"},{emoji:"โšฝ",name:"soccer",category:"Activities"},{emoji:"๐Ÿ€",name:"basketball",category:"Activities"},{emoji:"๐Ÿˆ",name:"football",category:"Activities"},{emoji:"โšพ",name:"baseball",category:"Activities"},{emoji:"๐ŸŽพ",name:"tennis",category:"Activities"},{emoji:"๐Ÿ",name:"volleyball",category:"Activities"},{emoji:"๐Ÿ‰",name:"rugby",category:"Activities"},{emoji:"๐ŸŽฑ",name:"pool",category:"Activities"},{emoji:"โ›ณ",name:"golf",category:"Activities"},{emoji:"๐Ÿช",name:"kite",category:"Activities"},{emoji:"๐Ÿน",name:"bow and arrow",category:"Activities"},{emoji:"๐ŸŽฃ",name:"fishing",category:"Activities"},{emoji:"๐ŸฅŠ",name:"boxing",category:"Activities"},{emoji:"๐Ÿฅ‹",name:"martial arts",category:"Activities"},{emoji:"โ›ธ๏ธ",name:"ice skate",category:"Activities"},{emoji:"๐ŸŽฟ",name:"ski",category:"Activities"},{emoji:"๐Ÿ‚",name:"snowboard",category:"Activities"},{emoji:"๐Ÿ‹๏ธ",name:"weightlifter",category:"Activities"},{emoji:"๐Ÿคบ",name:"fencing",category:"Activities"},{emoji:"๐Ÿคผ",name:"wrestling",category:"Activities"},{emoji:"๐Ÿคธ",name:"cartwheel",category:"Activities"},{emoji:"๐Ÿ†",name:"trophy",category:"Activities"},{emoji:"๐Ÿ…",name:"medal",category:"Activities"},{emoji:"๐Ÿฅ‡",name:"first place",category:"Activities"},{emoji:"๐ŸŽŸ๏ธ",name:"ticket",category:"Activities"},{emoji:"๐ŸŽฎ",name:"video game",category:"Activities"},{emoji:"๐ŸŽฒ",name:"die",category:"Activities"},{emoji:"โ™Ÿ๏ธ",name:"chess",category:"Activities"},{emoji:"๐ŸŽน",name:"piano",category:"Activities"},{emoji:"๐ŸŽธ",name:"guitar",category:"Activities"},{emoji:"๐ŸŽบ",name:"trumpet",category:"Activities"},{emoji:"๐ŸŽป",name:"violin",category:"Activities"},{emoji:"๐Ÿฅ",name:"drum",category:"Activities"},{emoji:"๐ŸŽญ",name:"performing arts",category:"Activities"},{emoji:"๐ŸŽจ",name:"artist palette",category:"Activities"},{emoji:"๐ŸŽฌ",name:"clapper board",category:"Activities"},{emoji:"๐ŸŽค",name:"microphone",category:"Activities"},{emoji:"๐ŸŽง",name:"headphone",category:"Activities"}];exports.EMOJI_LIST=e;
@@ -29,6 +29,7 @@ export interface EditorOptions {
29
29
  onSaving?: () => void;
30
30
  onChange?: (html: string) => void;
31
31
  autoSaveInterval?: number;
32
+ autoSave?: boolean;
32
33
  showStatus?: boolean;
33
34
  toolbarItems?: string[];
34
35
  }
@@ -42,6 +43,8 @@ export declare class CoreEditor {
42
43
  private saveTimeout;
43
44
  private historyTimeout;
44
45
  private pendingStyles;
46
+ private observer;
47
+ private eventListeners;
45
48
  constructor(container: HTMLElement, options?: EditorOptions);
46
49
  /**
47
50
  * Applies custom theme variables to the editor container.
@@ -51,6 +54,12 @@ export declare class CoreEditor {
51
54
  * Toggles dark mode on the editor.
52
55
  */
53
56
  setDarkMode(enabled: boolean): void;
57
+ /**
58
+ * Destroys the editor instance and cleans up.
59
+ */
60
+ destroy(): void;
61
+ protected checkPlaceholder(): void;
62
+ private addEventListener;
54
63
  protected setupImageObserver(): void;
55
64
  /**
56
65
  * Wraps a raw <img> element in the interactive container
@@ -9,8 +9,17 @@ export declare class ImageManager {
9
9
  private startHeight;
10
10
  private currentHandle;
11
11
  private aspectRatio;
12
+ private boundMouseDown;
13
+ private boundMouseMove;
14
+ private boundMouseUp;
15
+ private boundKeyDown;
12
16
  constructor(editor: CoreEditor);
13
17
  private setupListeners;
18
+ private handleMouseDown;
19
+ private handleMouseMove;
20
+ private handleMouseUp;
21
+ private handleKeyDown;
22
+ destroy(): void;
14
23
  private selectImage;
15
24
  private deselectImage;
16
25
  private startResize;
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export declare class TestEditor extends CoreEditor {
4
4
  private toolbar;
5
5
  constructor(container: HTMLElement, options?: EditorOptions);
6
6
  getToolbar(): Toolbar;
7
+ destroy(): void;
7
8
  }
8
9
  export { CoreEditor, type EditorOptions } from './core/Editor';
9
10
  export { SelectionManager } from './core/SelectionManager';