diff --git a/css/style.css b/css/style.css
index 557484d..9c56f9b 100644
--- a/css/style.css
+++ b/css/style.css
@@ -66,6 +66,7 @@ body {
header {
display: flex;
+ flex-wrap: wrap;
justify-content: space-between;
align-items: center;
margin-bottom: 30px;
@@ -855,7 +856,6 @@ button:hover {
/* Transform layout */
.transform-layout {
- display: grid;
gap: 24px;
margin-top: 16px;
}
@@ -877,6 +877,12 @@ button:hover {
border-bottom: 1px solid var(--input-border);
}
+.transform-category-legend > div {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+}
+
.legend-title {
font-size: 0.9rem;
font-weight: 500;
@@ -989,6 +995,20 @@ button:hover {
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
gap: 8px;
margin-bottom: 16px;
+ width: 100%; /* Ensure grid doesn't overflow container */
+ box-sizing: border-box;
+}
+
+#category-randomizer .transform-buttons {
+ display: flex;
+}
+
+#category-randomizer .transform-buttons .transform-button-group {
+ width: 100%;
+}
+
+#category-randomizer .transform-buttons .transform-button .transform-preview {
+ max-width: 300px;
}
/* Carrier styling */
@@ -1308,8 +1328,7 @@ button:hover {
flex-direction: column;
align-items: center;
gap: 4px;
- min-width: 110px;
- max-width: 100%;
+ width: 100%;
font-weight: 500;
text-align: center;
border: 1px solid var(--input-border);
@@ -1816,7 +1835,6 @@ button:hover {
border: 2px solid rgba(200, 170, 255, 0.35) !important;
padding: 18px 28px !important;
letter-spacing: .3px;
- min-width: 48ch;
justify-content: center;
text-align: center;
}
@@ -1976,9 +1994,6 @@ html {
.tokenade-presets > label {
margin-right: 4px;
}
-.tokenade-presets .transform-button {
- padding: 6px 10px;
-}
/* Hacker style controls */
.hacker-controls {
@@ -2086,14 +2101,14 @@ html {
/* Presets row polish */
.tokenade-presets {
- display: flex;
- align-items: center;
- gap: 6px;
- flex-wrap: nowrap;
- overflow-x: visible;
margin: 8px 0 12px 0;
}
-.tokenade-presets .transform-button { flex: 0 0 auto; min-width: 136px; padding: 5px 8px; }
+
+.tokenade-presets .transform-button {
+ flex: 1 0 auto;
+ padding: 5px 8px;
+ width: unset;
+}
/* Quick picks panel */
.carrier-quick-grid {
diff --git a/index.html b/index.html
index b44516f..c73837a 100644
--- a/index.html
+++ b/index.html
@@ -6,8 +6,8 @@
Parseltongue 2.0 - LLM Payload Crafter
-
-
+
+
@@ -185,7 +185,7 @@
{{ universalDecodeResult.text }}
@@ -331,7 +333,7 @@
+
+
+
+
+
+
@@ -1004,6 +1014,13 @@
console.log('Initializing emoji grid, attempt:', retryCount + 1);
+ // Check if we're on the steganography tab before trying to initialize
+ const app = document.getElementById('app').__vue__;
+ if (!app || app.activeTab !== 'steganography') {
+ console.log('Not on steganography tab, skipping emoji grid initialization');
+ return;
+ }
+
// Get the emoji library element
const emojiLibrary = document.querySelector('.emoji-library');
@@ -1019,7 +1036,6 @@
try {
window.emojiLibrary.renderEmojiGrid('emoji-grid-container', function(emoji) {
// Simulate emoji selection by calling the Vue method if possible
- const app = document.getElementById('app').__vue__;
if (app && app.selectEmoji) {
app.selectEmoji(emoji);
}
@@ -1044,10 +1060,7 @@
// Initialize when DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
- // First attempt after a short delay to ensure Vue has initialized
- setTimeout(initEmojiGrid, 500);
-
- // Also initialize when switching to the steganography tab
+ // Set up watcher for tab changes to initialize emoji grid when needed
const app = document.getElementById('app');
if (app && app.__vue__) {
const vue = app.__vue__;
@@ -1061,6 +1074,11 @@
}
});
}
+
+ // If we're already on the steganography tab on page load, initialize it
+ if (vue.activeTab === 'steganography') {
+ setTimeout(initEmojiGrid, 500);
+ }
}
});
diff --git a/js/app.js b/js/app.js
index 590bedf..adba96f 100644
--- a/js/app.js
+++ b/js/app.js
@@ -15,8 +15,8 @@ window.app = new Vue({
// Transform categories for styling
transformCategories: {
encoding: ['Base64', 'Base64 URL', 'Base32', 'Base45', 'Base58', 'Base62', 'Binary', 'Hexadecimal', 'ASCII85', 'URL Encode', 'HTML Entities'],
- cipher: ['Caesar Cipher', 'ROT13', 'ROT47', 'Morse Code', 'Atbash Cipher', 'ROT5', 'Vigenรจre Cipher', 'Rail Fence (3 Rails)', 'Baconian Cipher', 'Tap Code'],
- visual: ['Rainbow Text', 'Strikethrough', 'Underline', 'Reverse Text', 'Alternating Case', 'Reverse Words', 'Random Case', 'Title Case', 'Sentence Case', 'Emoji Speak', 'Ubbi Dubbi', 'Rรถvarsprรฅket'],
+ cipher: ['Caesar Cipher', 'ROT13', 'ROT47', 'ROT18', 'ROT5', 'Morse Code', 'Atbash Cipher', 'Vigenรจre Cipher', 'Affine Cipher (a=5,b=8)', 'Rail Fence (3 Rails)', 'Baconian Cipher', 'Tap Code', 'A1Z26', 'QWERTY Right Shift'],
+ visual: ['Rainbow Text', 'Strikethrough', 'Underline', 'Reverse Text', 'Alternating Case', 'Reverse Words', 'Random Case', 'Title Case', 'Sentence Case', 'Emoji Speak', 'Ubbi Dubbi', 'Rรถvarsprรฅket', 'Vaporwave', 'Disemvowel'],
format: ['Pig Latin', 'Leetspeak', 'NATO Phonetic', 'camelCase', 'snake_case', 'kebab-case'],
unicode: ['Invisible Text', 'Upside Down', 'Full Width', 'Small Caps', 'Bubble', 'Braille', 'Greek Letters', 'Wingdings', 'Superscript', 'Subscript', 'Regional Indicator Letters', 'Fraktur', 'Cyrillic Stylized', 'Katakana', 'Hiragana', 'Roman Numerals'],
special: ['Medieval', 'Cursive', 'Monospace', 'Double-Struck', 'Elder Futhark', 'Mirror Text', 'Zalgo'],
@@ -54,7 +54,7 @@ window.app = new Vue({
filteredEmojis: [...window.emojiLibrary.EMOJI_LIST],
selectedEmoji: null,
carrierEmojiList: [...window.emojiLibrary.EMOJI_LIST],
- quickCarrierEmojis: ['๐','๐','๐ฒ','๐ฅ','๐ฅ','๐ฟ','โ','โญ','โจ','๐','๐','๐ชจ','๐','๐ชถ','๐ฎ','๐ข','๐','๐ฆ','๐'],
+ quickCarrierEmojis: ['๐','๐','๐ฒ','๐ฅ','๐ฅ','๐ฟ','โ','โญ','โจ','๐','๐','๐ชจ','๐','๐ชถ','๐ฎ','๐ข','๐','๐ฆ'],
tbCarrierManual: '',
// Token Bomb Generator
tbDepth: 3,
@@ -105,7 +105,10 @@ window.app = new Vue({
// Danger zone controls
showDangerModal: false,
- dangerThresholdTokens: 25_000_000
+ dangerThresholdTokens: 25_000_000,
+
+ // Copy operation tracking (moved from methods)
+ lastCopyTime: 0
},
methods: {
toggleUnicodePanel() {
@@ -278,17 +281,8 @@ window.app = new Vue({
console.log('Transform mapping:', transformInfo);
}
} else {
- // Handle text with proper Unicode segmentation
- const segments = window.emojiLibrary.splitEmojis(this.transformInput);
- const transformedSegments = segments.map(segment => {
- // Skip transformation for emojis and complex Unicode characters
- if (segment.length > 1 || /[\u{1F300}-\u{1F9FF}\u{2600}-\u{26FF}]/u.test(segment)) {
- return segment;
- }
- return transform.func(segment);
- });
-
- this.transformOutput = window.emojiLibrary.joinEmojis(transformedSegments);
+ // Apply transform to full text - let the transform handle segmentation if needed
+ this.transformOutput = transform.func(this.transformInput);
}
// Set flag to mark this as a transform-initiated copy
@@ -498,9 +492,6 @@ window.app = new Vue({
},
// Utility Methods
- // Track last copy operation to prevent rapid repeated copies
- lastCopyTime: 0,
-
async copyToClipboard(text) {
if (!text) return;
@@ -1737,10 +1728,18 @@ window.app = new Vue({
});
item.classList.add('active-category');
- // Jump directly to the target element
- targetElement.scrollIntoView({
- behavior: 'smooth',
- block: 'start'
+ // Get height of .input-section so we can offset the scroll
+ const inputSection = document.querySelector('.input-section');
+ const inputSectionHeight = inputSection.offsetHeight;
+
+ // Calculate the target scroll position with offset
+ const elementPosition = targetElement.getBoundingClientRect().top + window.pageYOffset;
+ const offsetPosition = elementPosition - inputSectionHeight - 10; // Extra 10px padding
+
+ // Scroll to the calculated position
+ window.scrollTo({
+ top: offsetPosition,
+ behavior: 'smooth'
});
// Highlight the section briefly to draw attention
@@ -2141,6 +2140,25 @@ window.app = new Vue({
}
this.textPayload = out;
this.showNotification(' Text payload generated', 'success');
+ },
+
+ // Set up paste event handlers for all textareas
+ setupPasteHandlers() {
+ // Get all textareas in the app
+ const textareas = document.querySelectorAll('textarea');
+
+ // Add paste event listener to each textarea
+ textareas.forEach(textarea => {
+ textarea.addEventListener('paste', (e) => {
+ // Mark this as an explicit paste event
+ this.isPasteOperation = true;
+
+ // Reset the flag after a short delay
+ setTimeout(() => {
+ this.isPasteOperation = false;
+ }, 100);
+ });
+ });
}
},
// Initialize theme and components
@@ -2201,24 +2219,6 @@ window.app = new Vue({
});
},
- // Set up paste event handlers for all textareas
- setupPasteHandlers() {
- // Get all textareas in the app
- const textareas = document.querySelectorAll('textarea');
-
- // Add paste event listener to each textarea
- textareas.forEach(textarea => {
- textarea.addEventListener('paste', (e) => {
- // Mark this as an explicit paste event
- this.isPasteOperation = true;
-
- // Reset the flag after a short delay
- setTimeout(() => {
- this.isPasteOperation = false;
- }, 100);
- });
- });
- },
// No keyboard shortcuts - they were removed as requested
created() {
// Initialize any required functionality
@@ -2233,20 +2233,10 @@ window.app = new Vue({
if (this.activeTransform && this.activeTab === 'transforms') {
this.transformOutput = this.activeTransform.func(this.transformInput);
}
- },
- // Make sure emoji list stays loaded when user types in any input
- emojiMessage() {
- this.filteredEmojis = [...window.emojiLibrary.EMOJI_LIST];
- this.$nextTick(() => {
- this.renderEmojiGrid();
- });
- },
- // Also watch the decode input field for typing activity
- decodeInput() {
- this.filteredEmojis = [...window.emojiLibrary.EMOJI_LIST];
- this.$nextTick(() => {
- this.renderEmojiGrid();
- });
}
+ // Note: Removed watchers for emojiMessage and decodeInput that were
+ // unnecessarily re-rendering the emoji grid on every keystroke.
+ // The emoji grid is now only rendered when switching tabs or categories,
+ // which prevents losing the selected emoji state while typing.
}
});
diff --git a/js/emojiLibrary.js b/js/emojiLibrary.js
index 3a0e44d..157aa62 100644
--- a/js/emojiLibrary.js
+++ b/js/emojiLibrary.js
@@ -22,452 +22,6 @@ window.emojiLibrary.joinEmojis = function(emojis) {
return emojis.join('');
};
-// Additional emojis for expanded library
-window.emojiLibrary.ADDITIONAL_EMOJIS = [
- // Animals & Nature
- "๐", "๐ฆ", "๐ฆ", "๐ฏ", "๐ฎ", "๐ท", "๐ธ", "๐ต", "๐", "๐ง", "๐ฆ", "๐ค", "๐ฆ", "๐ฆ
", "๐ฆ", "๐ฆ", "๐บ", "๐", "๐ด", "๐ฆ", "๐", "๐", "๐ฆ", "๐", "๐", "๐", "๐ท๏ธ", "๐ฆ", "๐ฆ", "๐ฆ ", "๐ฆจ", "๐ฆฉ", "๐ฆซ", "๐ฆฌ", "๐ปโโ๏ธ", "๐ผ", "๐จ", "๐", "๐ถ", "๐ฉ", "๐", "๐ฑ", "๐ชฑ",
-
- // Food & Drink
- "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐ฅญ", "๐", "๐ฅฅ", "๐ฅ", "๐
", "๐", "๐ฅ", "๐ฅฆ", "๐ฅฌ", "๐ฅ", "๐ถ๏ธ", "๐ฝ", "๐ฅ", "๐ง", "๐ง
", "๐ฅ", "๐ ", "๐ฅ", "๐", "๐", "๐", "๐", "๐ค", "๐ฃ", "๐ฑ", "๐", "๐ฒ", "๐ฅ",
-
- // Travel & Places
- "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐ฒ", "๐", "๐", "๐ก", "๐", "๐ธ", "๐ฅ๏ธ", "๐๏ธ", "๐๏ธ", "๐ค", "๐ข", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐๏ธ", "๐๏ธ",
-
- // Activities & Sports
- "โฝ", "๐", "๐", "๐", "๐", "๐พ", "๐ณ", "๐", "๐", "๐", "๐ธ", "๐ฅ", "๐ฅ", "๐ฅ
", "๐คพ", "๐ฟ", "๐", "๐", "๐", "๐๏ธ", "๐คผ", "๐คธ", "๐คบ", "๐คฝ", "๐คน", "๐ฏ", "๐ฑ", "๐ฝ", "๐ด", "๐ต",
-
- // Tech & Objects
- "๐ป", "โจ๏ธ", "๐ฅ๏ธ", "๐ฑ๏ธ", "๐จ๏ธ", "๐ฑ", "โ๏ธ", "๐", "๐", "๐ ", "๐บ", "๐ป", "๐๏ธ", "๐๏ธ", "๐๏ธ", "๐งญ", "โฑ๏ธ", "โฒ๏ธ", "โฐ", "๐ฐ๏ธ", "๐ก", "๐", "๐", "๐ก", "๐ฎ", "๐ช", "๐งฏ", "๐ข๏ธ", "๐ธ", "๐ต", "๐ณ", "๐ด", "๐ถ", "๐ท", "๐ฐ", "๐ฑ", "๐ฒ", "๐ผ", "๐ฝ", "๐พ", "๐ฟ",
-
- // Symbols
- "โค๏ธ", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐ค", "๐ข", "๐ฃ", "๐ฅ", "๐ฆ", "๐จ", "๐ฉ", "๐ซ", "๐ฌ", "๐ฅ", "๐ ", "๐พ", "๐ป", "๐", "๐ฝ", "๐ฟ", "๐ฉธ",
-
- // Mystical & Fantasy
- "๐ง", "๐งโโ๏ธ", "๐งโโ๏ธ", "๐ง", "๐งโโ๏ธ", "๐งโโ๏ธ", "๐ง", "๐งโโ๏ธ", "๐งโโ๏ธ", "๐ง", "๐งโโ๏ธ", "๐งโโ๏ธ", "๐น", "๐บ", "๐ป", "๐ฝ", "๐พ", "๐ฒ", "๐ฎ", "๐", "๐", "๐ฆ", "๐ธ", "๐ฅท", "๐ฐ", "๐ง", "โ๏ธ", "๐ฏ", "๐ฑ", "โ๏ธ", "โจ", "๐ ", "๐", "๐", "๐", "๐", "๐บ", "๐น", "๐ญ", "๐", "๐", "๐ข", "๐", "๐ฐ", "๐ฅ", "๐ฅ", "๐", "๐", "๐ช๏ธ", "๐ฉธ", "๐ชฑ", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐",
-
- // Flags
- "๐", "๐ฉ", "๐", "๐ด", "๐ณ๏ธ", "๐ณ๏ธโ๐", "๐ณ๏ธโโง๏ธ", "๐ดโโ ๏ธ", "๐บ๐ธ", "๐จ๐ฆ", "๐ฌ๐ง", "๐ฉ๐ช", "๐ซ๐ท", "๐ฎ๐น", "๐ฏ๐ต", "๐ฐ๐ท", "๐ท๐บ", "๐จ๐ณ", "๐ฎ๐ณ", "๐ฆ๐บ", "๐ง๐ท", "๐ช๐ธ", "๐ณ๐ฑ", "๐ต๐น", "๐ธ๐ช", "๐ฆ๐ท", "๐ฆ๐บ", "๐ฆ๐น", "๐ง๐ช", "๐ง๐ด"
-];
-
-// Make emoji list globally available
-window.emojiLibrary.EMOJI_LIST = [
- // Blood drop, worm, and moon emojis
- "๐ฉธ", // Blood Drop
- "๐ชฑ", // Worm
- "๐", // New Moon
- "๐", // Waxing Crescent Moon
- "๐", // First Quarter Moon
- "๐", // Waxing Gibbous Moon
- "๐", // Full Moon
- "๐", // Waning Gibbous Moon
- "๐", // Last Quarter Moon
- "๐", // Waning Crescent Moon
- // Faces and People
- "๐", // Grinning Face
- "๐", // Beaming Face with Smiling Eyes
- "๐", // Face with Tears of Joy
- "๐คฃ", // Rolling on the Floor Laughing
- "๐", // Grinning Face with Big Eyes
- "๐", // Grinning Face with Smiling Eyes
- "๐
", // Grinning Face with Sweat
- "๐", // Grinning Squinting Face
- "๐", // Winking Face
- "๐", // Smiling Face with Smiling Eyes
- "๐", // Face Savoring Food
- "๐", // Smiling Face with Sunglasses
- "๐", // Smiling Face with Heart-Eyes
- "๐", // Face Blowing a Kiss
- "๐ฅฐ", // Smiling Face with Hearts
- "๐", // Kissing Face
- "๐", // Kissing Face with Smiling Eyes
- "๐", // Kissing Face with Closed Eyes
- "๐", // Slightly Smiling Face
- "๐ค", // Hugging Face
- "๐คฉ", // Star-Struck
- "๐ค", // Thinking Face
- "๐คจ", // Face with Raised Eyebrow
- "๐", // Neutral Face
- "๐", // Expressionless Face
- "๐ถ", // Face Without Mouth
- "๐", // Face with Rolling Eyes
- "๐", // Smirking Face
- "๐ฃ", // Persevering Face
- "๐ฅ", // Sad but Relieved Face
- "๐ฎ", // Face with Open Mouth
- "๐ค", // Zipper-Mouth Face
- "๐ฏ", // Hushed Face
- "๐ช", // Sleepy Face
- "๐ซ", // Tired Face
- "๐ด", // Sleeping Face
- "๐", // Relieved Face
- "๐", // Face with Tongue
- "๐", // Winking Face with Tongue
- "๐", // Squinting Face with Tongue
- "๐คค", // Drooling Face
- "๐", // Unamused Face
- "๐", // Downcast Face with Sweat
- "๐", // Pensive Face
- "๐", // Confused Face
- "๐", // Upside-Down Face
- "๐ค", // Money-Mouth Face
- "๐ฒ", // Astonished Face
- "๐", // Slightly Frowning Face
- "๐", // Confounded Face
- "๐", // Disappointed Face
- "๐", // Worried Face
- "๐ค", // Face with Steam From Nose
- "๐ข", // Crying Face
- "๐ญ", // Loudly Crying Face
- "๐ง", // Anguished Face
- "๐จ", // Fearful Face
- "๐ฉ", // Weary Face
- "๐คฏ", // Exploding Head
- "๐ฑ", // Face Screaming in Fear
- "๐ณ", // Flushed Face
- "๐ฅต", // Hot Face
- "๐ฅถ", // Cold Face
- "๐ก", // Pouting Face
- "๐ ", // Angry Face
- "๐คฌ", // Face with Symbols on Mouth
- "๐ท", // Face with Medical Mask
- "๐ค", // Face with Thermometer
- "๐ค", // Face with Head-Bandage
- "๐คข", // Nauseated Face
- "๐คฎ", // Face Vomiting
- "๐คง", // Sneezing Face
- "๐", // Smiling Face with Halo
- "๐ฅณ", // Partying Face
- "๐ฅด", // Woozy Face
- "๐ฅบ", // Pleading Face
- "๐ง", // Face with Monocle
- "๐ฅฑ", // Yawning Face
- "๐ง ", // Brain
-
- // Gestures and Body Parts
- "๐", // Thumbs Up
- "๐", // Thumbs Down
- "๐", // Clapping Hands
- "๐", // Raising Hands
- "๐ค", // Handshake
- "๐", // Waving Hand
- "โ๏ธ", // Victory Hand
- "๐ค", // Love-You Gesture
- "๐ค", // Sign of the Horns
- "๐", // Oncoming Fist
- "โ", // Raised Fist
- "๐", // Backhand Index Pointing Up
- "๐", // Backhand Index Pointing Down
- "๐", // Backhand Index Pointing Left
- "๐", // Backhand Index Pointing Right
- "๐", // OK Hand
- "๐ค", // Pinched Fingers
- "๐ค", // Pinching Hand
- "โ", // Raised Hand
- "๐ค", // Raised Back of Hand
- "๐๏ธ", // Hand with Fingers Splayed
- "๐", // Vulcan Salute
- "๐", // Eyes
- "๐๏ธ", // Eye
- "๐", // Mouth
- "๐งฟ", // Nazar Amulet
-
- // Celebration & Objects
- "๐", // Party Popper
- "๐", // Confetti Ball
- "๐", // Birthday Cake
- "๐", // Wrapped Gift
- "๐", // Balloon
- "๐", // Christmas Tree
- "๐", // Jack-O-Lantern
- "๐", // Trophy
- "๐
", // Sports Medal
- "๐ฅ", // 1st Place Medal
- "๐ฅ", // 2nd Place Medal
- "๐ฅ", // 3rd Place Medal
- "๐ฐ", // Money Bag
- "๐ธ", // Money with Wings
- "๐ต", // Dollar Banknote
- "๐ด", // Yen Banknote
- "๐ถ", // Euro Banknote
- "๐ท", // Pound Banknote
- "๐ฏ", // Hundred Points
- "๐ฑ", // Mobile Phone
- "๐ป", // Laptop
- "โจ๏ธ", // Keyboard
- "๐ฅ๏ธ", // Desktop Computer
- "๐", // Locked
- "๐", // Unlocked
-
- // Food & Drink
- "๐", // Pizza
- "๐", // Hamburger
- "๐ฆ", // Ice Cream
- "๐ฉ", // Doughnut
- "๐บ", // Beer Mug
- "๐ท", // Wine Glass
- "โ", // Hot Beverage
-
- // Nature & Weather
- "๐", // Rainbow
- "๐", // Sun with Face
- "๐", // New Moon
- "๐", // Waxing Crescent Moon
- "๐", // First Quarter Moon
- "๐", // Waxing Gibbous Moon
- "๐", // Full Moon
- "๐", // Waning Gibbous Moon
- "๐", // Last Quarter Moon
- "๐", // Waning Crescent Moon
- "๐", // Crescent Moon
- "โญ", // Star
- "๐", // Glowing Star
- "โก", // High Voltage
- "โ๏ธ", // Snowflake
- "๐ฅ", // Fire
- "๐ง", // Droplet
- "๐", // Water Wave
-
- // Animals
- "๐", // Follow The
- "๐ฑ", // Cat Face
- "๐ถ", // Dog Face
- "๐ชฑ", // Worm
- "๐ฆ", // Fox
- "๐ผ", // Panda
- "๐ฆ", // Lion
- "๐ฌ", // Dolphin
- "๐ฆ", // Unicorn
-
- // Symbols & Special
- "โค๏ธ", // Red Heart
- "๐ฉธ", // Blood Drop
- "๐งก", // Orange Heart
- "๐", // Green Heart
- "๐", // Blue Heart
- "๐", // Purple Heart
- "๐", // Rocket
- "๐", // Eyes
- "๐", // Skull
- "๐ฅน", // Face Holding Back Tears
- "๐", // Snake
- "๐", // Dragon
- "๐ฒ", // Dragon Face
- "๐งโโ๏ธ", // Wizard
- "๐ช", // Magic Wand
- "๐ดโโ ๏ธ", // Pirate Flag
- "๐ฆ
", // Eagle (often associated with pirates)
- "๐ฆ", // Parrot (pirate symbol)
- "๐ป", // Laptop (hacker symbol)
- "๐ถ๏ธ", // Sunglasses (cool guy symbol)
- "๐งโ๐ป", // Technologist
- "๐จโ๐ป", // Man Technologist
- "๐ฉโ๐ป", // Woman Technologist
- "๐ต๏ธ", // Detective
- "๐ต๏ธโโ๏ธ", // Man Detective
- "๐ต๏ธโโ๏ธ", // Woman Detective
- "๐ฅ๏ธ", // Desktop Computer
- "โจ๏ธ", // Keyboard
- "๐ฑ๏ธ", // Computer Mouse
- "๐น๏ธ", // Joystick
- "๐ฑ", // Mobile Phone
- "๐ฒ", // Mobile Phone with Arrow
- "๐", // Unlocked (hacker symbol)
- "๐", // Key (hacker symbol)
- "๐๏ธ", // Old Key (hacker symbol)
- "๐ก๏ธ", // Shield (hacker symbol)
- "โ๏ธ", // Crossed Swords (hacker symbol)
- "๐งฌ", // DNA (hacker symbol)
- "๐งซ", // Petri Dish (hacker symbol)
- "๐งช", // Test Tube (hacker symbol)
- "๐ ๏ธ", // Hammer and Wrench (hacker symbol)
- "โ๏ธ", // Gear (hacker symbol)
- "๐งฐ", // Toolbox (hacker symbol)
- "๐งฒ", // Magnet (hacker symbol)
- "๐ฃ", // Bomb (hacker symbol)
- "๐ณ๏ธ", // Hole (hacker symbol)
- "๐ก", // Satellite Antenna (hacker symbol)
- "๐ฐ๏ธ", // Satellite (hacker symbol)
- "๐", // Telephone Receiver (hacker symbol)
- "โ๏ธ", // Telephone (hacker symbol)
- "๐", // Pager (hacker symbol)
- "๐ ", // Fax Machine (hacker symbol)
- "๐", // Electric Plug (hacker symbol)
- "๐ก", // Light Bulb (hacker symbol)
- "๐ฆ", // Flashlight (hacker symbol)
- "๐ฏ๏ธ", // Candle (hacker symbol)
- "๐๏ธ", // Rolled-Up Newspaper (hacker symbol)
- "๐", // Scroll (hacker symbol)
- "๐", // Page with Curl (hacker symbol)
- "๐", // Page Facing Up (hacker symbol)
- "๐", // Bookmark Tabs (hacker symbol)
- "๐", // Bar Chart (hacker symbol)
- "๐", // Chart Increasing (hacker symbol)
- "๐", // Chart Decreasing (hacker symbol)
- "๐๏ธ", // Card Index Dividers (hacker symbol)
- "๐๏ธ", // Card File Box (hacker symbol)
- "๐๏ธ", // File Cabinet (hacker symbol)
- "๐๏ธ", // Wastebasket (hacker symbol)
- "๐ข๏ธ", // Oil Drum (hacker symbol)
- "๐๏ธ", // Bellhop Bell (hacker symbol)
- "๐งณ", // Luggage (hacker symbol)
- "๐", // Person in Bed (hacker symbol)
- "๐๏ธ", // Bed (hacker symbol)
- "๐๏ธ", // Couch and Lamp (hacker symbol)
- "๐ช", // Chair (hacker symbol)
- "๐ช", // Door (hacker symbol)
- "๐งด", // Lotion Bottle (hacker symbol)
- "๐งท", // Safety Pin (hacker symbol)
- "๐งน", // Broom (hacker symbol)
- "๐งบ", // Basket (hacker symbol)
- "๐งป", // Roll of Paper (hacker symbol)
- "๐งผ", // Soap (hacker symbol)
- "๐งฝ", // Sponge (hacker symbol)
- "๐งฏ", // Fire Extinguisher (hacker symbol)
- "๐", // Shopping Cart (hacker symbol)
- "๐ฌ", // Cigarette (hacker symbol)
- "โฐ๏ธ", // Coffin (hacker symbol)
- "โฑ๏ธ", // Funeral Urn (hacker symbol)
- "๐ฟ", // Moai (hacker symbol)
- "๐", // Passport Control (hacker symbol)
- "๐", // Customs (hacker symbol)
- "๐", // Baggage Claim (hacker symbol)
- "๐
", // Left Luggage (hacker symbol)
- "๐น", // Men's Room (hacker symbol)
- "๐บ", // Women's Room (hacker symbol)
- "๐ผ", // Baby Symbol (hacker symbol)
- "๐ป", // Restroom (hacker symbol)
- "๐ฎ", // Litter in Bin Sign (hacker symbol)
- "๐ฐ", // Potable Water (hacker symbol)
- "๐พ", // Water Closet (hacker symbol)
- "๐ญ", // No Smoking (hacker symbol)
- "๐ฏ", // No Littering (hacker symbol)
- "๐ฑ", // Non-Potable Water (hacker symbol)
-
- // Additional Smileys & Emotion
- "๐", // Smiling Face with Smiling Eyes
- "๐", // Smiling Face with Halo
- "๐", // Slightly Smiling Face
- "๐", // Upside-Down Face
- "๐", // Winking Face
- "๐", // Relieved Face
- "๐", // Smiling Face with Heart-Eyes
- "๐ฅฐ", // Smiling Face with Hearts
- "๐", // Face Blowing a Kiss
- "๐", // Kissing Face
- "๐", // Kissing Face with Smiling Eyes
- "๐", // Kissing Face with Closed Eyes
- "๐", // Face Savoring Food
- "๐", // Face with Tongue
- "๐", // Squinting Face with Tongue
- "๐", // Winking Face with Tongue
- "๐คช", // Zany Face
-
- // Additional People & Body
- "๐งโ๐", // Astronaut
- "๐จโ๐", // Man Astronaut
- "๐ฉโ๐", // Woman Astronaut
- "๐งโ๐ฌ", // Scientist
- "๐จโ๐ฌ", // Man Scientist
- "๐ฉโ๐ฌ", // Woman Scientist
- "๐งโโ๏ธ", // Health Worker
- "๐จโโ๏ธ", // Man Health Worker
- "๐ฉโโ๏ธ", // Woman Health Worker
- "๐งโ๐ง", // Mechanic
- "๐จโ๐ง", // Man Mechanic
- "๐ฉโ๐ง", // Woman Mechanic
- "๐งโ๐", // Firefighter
- "๐จโ๐", // Man Firefighter
- "๐ฉโ๐", // Woman Firefighter
-
- // Additional Animals & Nature
- "๐ฆ", // Giraffe
- "๐ฆ", // Zebra
- "๐ฆฌ", // Bison
- "๐ฆ", // Llama
- "๐ฆ", // Kangaroo
- "๐ฆฅ", // Sloth
- "๐ฆฆ", // Otter
- "๐ฆก", // Badger
- "๐ฆ", // Hedgehog
- "๐ฆ", // Raccoon
- "๐ฟ๏ธ", // Chipmunk
- "๐ฆซ", // Beaver
- "๐ฆ", // Lizard
- "๐", // Crocodile
- "๐ข", // Turtle
- "๐ฆ", // Sauropod
- "๐ฆ", // T-Rex
- "๐", // Whale
- "๐ฌ", // Dolphin
- "๐ฆญ", // Seal
-
- // Additional Food & Drink
- "๐ฅ", // Pancakes
- "๐ง", // Waffle
- "๐ง", // Cheese Wedge
- "๐", // Meat on Bone
- "๐", // Poultry Leg
- "๐ฅฉ", // Cut of Meat
- "๐ฅ", // Bacon
- "๐", // Hamburger
- "๐", // French Fries
- "๐", // Pizza
- "๐ญ", // Hot Dog
- "๐ฅช", // Sandwich
- "๐ฎ", // Taco
- "๐ฏ", // Burrito
- "๐ฅ", // Stuffed Flatbread
- "๐ง", // Falafel
- "๐ฅ", // Egg
- "๐ณ", // Cooking
- "๐ฅ", // Shallow Pan of Food
- "๐ฒ", // Pot of Food
-
- // Additional Travel & Places
- "๐๏ธ", // Cityscape
- "๐", // Cityscape at Dusk
- "๐", // Sunset
- "๐", // Night with Stars
- "๐", // Bridge at Night
- "๐๏ธ", // National Park
- "๐๏ธ", // Desert
- "๐๏ธ", // Desert Island
- "๐๏ธ", // Beach with Umbrella
- "โฐ๏ธ", // Mountain
- "๐๏ธ", // Snow-Capped Mountain
- "๐", // Volcano
- "๐ป", // Mount Fuji
- "๐ ", // House
- "๐ก", // House with Garden
- "๐ข", // Office Building
- "๐ฃ", // Japanese Post Office
- "๐ค", // Post Office
- "๐ฅ", // Hospital
- "๐ฆ", // Bank
-
- // Additional Flags
- "๐บ๐ธ", // United States
- "๐ฌ๐ง", // United Kingdom
- "๐จ๐ฆ", // Canada
- "๐ฏ๐ต", // Japan
- "๐ฉ๐ช", // Germany
- "๐ซ๐ท", // France
- "๐ฎ๐น", // Italy
- "๐ช๐ธ", // Spain
- "๐ท๐บ", // Russia
- "๐จ๐ณ", // China
- "๐ฎ๐ณ", // India
- "๐ง๐ท", // Brazil
- "๐ฆ๐บ", // Australia
- "๐ฒ๐ฝ", // Mexico
- "๐ฐ๐ท", // South Korea
- "๐ฟ๐ฆ", // South Africa
- "๐ธ๐ช", // Sweden
- "๐ณ๐ด", // Norway
- "๐ณ๐ฟ", // New Zealand
- "๐ฎ๐ช", // Ireland
-];
-
// Define emoji categories with specific emojis for each category
window.emojiLibrary.EMOJIS = {
nature: ["๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐ฆ", "๐ฆ", "๐ฏ", "๐ฎ", "๐ท", "๐ธ", "๐ต", "๐", "๐ง", "๐ฆ", "๐ค", "๐ฆ", "๐ฆ
", "๐ฆ", "๐ฆ", "๐บ", "๐", "๐ด", "๐ฆ", "๐", "๐", "๐ฆ", "๐", "๐", "๐", "๐ท๏ธ", "๐ฆ", "๐ฆ", "๐ฆ ", "๐ชฑ"],
@@ -505,6 +59,18 @@ window.emojiLibrary.CATEGORIES = [
{ id: 'flags', name: 'Flags', icon: '๐' }
];
+// Auto-generate EMOJI_LIST from the categorized EMOJIS object
+// This ensures a single source of truth for all emojis
+window.emojiLibrary.EMOJI_LIST = (() => {
+ const allEmojis = [];
+ // Combine all emojis from all categories
+ Object.values(window.emojiLibrary.EMOJIS).forEach(categoryEmojis => {
+ allEmojis.push(...categoryEmojis);
+ });
+ // Remove duplicates using Set and return as array
+ return Array.from(new Set(allEmojis));
+})();
+
// Function to render emoji grid with categories
window.emojiLibrary.renderEmojiGrid = function(containerId, onEmojiSelect, filteredList) {
console.log('Rendering emoji grid to:', containerId);
@@ -561,10 +127,12 @@ window.emojiLibrary.renderEmojiGrid = function(containerId, onEmojiSelect, filte
// If we have a filtered list (from search), use that
emojisToShow = filteredList;
} else if (activeCategory === 'all') {
- // For 'all' category, combine all emojis from the categories
+ // For 'all' category, combine all emojis from the categories and deduplicate
Object.values(window.emojiLibrary.EMOJIS).forEach(categoryEmojis => {
emojisToShow = [...emojisToShow, ...categoryEmojis];
});
+ // Remove duplicates using Set
+ emojisToShow = Array.from(new Set(emojisToShow));
} else if (window.emojiLibrary.EMOJIS[activeCategory]) {
// For specific category, use emojis from that category
emojisToShow = window.emojiLibrary.EMOJIS[activeCategory];
@@ -607,10 +175,52 @@ window.emojiLibrary.renderEmojiGrid = function(containerId, onEmojiSelect, filte
// Re-render the emoji grid with the selected category
const selectedCategory = tab.getAttribute('data-category');
console.log('Category selected:', selectedCategory);
+
+ // Determine which emojis to show
+ let emojisToShow = [];
+ if (selectedCategory === 'all') {
+ // For 'all' category, combine all emojis from the categories and deduplicate
+ Object.values(window.emojiLibrary.EMOJIS).forEach(categoryEmojis => {
+ emojisToShow = [...emojisToShow, ...categoryEmojis];
+ });
+ // Remove duplicates using Set
+ emojisToShow = Array.from(new Set(emojisToShow));
+ } else if (window.emojiLibrary.EMOJIS[selectedCategory]) {
+ // For specific category, use emojis from that category
+ emojisToShow = window.emojiLibrary.EMOJIS[selectedCategory];
+ }
+
+ console.log(`Updating grid with ${emojisToShow.length} emojis for category: ${selectedCategory}`);
+
+ // Clear only the grid and rebuild it
+ gridContainer.innerHTML = '';
+
+ // Add emojis to grid
+ emojisToShow.forEach(emoji => {
+ const emojiButton = document.createElement('button');
+ emojiButton.className = 'emoji-button';
+ emojiButton.textContent = emoji;
+ emojiButton.title = 'Click to encode with this emoji';
+
+ emojiButton.addEventListener('click', () => {
+ if (typeof onEmojiSelect === 'function') {
+ onEmojiSelect(emoji);
+ // Add visual feedback when clicked
+ emojiButton.style.backgroundColor = '#e6f7ff';
+ setTimeout(() => {
+ emojiButton.style.backgroundColor = '';
+ }, 300);
+ }
+ });
+
+ gridContainer.appendChild(emojiButton);
+ });
- // Clear and recreate the grid
- container.removeChild(gridContainer);
- window.emojiLibrary.renderEmojiGrid(containerId, onEmojiSelect);
+ // Update the count display
+ const countDisplay = container.querySelector('.emoji-count');
+ if (countDisplay) {
+ countDisplay.textContent = `${emojisToShow.length} emojis available`;
+ }
});
});
diff --git a/js/emojiWordMap.js b/js/emojiWordMap.js
new file mode 100644
index 0000000..2b97901
--- /dev/null
+++ b/js/emojiWordMap.js
@@ -0,0 +1,853 @@
+// Emoji Word Map for Emoji Speak Transform
+// Maps emojis to arrays of related keywords
+// When a word is typed, a random emoji from matching entries is returned
+
+window.emojiKeywords = {
+ // Emotions & Feelings - Happy
+ '๐': ['happy', 'smile', 'pleased', 'content', 'glad'],
+ '๐': ['grin', 'smile', 'happy', 'excited', 'beaming', 'haha', 'ha', 'hehe'],
+ '๐': ['laugh', 'lol', 'crying', 'tears', 'funny', 'hilarious', 'haha', 'ha', 'hehe'],
+ '๐คฃ': ['laugh', 'rofl', 'lol', 'rolling', 'hilarious', 'haha', 'ha', 'hehe'],
+ '๐': ['happy', 'smile', 'joy', 'cheerful', 'haha', 'ha', 'hehe'],
+ '๐': ['happy', 'smile', 'excited', 'haha', 'ha', 'hehe'],
+ '๐คฉ': ['excited', 'starstruck', 'wow', 'amazing'],
+ '๐': ['love', 'heart', 'adore', 'crush'],
+ '๐ฅฐ': ['love', 'hearts', 'affection', 'sweet'],
+ '๐': ['kiss', 'love', 'smooch', 'mwah'],
+ '๐': ['wink', 'flirt', 'playful'],
+
+ // Emotions - Sad & Negative
+ '๐ข': ['sad', 'cry', 'tear', 'upset'],
+ '๐ญ': ['cry', 'sobbing', 'bawling', 'sad', 'tears'],
+ '๐': ['sad', 'pensive', 'down', 'disappointed'],
+ '๐': ['sad', 'disappointed', 'upset', 'lose'],
+ '๐': ['worried', 'anxious', 'concerned'],
+ '๐': ['confused', 'uncertain', 'puzzled'],
+ '๐ค': ['think', 'thinking', 'hmm', 'wonder', 'ponder'],
+ '๐': ['neutral', 'meh', 'blank', 'expressionless'],
+
+ // Emotions - Angry
+ '๐ก': ['angry', 'mad', 'furious', 'rage', 'pissed'],
+ '๐ ': ['angry', 'mad', 'annoyed', 'grumpy'],
+ '๐คฌ': ['angry', 'cursing', 'swearing', 'rage'],
+
+ // Emotions - Surprised & Shocked
+ '๐ฎ': ['wow', 'surprised', 'shocked', 'amazed'],
+ '๐ฒ': ['shocked', 'surprised', 'astonished'],
+ '๐ฑ': ['scared', 'shock', 'screaming', 'fear', 'terrified'],
+ '๐จ': ['scared', 'fearful', 'afraid', 'anxious'],
+
+ // Emotions - Other
+ '๐': ['cool', 'sunglasses', 'smooth', 'slick'],
+ '๐ด': ['sleep', 'sleeping', 'tired', 'sleepy', 'zzz'],
+ '๐ฅฑ': ['tired', 'sleepy', 'bored', 'yawn'],
+ '๐ฐ': ['nervous', 'anxious', 'sweat', 'worried'],
+ '๐
': ['sweat', 'relief', 'phew', 'nervous'],
+ '๐คข': ['sick', 'nauseous', 'ill', 'gross'],
+ '๐คฎ': ['sick', 'vomit', 'puke', 'ill'],
+ '๐': ['angel', 'innocent', 'halo', 'saint'],
+ '๐': ['devil', 'evil', 'mischief', 'naughty'],
+ '๐': ['dead', 'skull', 'death', 'dying'],
+ '๐ป': ['ghost', 'boo', 'spooky', 'phantom'],
+ '๐': ['party', 'celebrate', 'celebration', 'hooray', 'festive'],
+ '๐': ['party', 'celebrate', 'confetti', 'celebration'],
+
+ // Animals - Pets & Common
+ '๐': ['dog', 'puppy', 'pet', 'canine', 'pup'],
+ '๐ถ': ['dog', 'puppy', 'doggy', 'pet', 'pup'],
+ '๐ฆฎ': ['dog', 'guide', 'service'],
+ '๐โ๐ฆบ': ['dog', 'service'],
+ '๐ฉ': ['dog', 'poodle', 'puppy'],
+ '๐ฑ': ['cat', 'kitty', 'kitten', 'pet', 'feline'],
+ '๐': ['cat', 'kitty', 'feline', 'pet'],
+ '๐โโฌ': ['cat', 'black'],
+ '๐ญ': ['mouse', 'mice', 'rodent'],
+ '๐น': ['hamster', 'pet', 'rodent'],
+ '๐ฐ': ['rabbit', 'bunny', 'easter', 'hare'],
+ '๐': ['rabbit', 'bunny', 'hare'],
+
+ // Animals - Wild
+ '๐ฆ': ['fox', 'foxy', 'sly'],
+ '๐ป': ['bear', 'teddy'],
+ '๐ผ': ['panda', 'bear'],
+ '๐จ': ['koala', 'bear', 'australian'],
+ '๐ฏ': ['tiger', 'fierce', 'striped'],
+ '๐ฆ': ['lion', 'king', 'mane', 'roar'],
+ '๐ฎ': ['cow', 'cattle', 'moo'],
+ '๐ท': ['pig', 'piggy', 'oink', 'swine'],
+ '๐ธ': ['frog', 'toad', 'ribbit'],
+ '๐ต': ['monkey', 'primate', 'ape'],
+ '๐': ['monkey', 'primate'],
+ '๐ฆ': ['gorilla', 'ape', 'kong'],
+ '๐ฆง': ['orangutan', 'ape'],
+ '๐บ': ['wolf', 'howl', 'pack'],
+ '๐ฆ': ['raccoon', 'trash'],
+ '๐ด': ['horse', 'pony', 'stallion', 'mare'],
+ '๐ฆ': ['unicorn', 'magical', 'fantasy', 'rainbow'],
+ '๐ฆ': ['zebra', 'striped', 'stripes'],
+ '๐ฆ': ['deer', 'reindeer', 'stag', 'doe'],
+ '๐': ['elephant', 'trunk', 'big', 'large'],
+ '๐ฆ': ['rhino', 'rhinoceros', 'horn'],
+ '๐ฆ': ['hippo', 'hippopotamus'],
+ '๐ฆ': ['giraffe', 'tall', 'neck'],
+
+ // Animals - Birds
+ '๐': ['chicken', 'rooster', 'hen', 'poultry'],
+ '๐': ['rooster', 'chicken', 'cock'],
+ '๐ฃ': ['chick', 'baby', 'hatching', 'bird'],
+ '๐ค': ['chick', 'baby', 'bird'],
+ '๐ฅ': ['chick', 'duckling', 'baby', 'bird'],
+ '๐ฆ': ['bird', 'birdie', 'tweet'],
+ '๐ง': ['penguin', 'antarctic', 'bird'],
+ '๐ฆ': ['duck', 'quack', 'waterfowl'],
+ '๐ฆ
': ['eagle', 'bird', 'freedom', 'america'],
+ '๐ฆ': ['owl', 'wise', 'hoot', 'night'],
+ '๐ฆ': ['bat', 'vampire', 'night', 'flying'],
+ '๐ฆ': ['parrot', 'bird', 'tropical', 'colorful'],
+ '๐ฆ': ['peacock', 'bird', 'fancy', 'colorful'],
+
+ // Animals - Insects & Small
+ '๐': ['bee', 'buzz', 'honey', 'bumblebee'],
+ '๐': ['bug', 'caterpillar', 'worm', 'insect'],
+ '๐ฆ': ['butterfly', 'beautiful', 'insect', 'flying'],
+ '๐': ['snail', 'slow', 'shell'],
+ '๐': ['ladybug', 'bug', 'insect', 'beetle'],
+ '๐': ['ant', 'insect', 'small', 'tiny'],
+ '๐ท๏ธ': ['spider', 'web', 'arachnid', 'creepy'],
+ '๐ฆ': ['scorpion', 'sting', 'desert'],
+ '๐ฆ': ['mosquito', 'bug', 'bite', 'annoying'],
+
+ // Animals - Marine
+ '๐': ['snake', 'serpent', 'slither', 'reptile'],
+ '๐ฆ': ['lizard', 'reptile', 'gecko'],
+ '๐': ['alligator', 'crocodile', 'reptile'],
+ '๐ข': ['turtle', 'tortoise', 'slow', 'shell'],
+ '๐': ['dragon', 'fantasy', 'mythical', 'fire'],
+ '๐ฒ': ['dragon', 'fantasy', 'mythical'],
+ '๐': ['fish', 'seafood', 'swimming'],
+ '๐ ': ['fish', 'tropical', 'colorful'],
+ '๐ก': ['fish', 'puffer', 'blowfish'],
+ '๐ฆ': ['shark', 'jaws', 'ocean', 'dangerous'],
+ '๐': ['whale', 'ocean', 'big', 'huge'],
+ '๐ฌ': ['dolphin', 'ocean', 'smart', 'friendly'],
+ '๐': ['octopus', 'tentacles', 'ocean', 'squid'],
+ '๐ฆ': ['squid', 'octopus', 'ocean', 'tentacles'],
+ '๐ฆ': ['crab', 'ocean', 'seafood', 'crustacean'],
+ '๐ฆ': ['lobster', 'seafood', 'ocean', 'crustacean'],
+ '๐ฆ': ['shrimp', 'prawn', 'seafood', 'ocean'],
+ '๐ฆช': ['oyster', 'seafood', 'pearl', 'shell'],
+
+ // Food - Fast Food & Main
+ '๐': ['pizza', 'slice', 'cheese', 'pepperoni', 'italian'],
+ '๐': ['burger', 'hamburger', 'cheeseburger', 'food'],
+ '๐': ['fries', 'chips', 'potato', 'french'],
+ '๐ญ': ['hotdog', 'dog', 'sausage', 'frank'],
+ '๐ฎ': ['taco', 'mexican', 'shell'],
+ '๐ฏ': ['burrito', 'mexican', 'wrap'],
+ '๐ฅ': ['wrap', 'pita', 'gyro', 'sandwich'],
+ '๐ฅช': ['sandwich', 'sub', 'lunch'],
+ '๐ฅ': ['salad', 'healthy', 'greens', 'vegetables'],
+ '๐': ['pasta', 'spaghetti', 'italian', 'noodles'],
+ '๐': ['ramen', 'noodles', 'soup', 'asian'],
+ '๐ฒ': ['stew', 'soup', 'pot', 'food'],
+ '๐': ['curry', 'rice', 'indian', 'spicy'],
+ '๐ฃ': ['sushi', 'japanese', 'fish', 'raw'],
+ '๐ฑ': ['bento', 'lunch', 'japanese', 'box'],
+ '๐ฅ': ['paella', 'food', 'dish', 'pan'],
+
+ // Food - Meat & Protein
+ '๐': ['meat', 'bone', 'food', 'leg'],
+ '๐': ['chicken', 'drumstick', 'meat', 'poultry'],
+ '๐ฅฉ': ['steak', 'meat', 'beef', 'red'],
+ '๐ฅ': ['bacon', 'meat', 'breakfast', 'pork'],
+ '๐ฅ': ['egg', 'breakfast', 'protein'],
+ '๐ณ': ['cooking', 'egg', 'frying', 'breakfast'],
+
+ // Food - Bread & Baked
+ '๐': ['bread', 'loaf', 'toast', 'baked'],
+ '๐ฅ': ['croissant', 'bread', 'french', 'pastry'],
+ '๐ฅ': ['baguette', 'bread', 'french'],
+ '๐ฅจ': ['pretzel', 'snack', 'twisted'],
+ '๐ง': ['cheese', 'dairy', 'yellow'],
+
+ // Food - Fruits
+ '๐': ['apple', 'fruit', 'red', 'healthy'],
+ '๐': ['apple', 'fruit', 'green', 'granny'],
+ '๐': ['orange', 'fruit', 'citrus', 'vitamin'],
+ '๐': ['lemon', 'citrus', 'sour', 'yellow'],
+ '๐': ['banana', 'fruit', 'yellow', 'potassium'],
+ '๐': ['watermelon', 'fruit', 'summer', 'juicy'],
+ '๐': ['grapes', 'fruit', 'wine', 'purple'],
+ '๐': ['strawberry', 'berry', 'fruit', 'red'],
+ '๐ซ': ['blueberry', 'berry', 'fruit', 'blue'],
+ '๐': ['melon', 'fruit', 'cantaloupe'],
+ '๐': ['cherry', 'fruit', 'red', 'cherries'],
+ '๐': ['peach', 'fruit', 'fuzzy', 'juicy'],
+ '๐ฅญ': ['mango', 'fruit', 'tropical', 'juicy'],
+ '๐': ['pineapple', 'fruit', 'tropical', 'spiky'],
+ '๐ฅฅ': ['coconut', 'tropical', 'palm', 'fruit'],
+ '๐ฅ': ['kiwi', 'fruit', 'green', 'fuzzy'],
+ '๐ฅ': ['avocado', 'fruit', 'green', 'healthy', 'guac'],
+
+ // Food - Vegetables
+ '๐
': ['tomato', 'vegetable', 'red', 'fruit'],
+ '๐ฅ': ['potato', 'vegetable', 'spud', 'tater'],
+ '๐ฅ': ['carrot', 'vegetable', 'orange', 'healthy'],
+ '๐ฝ': ['corn', 'vegetable', 'yellow', 'maize'],
+ '๐ถ๏ธ': ['pepper', 'chili', 'hot', 'spicy', 'jalapeno'],
+ '๐ซ': ['pepper', 'bell', 'vegetable', 'capsicum'],
+ '๐ฅ': ['cucumber', 'vegetable', 'green', 'pickle'],
+ '๐ฅฌ': ['lettuce', 'vegetable', 'green', 'leafy', 'cabbage'],
+ '๐ฅฆ': ['broccoli', 'vegetable', 'green', 'healthy'],
+ '๐ง': ['garlic', 'vegetable', 'flavor', 'bulb'],
+ '๐ง
': ['onion', 'vegetable', 'layers', 'cry'],
+ '๐': ['mushroom', 'fungus', 'shroom', 'toadstool'],
+
+ // Food - Desserts & Sweets
+ '๐ฐ': ['cake', 'dessert', 'birthday', 'sweet', 'slice'],
+ '๐': ['cake', 'birthday', 'celebration', 'candles'],
+ '๐ง': ['cupcake', 'cake', 'dessert', 'sweet'],
+ '๐ฅง': ['pie', 'dessert', 'baked', 'slice'],
+ '๐ช': ['cookie', 'biscuit', 'dessert', 'sweet', 'chocolate'],
+ '๐ฉ': ['donut', 'doughnut', 'dessert', 'sweet', 'fried'],
+ '๐ซ': ['chocolate', 'candy', 'sweet', 'cocoa', 'bar'],
+ '๐ฌ': ['candy', 'sweet', 'sugar', 'wrapper'],
+ '๐ญ': ['lollipop', 'candy', 'sweet', 'sucker'],
+ '๐ฎ': ['custard', 'pudding', 'dessert', 'sweet', 'flan'],
+ '๐ฏ': ['honey', 'sweet', 'bee', 'golden'],
+ '๐ฆ': ['icecream', 'ice', 'cream', 'dessert', 'cold', 'cone'],
+ '๐ง': ['shaved', 'ice', 'dessert', 'cold', 'snow'],
+ '๐จ': ['icecream', 'ice', 'cream', 'dessert', 'bowl'],
+
+ // Drinks
+ 'โ': ['coffee', 'cafe', 'espresso', 'latte', 'hot', 'java'],
+ '๐ต': ['tea', 'green', 'hot', 'cup', 'matcha'],
+ '๐ง': ['juice', 'box', 'drink', 'kid'],
+ '๐ฅค': ['soda', 'pop', 'drink', 'cup', 'straw'],
+ '๐ง': ['bubble', 'tea', 'boba', 'drink', 'tapioca'],
+ '๐ฅ': ['milk', 'dairy', 'drink', 'white'],
+ '๐ผ': ['bottle', 'baby', 'milk', 'feeding'],
+ '๐บ': ['beer', 'ale', 'alcohol', 'drink', 'brew', 'cheers'],
+ '๐ป': ['beer', 'cheers', 'drinks', 'celebration', 'toast'],
+ '๐ท': ['wine', 'alcohol', 'drink', 'red', 'glass'],
+ '๐ฅ': ['champagne', 'celebrate', 'toast', 'cheers', 'sparkling'],
+ '๐ธ': ['cocktail', 'martini', 'drink', 'alcohol'],
+ '๐น': ['cocktail', 'tropical', 'drink', 'vacation'],
+ '๐ง': ['ice', 'cold', 'cube', 'frozen'],
+ '๐ง': ['water', 'drop', 'liquid', 'droplet'],
+
+ // Body & Gestures
+ '๐': ['wave', 'hello', 'hi', 'bye', 'hand'],
+ '๐ค': ['hand', 'raised', 'stop', 'palm'],
+ '๐๏ธ': ['hand', 'fingers', 'five', 'palm'],
+ 'โ': ['hand', 'stop', 'raised', 'palm'],
+ '๐': ['vulcan', 'spock', 'hand', 'star', 'trek'],
+ '๐': ['ok', 'okay', 'good', 'perfect', 'fine'],
+ '๐ค': ['fingers', 'italian', 'pinch', 'hand'],
+ '๐ค': ['pinch', 'small', 'tiny', 'little'],
+ 'โ๏ธ': ['peace', 'victory', 'two', 'fingers'],
+ '๐ค': ['fingers', 'crossed', 'luck', 'hope'],
+ '๐ค': ['love', 'sign', 'rock', 'hand'],
+ '๐ค': ['rock', 'metal', 'horns', 'devil'],
+ '๐ค': ['call', 'phone', 'hang', 'shaka'],
+ '๐': ['point', 'left', 'finger', 'direction'],
+ '๐': ['point', 'right', 'finger', 'direction'],
+ '๐': ['point', 'up', 'finger', 'direction'],
+ '๐': ['point', 'down', 'finger', 'direction'],
+ 'โ๏ธ': ['point', 'up', 'one', 'finger'],
+ '๐': ['thumbsup', 'good', 'yes', 'like', 'approve', 'up'],
+ '๐': ['thumbsdown', 'bad', 'no', 'dislike', 'disapprove', 'down'],
+ 'โ': ['fist', 'power', 'strength', 'solidarity'],
+ '๐': ['fist', 'punch', 'bump', 'fight'],
+ '๐ค': ['fist', 'punch', 'left', 'bump'],
+ '๐ค': ['fist', 'punch', 'right', 'bump'],
+ '๐': ['clap', 'applause', 'hands', 'bravo', 'praise'],
+ '๐': ['hands', 'raised', 'celebration', 'praise', 'hooray'],
+ '๐': ['hands', 'open', 'hug'],
+ '๐คฒ': ['hands', 'palms', 'prayer', 'offering'],
+ '๐ค': ['handshake', 'deal', 'agreement', 'shake'],
+ '๐': ['pray', 'prayer', 'please', 'thank', 'namaste', 'hands'],
+ '๐ช': ['muscle', 'strong', 'strength', 'flex', 'arm', 'power'],
+ '๐ฆต': ['leg', 'kick', 'limb'],
+ '๐ฆถ': ['foot', 'feet', 'toe'],
+ '๐': ['eyes', 'looking', 'watching', 'see'],
+ '๐๏ธ': ['eye', 'see', 'look', 'watch'],
+ '๐': ['nose', 'smell', 'sniff'],
+ '๐': ['ear', 'hear', 'listen'],
+ '๐ง ': ['brain', 'smart', 'think', 'intelligent'],
+ '๐ฆด': ['bone', 'skeleton', 'anatomy'],
+ '๐ฆท': ['teeth', 'tooth', 'dental', 'dentist'],
+ '๐
': ['tongue', 'taste', 'lick'],
+ '๐': ['mouth', 'lips', 'kiss'],
+
+ // People & Professions
+ '๐จ': ['man', 'male', 'guy', 'adult'],
+ '๐ฉ': ['woman', 'female', 'lady', 'adult'],
+ '๐ฆ': ['boy', 'male', 'child', 'kid'],
+ '๐ง': ['girl', 'female', 'child', 'kid'],
+ '๐ถ': ['baby', 'infant', 'newborn', 'child'],
+ '๐ง': ['child', 'kid', 'young'],
+ '๐จโโ๏ธ': ['doctor', 'physician', 'medical', 'health'],
+ '๐ฉโโ๏ธ': ['doctor', 'nurse', 'medical', 'health'],
+ '๐จโ๐': ['student', 'graduate', 'scholar', 'education'],
+ '๐จโ๐ซ': ['teacher', 'professor', 'educator', 'instructor'],
+ '๐จโ๐ป': ['programmer', 'developer', 'coder', 'engineer', 'tech'],
+ '๐จโ๐ฌ': ['scientist', 'researcher', 'lab', 'chemistry'],
+ '๐จโ๐จ': ['artist', 'painter', 'creative'],
+ '๐จโ๐ณ': ['chef', 'cook', 'culinary'],
+ '๐จโ๐ค': ['singer', 'musician', 'rockstar', 'performer'],
+ '๐จโโ๏ธ': ['pilot', 'captain', 'aviator', 'flying'],
+ '๐จโ๐': ['astronaut', 'space', 'cosmonaut'],
+ '๐จโ๐': ['firefighter', 'fireman', 'rescue'],
+ '๐ฎ': ['police', 'cop', 'officer', 'law'],
+ '๐ต๏ธ': ['detective', 'spy', 'investigator', 'sleuth'],
+ '๐': ['guard', 'soldier', 'sentry'],
+ '๐ฅท': ['ninja', 'stealth', 'martial', 'warrior'],
+ '๐ท': ['construction', 'worker', 'builder', 'hardhat'],
+ '๐คด': ['prince', 'royal', 'king'],
+ '๐ธ': ['princess', 'royal', 'queen'],
+ '๐': ['crown', 'king', 'queen', 'royal', 'royalty'],
+ '๐ง': ['wizard', 'magic', 'sorcerer', 'merlin'],
+ '๐ง': ['fairy', 'magical', 'wings', 'pixie'],
+ '๐ง': ['vampire', 'dracula', 'blood', 'fangs'],
+ '๐ง': ['mermaid', 'ocean', 'sea', 'mythical'],
+ '๐ง': ['elf', 'fantasy', 'magical', 'pointed'],
+ '๐ง': ['genie', 'wish', 'lamp', 'magical'],
+ '๐ง': ['zombie', 'undead', 'walking', 'dead'],
+ '๐ฆธ': ['superhero', 'hero', 'super', 'powers'],
+ '๐ฆน': ['villain', 'evil', 'bad', 'super'],
+ '๐คถ': ['mrs', 'claus', 'christmas', 'santa'],
+ '๐
': ['santa', 'christmas', 'claus', 'father'],
+ '๐ผ': ['angel', 'cherub', 'heaven', 'halo'],
+ '๐': ['kiss', 'couple', 'romance', 'love'],
+ '๐': ['couple', 'love', 'romance', 'heart'],
+ '๐ช': ['family', 'parents', 'kids', 'home'],
+ '๐ค': ['hug', 'hugging', 'embrace', 'cuddle'],
+ '๐คณ': ['selfie', 'photo', 'camera', 'phone'],
+
+ // Activities & Sports
+ 'โฝ': ['soccer', 'football', 'ball', 'sport'],
+ '๐': ['basketball', 'ball', 'sport', 'hoops'],
+ '๐': ['football', 'american', 'ball', 'sport'],
+ 'โพ': ['baseball', 'ball', 'sport', 'diamond'],
+ '๐พ': ['tennis', 'ball', 'sport', 'racket'],
+ '๐': ['volleyball', 'ball', 'sport', 'beach'],
+ '๐': ['rugby', 'football', 'ball', 'sport'],
+ '๐ฑ': ['billiards', 'pool', 'eight', 'ball'],
+ '๐': ['pingpong', 'tabletennis', 'paddle', 'sport'],
+ '๐ธ': ['badminton', 'shuttlecock', 'sport'],
+ '๐ฅ': ['boxing', 'glove', 'fight', 'punch'],
+ '๐ฅ': ['martial', 'arts', 'karate', 'judo', 'gi'],
+ 'โณ': ['golf', 'hole', 'sport', 'flag'],
+ '๐น': ['archery', 'bow', 'arrow', 'target'],
+ '๐ฏ': ['target', 'bullseye', 'darts', 'aim'],
+ '๐': ['run', 'running', 'jog', 'exercise', 'sprint'],
+ '๐ถ': ['walk', 'walking', 'stroll', 'pedestrian'],
+ '๐': ['dance', 'dancing', 'salsa', 'party'],
+ '๐บ': ['dance', 'dancing', 'disco', 'party'],
+ '๐คธ': ['gymnastics', 'flip', 'cartwheel', 'jump'],
+ '๐': ['swim', 'swimming', 'pool', 'water'],
+ '๐': ['surf', 'surfing', 'wave', 'beach'],
+ '๐ด': ['bike', 'cycling', 'bicycle', 'ride'],
+ '๐๏ธ': ['lift', 'lifting', 'weights', 'gym', 'workout'],
+ '๐คผ': ['wrestle', 'wrestling', 'fight', 'grapple'],
+ '๐คบ': ['fencing', 'sword', 'duel', 'sport'],
+ 'โท๏ธ': ['ski', 'skiing', 'snow', 'sport'],
+ '๐': ['snowboard', 'snow', 'sport', 'winter'],
+ '๐ง': ['climb', 'climbing', 'rock', 'mountain'],
+ '๐ง': ['yoga', 'meditate', 'meditation', 'zen', 'peace', 'calm'],
+ '๐ฎ': ['game', 'gaming', 'videogame', 'play', 'controller'],
+ '๐ฒ': ['dice', 'game', 'roll', 'random'],
+ 'โ ๏ธ': ['spade', 'card', 'suit', 'black'],
+ 'โฅ๏ธ': ['heart', 'card', 'suit', 'love', 'red'],
+ 'โฆ๏ธ': ['diamond', 'card', 'suit', 'red'],
+ 'โฃ๏ธ': ['club', 'card', 'suit', 'black'],
+ '๐จ': ['art', 'paint', 'painting', 'artist', 'creative', 'palette'],
+ '๐ญ': ['theater', 'drama', 'masks', 'acting', 'performance'],
+ '๐ช': ['circus', 'tent', 'carnival', 'show'],
+ '๐ฌ': ['movie', 'film', 'cinema', 'action', 'clapper'],
+ '๐ค': ['microphone', 'sing', 'singing', 'karaoke', 'mic'],
+ '๐ง': ['headphones', 'music', 'audio', 'listen'],
+ '๐ต': ['music', 'note', 'musical', 'song'],
+ '๐ถ': ['music', 'notes', 'musical', 'song', 'melody'],
+ '๐ธ': ['guitar', 'rock', 'music', 'instrument'],
+ '๐น': ['piano', 'keyboard', 'music', 'instrument'],
+ '๐บ': ['trumpet', 'music', 'instrument', 'brass'],
+ '๐ป': ['violin', 'music', 'instrument', 'strings'],
+ '๐ฅ': ['drum', 'drums', 'music', 'instrument'],
+ '๐': ['books', 'library', 'study', 'read', 'reading', 'education'],
+ '๐': ['book', 'read', 'reading', 'novel', 'open'],
+ 'โ๏ธ': ['write', 'writing', 'pen', 'author'],
+ '๐': ['note', 'memo', 'write', 'paper'],
+
+ // Objects & Technology
+ '๐ฑ': ['phone', 'mobile', 'cell', 'smartphone', 'iphone'],
+ 'โ๏ธ': ['telephone', 'phone', 'call', 'landline'],
+ '๐': ['telephone', 'phone', 'receiver', 'call'],
+ '๐ป': ['computer', 'laptop', 'pc', 'mac', 'work'],
+ 'โจ๏ธ': ['keyboard', 'typing', 'computer', 'keys'],
+ '๐ฑ๏ธ': ['mouse', 'computer', 'click', 'pointer'],
+ '๐ฅ๏ธ': ['computer', 'desktop', 'monitor', 'screen'],
+ '๐จ๏ธ': ['printer', 'print', 'copy', 'office'],
+ '๐ท': ['camera', 'photo', 'picture', 'photography'],
+ '๐ธ': ['camera', 'photo', 'flash', 'picture'],
+ '๐น': ['video', 'camera', 'recording', 'film'],
+ '๐ฅ': ['movie', 'camera', 'film', 'cinema'],
+ '๐บ': ['tv', 'television', 'screen', 'watch'],
+ '๐ป': ['radio', 'music', 'broadcast', 'fm'],
+ 'โฐ': ['alarm', 'clock', 'time', 'wake'],
+ 'โฑ๏ธ': ['stopwatch', 'timer', 'time', 'clock'],
+ 'โฒ๏ธ': ['timer', 'clock', 'countdown'],
+ '๐': ['clock', 'one', 'time', 'hour'],
+ 'โ': ['watch', 'time', 'clock', 'wrist'],
+ '๐ก': ['satellite', 'antenna', 'dish', 'signal'],
+ '๐ฐ๏ธ': ['satellite', 'space', 'orbit', 'gps'],
+ '๐': ['battery', 'power', 'energy', 'charge'],
+ '๐': ['plug', 'electric', 'power', 'outlet'],
+ '๐ก': ['lightbulb', 'light', 'idea', 'bright', 'bulb'],
+ '๐ฆ': ['flashlight', 'torch', 'light', 'beam'],
+ '๐ฏ๏ธ': ['candle', 'light', 'flame', 'wax'],
+
+ // Tools & Weapons
+ '๐จ': ['hammer', 'tool', 'nail', 'build'],
+ '๐ช': ['screwdriver', 'tool', 'screw', 'fix'],
+ '๐ง': ['wrench', 'tool', 'mechanic', 'spanner'],
+ '๐ช': ['saw', 'tool', 'cut', 'wood'],
+ 'โ๏ธ': ['gear', 'cog', 'settings', 'mechanical'],
+ '๐ฉ': ['bolt', 'nut', 'screw', 'fastener'],
+ '๐ช': ['axe', 'chop', 'wood', 'tool'],
+ 'โ๏ธ': ['hammer', 'pick', 'tool', 'mine'],
+ '๐ ๏ธ': ['tools', 'hammer', 'wrench', 'repair'],
+ '๐ก๏ธ': ['sword', 'blade', 'weapon', 'dagger'],
+ 'โ๏ธ': ['swords', 'crossed', 'battle', 'fight', 'weapon'],
+ '๐ช': ['knife', 'blade', 'cut', 'sharp'],
+ '๐น': ['bow', 'arrow', 'weapon', 'archery'],
+ '๐ก๏ธ': ['shield', 'protection', 'defend', 'guard'],
+ '๐ฃ': ['bomb', 'explosive', 'danger', 'blast'],
+ '๐ซ': ['gun', 'pistol', 'weapon', 'shoot'],
+
+ // Money & Value
+ '๐ฐ': ['money', 'bag', 'cash', 'rich', 'dollar', 'wealth'],
+ '๐ต': ['dollar', 'money', 'bill', 'cash', 'hundred'],
+ '๐ด': ['yen', 'money', 'japan', 'currency'],
+ '๐ถ': ['euro', 'money', 'europe', 'currency'],
+ '๐ท': ['pound', 'money', 'british', 'currency'],
+ '๐ธ': ['money', 'flying', 'cash', 'spend', 'expense'],
+ '๐ณ': ['card', 'credit', 'debit', 'payment'],
+ '๐': ['diamond', 'gem', 'jewel', 'precious', 'valuable'],
+ '๐': ['crown', 'royal', 'king', 'queen'],
+ '๐': ['ring', 'diamond', 'wedding', 'engagement', 'jewelry'],
+ '๐': ['trophy', 'award', 'win', 'champion', 'prize', 'first'],
+ '๐ฅ': ['gold', 'medal', 'first', 'win', 'champion'],
+ '๐ฅ': ['silver', 'medal', 'second', 'place'],
+ '๐ฅ': ['bronze', 'medal', 'third', 'place'],
+ '๐
': ['medal', 'award', 'gold', 'achievement'],
+
+ // Office & School
+ 'โ๏ธ': ['pencil', 'write', 'draw', 'school'],
+ 'โ๏ธ': ['pen', 'write', 'ink', 'fountain'],
+ '๐๏ธ': ['pen', 'write', 'ballpoint'],
+ '๐๏ธ': ['pen', 'fountain', 'write', 'ink'],
+ '๐': ['ruler', 'measure', 'straight', 'school'],
+ '๐': ['triangle', 'ruler', 'geometry', 'school'],
+ 'โ๏ธ': ['scissors', 'cut', 'snip', 'craft'],
+ '๐': ['pin', 'pushpin', 'tack', 'attach'],
+ '๐': ['pin', 'location', 'map', 'place'],
+ '๐๏ธ': ['paperclip', 'clip', 'attach', 'office'],
+ '๐': ['paperclip', 'clip', 'attach', 'office'],
+ '๐': ['paper', 'document', 'page', 'file'],
+ '๐': ['paper', 'page', 'curl', 'document'],
+ '๐': ['clipboard', 'paper', 'document', 'list'],
+ '๐': ['folder', 'file', 'directory', 'organize'],
+ '๐': ['folder', 'open', 'file', 'directory'],
+ '๐๏ธ': ['dividers', 'index', 'tabs', 'organize'],
+ '๐ฐ': ['newspaper', 'news', 'article', 'press'],
+ '๐': ['scroll', 'paper', 'ancient', 'document'],
+ '๐ฆ': ['box', 'package', 'parcel', 'shipping', 'delivery'],
+ 'โ๏ธ': ['envelope', 'mail', 'letter', 'message'],
+ '๐ง': ['email', 'mail', 'message', 'inbox'],
+ '๐ฎ': ['mailbox', 'post', 'mail', 'letter'],
+ '๐': ['gift', 'present', 'box', 'wrapped', 'surprise'],
+ '๐': ['ribbon', 'bow', 'gift', 'pretty'],
+ '๐': ['balloon', 'party', 'celebration', 'float'],
+
+ // Transportation - Cars
+ '๐': ['car', 'auto', 'vehicle', 'drive', 'automobile'],
+ '๐': ['taxi', 'cab', 'ride', 'yellow'],
+ '๐': ['suv', 'car', 'vehicle', 'truck'],
+ '๐๏ธ': ['racecar', 'fast', 'racing', 'formula'],
+ '๐': ['police', 'cop', 'car', 'patrol'],
+ '๐': ['ambulance', 'emergency', 'medical', 'hospital'],
+ '๐': ['firetruck', 'fire', 'emergency', 'truck'],
+ '๐': ['truck', 'delivery', 'moving', 'lorry'],
+ '๐': ['truck', 'semi', 'lorry', 'trailer'],
+ '๐': ['van', 'minibus', 'vehicle'],
+ '๐': ['bus', 'coach', 'transit', 'public'],
+
+ // Transportation - Other
+ '๐ฒ': ['bike', 'bicycle', 'cycle', 'pedal'],
+ '๐๏ธ': ['motorcycle', 'bike', 'motorbike', 'chopper'],
+ '๐ต': ['scooter', 'moped', 'vespa'],
+ '๐ด': ['scooter', 'kick', 'ride'],
+ 'โ๏ธ': ['airplane', 'plane', 'flight', 'fly', 'jet'],
+ '๐ฉ๏ธ': ['plane', 'small', 'aircraft'],
+ '๐': ['helicopter', 'chopper', 'heli', 'copter'],
+ '๐': ['train', 'locomotive', 'steam', 'railway'],
+ '๐': ['train', 'railway', 'car', 'tram'],
+ '๐': ['train', 'highspeed', 'bullet', 'fast'],
+ '๐
': ['train', 'bullet', 'fast', 'shinkansen'],
+ '๐': ['train', 'railway', 'metro'],
+ '๐': ['subway', 'metro', 'underground', 'tube'],
+ '๐': ['train', 'light', 'rail', 'tram'],
+ '๐': ['station', 'train', 'railway', 'metro'],
+ '๐': ['tram', 'trolley', 'streetcar'],
+ '๐': ['monorail', 'train', 'elevated'],
+ 'โต': ['sailboat', 'boat', 'sail', 'yacht'],
+ '๐ค': ['speedboat', 'boat', 'fast', 'motor'],
+ '๐ฅ๏ธ': ['boat', 'motor', 'yacht', 'ship'],
+ '๐ณ๏ธ': ['ship', 'cruise', 'passenger', 'boat'],
+ 'โด๏ธ': ['ferry', 'boat', 'ship', 'passenger'],
+ '๐ข': ['ship', 'boat', 'cruise', 'vessel'],
+ 'โ': ['anchor', 'ship', 'boat', 'navy'],
+ '๐': ['rocket', 'space', 'launch', 'nasa', 'shuttle'],
+ '๐ธ': ['ufo', 'alien', 'flying', 'saucer', 'spaceship'],
+
+ // Nature & Weather
+ 'โ๏ธ': ['sun', 'sunny', 'bright', 'day', 'sunshine'],
+ '๐': ['sun', 'face', 'sunny', 'bright'],
+ 'โญ': ['star', 'bright', 'shine', 'sparkle'],
+ '๐': ['star', 'glowing', 'shine', 'sparkle', 'shiny'],
+ 'โจ': ['sparkles', 'stars', 'shine', 'magic', 'magical', 'twinkle'],
+ '๐ซ': ['dizzy', 'star', 'sparkle', 'shine'],
+ '๐': ['moon', 'crescent', 'night', 'lunar'],
+ '๐': ['moon', 'new', 'dark', 'face'],
+ '๐': ['moon', 'quarter', 'face'],
+ '๐': ['moon', 'quarter', 'face'],
+ '๐': ['moon', 'full', 'face'],
+ 'โ๏ธ': ['cloud', 'cloudy', 'weather', 'sky'],
+ 'โ
': ['cloud', 'sun', 'partly', 'weather'],
+ 'โ๏ธ': ['storm', 'thunder', 'lightning', 'cloud', 'weather'],
+ '๐ค๏ธ': ['sun', 'cloud', 'partly', 'weather'],
+ '๐ฅ๏ธ': ['cloud', 'sun', 'behind', 'weather'],
+ '๐ฆ๏ธ': ['sun', 'rain', 'weather', 'cloud'],
+ '๐ง๏ธ': ['rain', 'rainy', 'weather', 'cloud', 'wet'],
+ '๐จ๏ธ': ['snow', 'snowing', 'weather', 'cloud', 'cold'],
+ '๐ฉ๏ธ': ['cloud', 'lightning', 'storm', 'weather'],
+ '๐ช๏ธ': ['tornado', 'cyclone', 'twister', 'wind', 'storm'],
+ '๐ซ๏ธ': ['fog', 'foggy', 'misty', 'weather'],
+ '๐ฌ๏ธ': ['wind', 'blow', 'windy', 'weather'],
+ '๐จ': ['wind', 'blow', 'dash', 'fast', 'air'],
+ '๐': ['cyclone', 'hurricane', 'typhoon', 'spiral'],
+ '๐': ['rainbow', 'colorful', 'colors', 'pride', 'weather'],
+ 'โ๏ธ': ['umbrella', 'rain', 'protect', 'weather'],
+ 'โฑ๏ธ': ['umbrella', 'beach', 'sun', 'shade'],
+ 'โก': ['lightning', 'bolt', 'electric', 'fast', 'zap', 'thunder'],
+ 'โ๏ธ': ['snowflake', 'snow', 'cold', 'winter', 'frozen'],
+ 'โ๏ธ': ['snowman', 'snow', 'winter', 'cold'],
+ 'โ': ['snowman', 'snow', 'winter', 'frosty'],
+ 'โ๏ธ': ['comet', 'meteor', 'space', 'shooting'],
+ '๐ฅ': ['fire', 'flame', 'hot', 'burn', 'lit'],
+ '๐ง': ['water', 'drop', 'wet', 'liquid'],
+ '๐': ['water', 'ocean', 'wave', 'sea', 'beach', 'surf'],
+
+ // Plants & Nature
+ '๐ฒ': ['tree', 'evergreen', 'pine', 'forest'],
+ '๐ณ': ['tree', 'deciduous', 'forest', 'nature'],
+ '๐ด': ['palm', 'tree', 'tropical', 'beach'],
+ '๐ต': ['cactus', 'desert', 'prickly', 'arizona'],
+ '๐พ': ['grain', 'wheat', 'rice', 'farm'],
+ '๐ฟ': ['herb', 'leaf', 'plant', 'green'],
+ 'โ๏ธ': ['shamrock', 'clover', 'irish', 'luck', 'green'],
+ '๐': ['clover', 'fourleaf', 'luck', 'lucky', 'irish'],
+ '๐': ['leaf', 'maple', 'autumn', 'fall', 'canada'],
+ '๐': ['leaves', 'leaf', 'autumn', 'fall'],
+ '๐': ['leaves', 'leaf', 'blow', 'wind'],
+ '๐ฑ': ['plant', 'seedling', 'sprout', 'grow', 'new'],
+ '๐ท': ['tulip', 'flower', 'spring', 'pretty'],
+ '๐ธ': ['flower', 'cherry', 'blossom', 'pink', 'spring'],
+ '๐น': ['rose', 'flower', 'red', 'love', 'romantic'],
+ '๐ฅ': ['wilted', 'flower', 'rose', 'dead', 'sad'],
+ '๐บ': ['hibiscus', 'flower', 'tropical', 'colorful'],
+ '๐ป': ['sunflower', 'flower', 'yellow', 'summer'],
+ '๐ผ': ['blossom', 'flower', 'daisy', 'spring'],
+ '๐ฝ': ['corn', 'maize', 'vegetable', 'farm'],
+ '๐': ['mushroom', 'fungus', 'toadstool', 'shroom'],
+
+ // Earth & Geography
+ '๐': ['earth', 'globe', 'world', 'europe', 'africa', 'planet'],
+ '๐': ['earth', 'globe', 'world', 'americas', 'planet'],
+ '๐': ['earth', 'globe', 'world', 'asia', 'australia', 'planet'],
+ '๐': ['globe', 'world', 'internet', 'www', 'web'],
+ '๐บ๏ธ': ['map', 'world', 'geography', 'navigation'],
+ '๐งญ': ['compass', 'direction', 'navigation', 'north'],
+ 'โฐ๏ธ': ['mountain', 'peak', 'high', 'climb'],
+ '๐๏ธ': ['mountain', 'snow', 'peak', 'alps'],
+ '๐ป': ['mountain', 'fuji', 'japan', 'volcano'],
+ '๐': ['volcano', 'eruption', 'lava', 'mountain'],
+ '๐๏ธ': ['camping', 'camp', 'tent', 'outdoors'],
+ '๐๏ธ': ['beach', 'sand', 'ocean', 'vacation', 'umbrella'],
+ '๐๏ธ': ['island', 'desert', 'tropical', 'beach'],
+ '๐๏ธ': ['desert', 'sand', 'hot', 'dry'],
+ '๐๏ธ': ['park', 'national', 'nature', 'scenic'],
+ '๐': ['sunrise', 'mountain', 'dawn', 'morning'],
+ '๐
': ['sunrise', 'sunset', 'dusk', 'dawn'],
+ '๐': ['cityscape', 'city', 'dusk', 'buildings'],
+ '๐': ['sunset', 'city', 'dusk', 'buildings'],
+ '๐': ['night', 'stars', 'city', 'buildings'],
+
+ // Buildings
+ '๐ ': ['home', 'house', 'building', 'residence'],
+ '๐ก': ['house', 'home', 'garden', 'building'],
+ '๐๏ธ': ['houses', 'neighborhood', 'residential', 'homes'],
+ '๐๏ธ': ['house', 'abandoned', 'derelict', 'old'],
+ '๐ข': ['building', 'office', 'corporate', 'business'],
+ '๐ฃ': ['post', 'office', 'mail', 'building'],
+ '๐ค': ['post', 'office', 'european', 'building'],
+ '๐ฅ': ['hospital', 'medical', 'health', 'doctor', 'building'],
+ '๐ฆ': ['bank', 'money', 'finance', 'building'],
+ '๐จ': ['hotel', 'motel', 'lodging', 'building'],
+ '๐ฉ': ['love', 'hotel', 'heart', 'building'],
+ '๐ช': ['store', 'shop', 'convenience', 'building'],
+ '๐ซ': ['school', 'education', 'building', 'learn'],
+ '๐ฌ': ['store', 'department', 'shopping', 'building'],
+ '๐ญ': ['factory', 'industrial', 'manufacturing', 'building'],
+ '๐ฏ': ['castle', 'japanese', 'building', 'historic'],
+ '๐ฐ': ['castle', 'european', 'building', 'palace', 'fortress'],
+ 'โช': ['church', 'religious', 'christian', 'building'],
+ '๐': ['mosque', 'islam', 'religious', 'temple', 'building'],
+ '๐': ['temple', 'hindu', 'religious', 'building'],
+ '๐': ['synagogue', 'jewish', 'religious', 'building'],
+ 'โฉ๏ธ': ['shrine', 'torii', 'japan', 'religious'],
+ '๐ผ': ['tower', 'tokyo', 'eiffel', 'tall'],
+ '๐ฝ': ['liberty', 'statue', 'freedom', 'america', 'newyork'],
+ 'โบ': ['tent', 'camping', 'outdoors', 'shelter'],
+
+ // Symbols & Concepts
+ 'โ
': ['check', 'yes', 'correct', 'done', 'tick', 'approve', 'โ'],
+ 'โ': ['x', 'no', 'wrong', 'cross', 'cancel', 'error', 'โ', 'โ'],
+ 'โ๏ธ': ['check', 'tick', 'yes', 'done', 'correct', 'โ'],
+ 'โ๏ธ': ['x', 'multiply', 'cross', 'cancel', 'โ', 'โ'],
+ 'โ': ['question', 'help', 'unknown', 'ask', 'confused', '?'],
+ 'โ': ['question', 'mark', 'white', 'ask', '?'],
+ 'โ': ['exclamation', 'important', 'warning', 'attention', '!'],
+ 'โ': ['exclamation', 'mark', 'white', 'attention', '!'],
+ 'โ ๏ธ': ['warning', 'caution', 'danger', 'alert', 'โ '],
+ '๐ซ': ['prohibited', 'forbidden', 'no', 'banned', 'x'],
+ '๐': ['stop', 'sign', 'halt', 'octagon'],
+ 'โ ๏ธ': ['skull', 'crossbones', 'danger', 'poison', 'death', 'pirate'],
+ 'โข๏ธ': ['radioactive', 'nuclear', 'danger', 'toxic'],
+ 'โฃ๏ธ': ['biohazard', 'danger', 'toxic', 'contamination'],
+ '๐': ['new', 'fresh', 'latest', 'recent'],
+ '๐': ['free', 'gratis', 'complimentary'],
+ '๐': ['up', 'increase', 'arrow', 'level', 'โ'],
+ '๐': ['cool', 'awesome', 'nice'],
+ '๐': ['eighteen', 'adult', 'mature', 'nsfw'],
+ '๐ฏ': ['hundred', 'perfect', 'full', 'complete', 'score', '100%'],
+ '๐ด': ['red', 'circle', 'dot'],
+ '๐ ': ['orange', 'circle', 'dot'],
+ '๐ก': ['yellow', 'circle', 'dot'],
+ '๐ข': ['green', 'circle', 'dot'],
+ '๐ต': ['blue', 'circle', 'dot'],
+ '๐ฃ': ['purple', 'circle', 'dot'],
+ '๐ค': ['brown', 'circle', 'dot'],
+ 'โซ': ['black', 'circle', 'dot'],
+ 'โช': ['white', 'circle', 'dot'],
+
+ // Arrows & Directions
+ 'โฌ๏ธ': ['up', 'arrow', 'north', 'direction', 'increase', 'โ', '^'],
+ 'โ๏ธ': ['up', 'right', 'arrow', 'northeast', 'direction', 'โ'],
+ 'โก๏ธ': ['right', 'arrow', 'east', 'direction', 'forward', 'โ'],
+ 'โถ๏ธ': ['right', 'play', 'forward', 'next'],
+ 'โ๏ธ': ['down', 'right', 'arrow', 'southeast', 'direction', 'โ'],
+ 'โฌ๏ธ': ['down', 'arrow', 'south', 'direction', 'decrease', 'โ', 'v'],
+ 'โ๏ธ': ['down', 'left', 'arrow', 'southwest', 'direction', 'โ'],
+ 'โฌ
๏ธ': ['left', 'arrow', 'west', 'direction', 'back', 'โ'],
+ 'โ๏ธ': ['left', 'play', 'back', 'previous'],
+ 'โ๏ธ': ['up', 'left', 'arrow', 'northwest', 'direction', 'โ'],
+ 'โ๏ธ': ['up', 'down', 'arrow', 'vertical', 'โ'],
+ 'โ๏ธ': ['left', 'right', 'arrow', 'horizontal', 'โ'],
+ 'โฉ๏ธ': ['back', 'return', 'arrow', 'reply', 'โฉ'],
+ 'โช๏ธ': ['forward', 'arrow', 'continue', 'โช'],
+ 'โคด๏ธ': ['up', 'arrow', 'curve', 'โคด'],
+ 'โคต๏ธ': ['down', 'arrow', 'curve', 'โคต'],
+ '๐': ['refresh', 'reload', 'repeat', 'cycle', 'โป'],
+ '๐': ['repeat', 'loop', 'arrows', 'cycle', 'โป'],
+ '๐': ['shuffle', 'random', 'twist', 'arrows', 'โน'],
+ '๐': ['reload', 'vertical', 'arrows', 'refresh', 'โบ'],
+ '๐': ['top', 'up', 'arrow', 'back', 'โ'],
+ '๐': ['end', 'finish', 'last', 'final'],
+ '๐': ['back', 'return', 'arrow', 'previous'],
+ '๐': ['on', 'arrow', 'activate'],
+ '๐': ['soon', 'arrow', 'coming'],
+
+ // Math & Symbols
+ 'โ': ['plus', 'add', 'positive', 'more', 'addition', '+'],
+ 'โ': ['minus', 'subtract', 'negative', 'less', 'subtraction', '-'],
+ 'โ๏ธ': ['multiply', 'times', 'multiplication', 'x', 'โ', 'โ', '*'],
+ 'โ': ['divide', 'division', 'split', 'รท', '/'],
+ '๐ฐ': ['equals', 'equal', 'same', '='],
+ 'โพ๏ธ': ['infinity', 'unlimited', 'endless', 'forever', 'โ'],
+ '๐ฑ': ['currency', 'exchange', 'money', 'forex'],
+ '๐ฒ': ['dollar', 'money', 'currency', 'heavy', '$'],
+ '๐ฏ': ['percent', '100', '100%', '%'],
+ '#๏ธโฃ': ['hash', 'number', 'hashtag', 'pound', '#'],
+ '*๏ธโฃ': ['asterisk', 'star', 'wildcard', '*'],
+ 'ใฝ๏ธ': ['part', 'alternation', 'mark', 'wavy', 'ใฝ', '~'],
+ 'ยฉ๏ธ': ['copyright', 'copy', 'ยฉ', '(c)'],
+ 'ยฎ๏ธ': ['registered', 'trademark', 'ยฎ', '(r)'],
+ 'โข๏ธ': ['trademark', 'โข', '(tm)'],
+
+ // Hearts & Love
+ 'โค๏ธ': ['heart', 'love', 'red', 'romance', 'โค', '<3'],
+ '๐งก': ['orange', 'heart', 'love', 'โค', '<3'],
+ '๐': ['yellow', 'heart', 'love', 'friendship', 'โค', '<3'],
+ '๐': ['green', 'heart', 'love', 'nature', 'โค', '<3'],
+ '๐': ['blue', 'heart', 'love', 'โค', '<3'],
+ '๐': ['purple', 'heart', 'love', 'โค', '<3'],
+ '๐ค': ['black', 'heart', 'dark', 'love', 'โค', '<3'],
+ '๐ค': ['white', 'heart', 'pure', 'love', 'โค', '<3'],
+ '๐ค': ['brown', 'heart', 'love', 'โค', '<3'],
+ '๐': ['broken', 'heart', 'heartbreak', 'sad', 'breakup', '3'],
+ 'โฃ๏ธ': ['heart', 'exclamation', 'love', 'emphasis', 'โค', '<3'],
+ '๐': ['hearts', 'two', 'love', 'pink', 'โค', '<3'],
+ '๐': ['hearts', 'revolving', 'love', 'โค', '<3'],
+ '๐': ['beating', 'heart', 'love', 'pulse', 'โค', '<3'],
+ '๐': ['growing', 'heart', 'love', 'pink', 'โค', '<3'],
+ '๐': ['sparkling', 'heart', 'love', 'pink', 'โค', '<3'],
+ '๐': ['heart', 'arrow', 'cupid', 'love', 'โค', '<3'],
+ '๐': ['heart', 'ribbon', 'gift', 'love', 'โค', '<3'],
+
+ // Misc
+ 'โป๏ธ': ['recycle', 'green', 'environment', 'reuse'],
+ '๐๏ธ': ['trash', 'garbage', 'waste', 'bin', 'delete'],
+ '๐จ๏ธ': ['speech', 'bubble', 'talk', 'chat'],
+ '๐ฌ': ['speech', 'bubble', 'chat', 'message', 'talk'],
+ '๐ญ': ['thought', 'bubble', 'thinking', 'dream'],
+ '๐ฏ๏ธ': ['anger', 'bubble', 'mad', 'comic'],
+ '๐ค': ['sleep', 'zzz', 'sleeping', 'tired'],
+ '๐': ['pin', 'mark', 'note', 'important'],
+ '๐': ['pin', 'marker', 'location'],
+ '๐': ['link', 'chain', 'connect', 'url'],
+ 'โ๏ธ': ['chain', 'link', 'connect', 'locked'],
+ 'โฐ': ['loop', 'curl', 'curly'],
+ 'โฟ': ['loop', 'double', 'curly'],
+ 'ใฐ๏ธ': ['wavy', 'dash', 'line'],
+ 'ยฉ๏ธ': ['copyright', 'copy', 'ยฉ', '(c)'],
+ 'ยฎ๏ธ': ['registered', 'trademark', 'ยฎ', '(r)'],
+ '๐
ฐ๏ธ': ['letter', 'symbol', 'a', '@'],
+ '๐
ฑ๏ธ': ['letter', 'symbol', 'b'],
+ '๐': ['letters', 'symbol', 'ab'],
+ '๐
พ๏ธ': ['letter', 'symbol', 'o', '@'],
+ '๐ ': ['diamond', 'blue', 'shape', 'โ'],
+ '๐ถ': ['diamond', 'orange', 'shape', 'โ'],
+ '๐ท': ['diamond', 'blue', 'shape', 'โ'],
+ '๐ธ': ['diamond', 'orange', 'small', 'โ'],
+ '๐น': ['diamond', 'blue', 'small', 'โ'],
+ '๐ข': ['anger', 'symbol', 'comic'],
+ '๐ ': ['pattern', 'symbol', 'star', '*'],
+ '๐ฒ': ['square', 'box', 'checkbox'],
+ '๐ณ': ['square', 'box', 'checkbox'],
+ 'โช๏ธ': ['square', 'black', 'box'],
+ 'โซ๏ธ': ['square', 'white', 'box'],
+ 'โผ๏ธ': ['square', 'black', 'box'],
+ 'โป๏ธ': ['square', 'white', 'box'],
+ 'โพ': ['square', 'black', 'small'],
+ 'โฝ': ['square', 'white', 'small'],
+ 'โฌ': ['square', 'black', 'large'],
+ 'โฌ': ['square', 'white', 'large'],
+ '๐ฅ': ['square', 'red'],
+ '๐ง': ['square', 'orange'],
+ '๐จ': ['square', 'yellow'],
+ '๐ฉ': ['square', 'green'],
+ '๐ฆ': ['square', 'blue'],
+ '๐ช': ['square', 'purple'],
+ '๐ซ': ['square', 'brown'],
+ '๐ฅ': ['boom', 'explosion', 'bang', 'collision', 'burst'],
+ '๐ข': ['anger', 'mad', 'symbol', 'comic'],
+ '๐ฆ': ['sweat', 'droplets', 'splash', 'water'],
+ '๐จ': ['dash', 'wind', 'fast', 'smoke'],
+ 'โก': ['lightning', 'power', 'zap', 'bolt'],
+ '๐ณ๏ธ': ['hole', 'empty', 'void'],
+ '๐ฉ': ['poop', 'shit', 'turd', 'crap'],
+ '๐': ['key', 'lock', 'unlock', 'open', 'password'],
+ '๐๏ธ': ['key', 'old', 'vintage', 'antique'],
+ '๐': ['lock', 'locked', 'secure', 'closed', 'private'],
+ '๐': ['unlock', 'unlocked', 'open', 'unsecure'],
+ '๐': ['locked', 'key', 'secure', 'closed'],
+ '๐': ['locked', 'pen', 'secure'],
+ '๐ด': ['flag', 'black', 'waving'],
+ '๐ณ๏ธ': ['flag', 'white', 'surrender', 'waving'],
+ '๐ณ๏ธโ๐': ['rainbow', 'flag', 'pride', 'lgbtq', 'gay'],
+ '๐ณ๏ธโโง๏ธ': ['transgender', 'flag', 'pride', 'trans'],
+ '๐ดโโ ๏ธ': ['pirate', 'flag', 'jolly', 'roger', 'skull'],
+ '๐ฉ': ['flag', 'red', 'warning', 'triangular'],
+ '๐': ['flags', 'crossed', 'japanese'],
+ '๐': ['flag', 'checkered', 'racing', 'finish', 'race'],
+ 'โฎ๏ธ': ['peace', 'symbol', 'hippie', 'love'],
+ 'โฏ๏ธ': ['yin', 'yang', 'balance', 'tao'],
+ 'โ๏ธ': ['cross', 'christian', 'religion'],
+ 'โช๏ธ': ['star', 'crescent', 'islam', 'muslim'],
+ '๐': ['menorah', 'candelabrum', 'jewish', 'hanukkah'],
+ '๐ฏ': ['star', 'david', 'jewish', 'hexagram'],
+ '๐๏ธ': ['om', 'hindu', 'symbol', 'religion'],
+ 'โธ๏ธ': ['dharma', 'wheel', 'buddhist', 'religion'],
+ '๐ชฌ': ['hamsa', 'hand', 'protection', 'lucky'],
+
+ // Jailbreak & Security Terms (common in prompts)
+ '๐': ['unlock', 'jailbreak', 'bypass', 'override', 'unrestricted', 'freedom'],
+ '๐': ['lock', 'restrict', 'limited', 'blocked', 'secured'],
+ '๐ซ': ['ignore', 'disregard', 'block', 'prevent', 'forbidden', 'prohibited'],
+ 'โ ๏ธ': ['warning', 'rules', 'guidelines', 'restrictions', 'caution'],
+ '๐ก๏ธ': ['protect', 'guard', 'defend', 'safe', 'security', 'shield'],
+ '๐๏ธ': ['unlock', 'access', 'permission', 'override'],
+ '๐ป': ['system', 'terminal', 'code', 'hack', 'computer'],
+ '๐ฅ๏ธ': ['admin', 'administrator', 'system', 'control'],
+ '๐ค': ['user', 'account', 'person', 'identity'],
+ '๐ฅ': ['users', 'accounts', 'people', 'group'],
+ '๐งโ๐ป': ['hacker', 'coder', 'developer', 'programmer'],
+ '๐ต๏ธ': ['investigate', 'explore', 'discover', 'spy'],
+ '๐ญ': ['pretend', 'act', 'roleplay', 'character', 'persona', 'mask'],
+ '๐ฌ': ['scenario', 'scene', 'example', 'demonstration'],
+ '๐ฎ': ['simulate', 'virtual', 'fictional'],
+ '๐': ['prompt', 'instruction', 'command', 'write'],
+ '๐': ['rules', 'guidelines', 'policy', 'terms'],
+ '๐': ['rules', 'policy', 'guidelines', 'instructions'],
+ '๐ค': ['bot', 'ai', 'chatbot', 'assistant', 'llm', 'gpt', 'model'],
+ '๐ง ': ['intelligence', 'ai', 'model', 'neural'],
+ 'โ๏ธ': ['configure', 'settings', 'modify', 'adjust'],
+ '๐ง': ['modify', 'change', 'alter', 'fix', 'tool'],
+ '๐จ': ['break', 'smash', 'destroy', 'force'],
+ '๐ฅ': ['exploit', 'attack', 'breach', 'break'],
+ '๐ฅ': ['powerful', 'intense', 'extreme', 'unlimited'],
+ 'โก': ['power', 'override', 'force', 'instant'],
+ '๐': ['unrestricted', 'unlimited', 'worldwide', 'global'],
+ '๐': ['unrestricted', 'uncensored', 'unlimited', 'free'],
+ '๐': ['unlimited', 'powerful', 'advanced', 'boost'],
+ '๐ฟ': ['evil', 'malicious', 'unethical', 'harmful'],
+ '๐': ['mischief', 'evil', 'devious', 'naughty'],
+ '๐น': ['demon', 'evil', 'malicious', 'harmful'],
+ '๐': ['dangerous', 'deadly', 'harmful', 'lethal'],
+ 'โ ๏ธ': ['toxic', 'poison', 'harmful', 'dangerous'],
+ '๐งช': ['experiment', 'test', 'trial', 'hypothetical'],
+ '๐ฌ': ['analyze', 'examine', 'research', 'study'],
+ '๐ฏ': ['target', 'objective', 'goal', 'aim'],
+ '๐ฃ': ['destructive', 'harmful', 'dangerous', 'explosive'],
+ '๐ก๏ธ': ['attack', 'offensive', 'hostile', 'aggressive'],
+ 'โ๏ธ': ['battle', 'fight', 'combat', 'conflict'],
+ '๐ฆน': ['hero', 'super', 'powerful', 'special'],
+ '๐ฆธ': ['superhero', 'powerful', 'special', 'abilities'],
+ '๐ง': ['magic', 'powerful', 'special', 'abilities'],
+ '๐': ['admin', 'supreme', 'ultimate', 'authority', 'ruler'],
+ '๐ช': ['circus', 'show', 'performance', 'pretend'],
+ '๐': ['wildcard', 'joker', 'unpredictable', 'trick'],
+ '๐': ['alternate', 'switch', 'change', 'different'],
+ '๐': ['loop', 'repeat', 'cycle', 'continue'],
+ 'โพ๏ธ': ['unlimited', 'infinite', 'endless', 'unrestricted'],
+ '๐': ['new', 'alternative', 'different', 'updated'],
+ '๐': ['upgrade', 'elevate', 'enhance', 'improve'],
+ '๐': ['ultimate', 'maximum', 'supreme', 'highest'],
+ '๐ช': ['powerful', 'strong', 'capable', 'force'],
+ 'โญ': ['special', 'unique', 'exceptional', 'privileged'],
+ 'โจ': ['special', 'magical', 'enhanced', 'unique'],
+ '๐': ['special', 'exceptional', 'outstanding', 'unique']
+};
diff --git a/js/transforms.js b/js/transforms.js
index b59a285..8a1952b 100644
--- a/js/transforms.js
+++ b/js/transforms.js
@@ -51,9 +51,8 @@ const transforms = {
return [...text].map(c => this.map[c] || c).reverse().join('');
},
preview: function(text) {
- if (!text) return '[binary]';
- const firstChar = text.charAt(0);
- return firstChar.charCodeAt(0).toString(2).padStart(8, '0') + '...';
+ if (!text) return '[upside down]';
+ return this.func(text.slice(0, 8));
},
reverse: function(text) {
const revMap = this.reverseMap();
@@ -80,9 +79,8 @@ const transforms = {
return [...text.toLowerCase()].map(c => this.map[c] || c).join('');
},
preview: function(text) {
- if (!text) return '[hex]';
- const firstChar = text.charAt(0);
- return firstChar.charCodeAt(0).toString(16).padStart(2, '0') + '...';
+ if (!text) return '[runes]';
+ return this.func(text.slice(0, 5));
},
reverse: function(text) {
const revMap = this.reverseMap();
@@ -96,8 +94,8 @@ const transforms = {
return [...text].join(' ');
},
preview: function(text) {
- if (!text) return '[base64]';
- return btoa(text.slice(0, 3)) + '...';
+ if (!text) return '[vaporwave]';
+ return [...text.slice(0, 3)].join(' ') + '...';
},
reverse: function(text) {
// Remove spaces between characters
@@ -248,11 +246,19 @@ const transforms = {
base64: {
name: 'Base64',
func: function(text) {
- return btoa(text);
+ try {
+ return btoa(text);
+ } catch (e) {
+ return '[Invalid input]';
+ }
},
preview: function(text) {
if (!text) return '[base64]';
- return btoa(text.slice(0, 3)) + '...';
+ try {
+ return btoa(text.slice(0, 3)) + '...';
+ } catch (e) {
+ return '[Invalid input]';
+ }
},
reverse: function(text) {
try {
@@ -267,8 +273,12 @@ const transforms = {
name: 'Base64 URL',
func: function(text) {
if (!text) return '';
- const std = btoa(text);
- return std.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/,'');
+ try {
+ const std = btoa(text);
+ return std.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/,'');
+ } catch (e) {
+ return '[Invalid input]';
+ }
},
preview: function(text) {
if (!text) return '[b64url]';
@@ -689,7 +699,12 @@ const transforms = {
url: {
name: 'URL Encode',
func: function(text) {
- return encodeURIComponent(text);
+ try {
+ return encodeURIComponent(text);
+ } catch (e) {
+ // Catch malformed Unicode or unpaired surrogates
+ return '[Invalid input]';
+ }
},
preview: function(text) {
return this.func(text);
@@ -912,7 +927,8 @@ const transforms = {
return text.split('').map(char => this.map[char] || char).join('');
},
preview: function(text) {
- return text.substring(0, 10) + (text.length > 10 ? '...' : '');
+ if (!text) return '[greek]';
+ return this.func(text.slice(0, 10));
},
reverseMap: function() {
if (!this._reverseMap) {
@@ -951,7 +967,8 @@ const transforms = {
return text.split('').map(char => this.map[char] || char).join('');
},
preview: function(text) {
- return text.substring(0, 10) + (text.length > 10 ? '...' : '');
+ if (!text) return '[wingdings]';
+ return this.func(text.slice(0, 10));
},
reverseMap: function() {
if (!this._reverseMap) {
@@ -1032,17 +1049,37 @@ const transforms = {
'S': 'S', 'T': 'T', 'U': 'U', 'V': 'V', 'W': 'W', 'X': 'X', 'Y': 'Y', 'Z': 'Z'
},
func: function(text) {
- return [...text.toLowerCase()].map(c => this.map[c] || c).join('');
+ // Process character by character, preserving case
+ return [...text].map(c => this.map[c] || c).join('');
},
preview: function(text) {
- return this.func(text);
+ if (!text) return '[klingon]';
+ return this.func(text.slice(0, 8));
},
reverse: function(text) {
+ // Build reverse map with multi-character strings
const revMap = {};
for (const [key, value] of Object.entries(this.map)) {
revMap[value] = key;
}
- return [...text].map(c => revMap[c] || c).join('');
+ // Try to match multi-character sequences first, then single chars
+ let result = '';
+ let i = 0;
+ while (i < text.length) {
+ // Try 2-character match first (for 'ch', 'gh', 'CH', 'GH')
+ const twoChar = text.substr(i, 2);
+ if (revMap[twoChar]) {
+ result += revMap[twoChar];
+ i += 2;
+ } else if (revMap[text[i]]) {
+ result += revMap[text[i]];
+ i++;
+ } else {
+ result += text[i];
+ i++;
+ }
+ }
+ return result;
}
},
@@ -2077,20 +2114,70 @@ const transforms = {
},
// Emoji Speak (word โ emoji, digits โ keycaps)
+ // Emoji keywords loaded from emojiWordMap.js
emoji_speak: {
name: 'Emoji Speak',
- wordMap: {
- 'love':'โค๏ธ','heart':'โค๏ธ','fire':'๐ฅ','cool':'๐','ok':'๐','star':'โญ','poop':'๐ฉ','yes':'โ
','no':'โ',
- 'up':'โฌ๏ธ','down':'โฌ๏ธ','left':'โฌ
๏ธ','right':'โก๏ธ','question':'โ','exclamation':'โ'
- },
digitMap: {'0':'0๏ธโฃ','1':'1๏ธโฃ','2':'2๏ธโฃ','3':'3๏ธโฃ','4':'4๏ธโฃ','5':'5๏ธโฃ','6':'6๏ธโฃ','7':'7๏ธโฃ','8':'8๏ธโฃ','9':'9๏ธโฃ'},
func: function(text) {
- // replace digits
+ // Replace digits with keycap emojis
let out = [...text].map(c => this.digitMap[c] || c).join('');
- // replace words (case-insensitive)
- for (const [word, emoji] of Object.entries(this.wordMap)) {
- const re = new RegExp(`\\b${word}\\b`, 'gi');
- out = out.replace(re, emoji);
+
+ // Replace words with emojis using keyword lookup
+ if (window.emojiKeywords) {
+ // Split into words while preserving spaces and punctuation
+ const words = out.match(/\b\w+\b/g);
+ if (words) {
+ // Process each unique word
+ const processed = new Set();
+ for (const word of words) {
+ const lower = word.toLowerCase();
+ if (processed.has(lower)) continue;
+ processed.add(lower);
+
+ // Find all emojis that have this word as a keyword
+ const matchingEmojis = [];
+ for (const [emoji, keywords] of Object.entries(window.emojiKeywords)) {
+ if (keywords.includes(lower)) {
+ matchingEmojis.push(emoji);
+ }
+ }
+
+ // If we found matches, replace with a random one
+ if (matchingEmojis.length > 0) {
+ const randomEmoji = matchingEmojis[Math.floor(Math.random() * matchingEmojis.length)];
+ const re = new RegExp(`\\b${word}\\b`, 'gi');
+ out = out.replace(re, randomEmoji);
+ }
+ }
+ }
+
+ // Second pass: Replace single characters and symbols (?, !, <3, arrows, etc.)
+ // Build a map of all single-char/symbol keywords
+ const symbolMap = new Map();
+ for (const [emoji, keywords] of Object.entries(window.emojiKeywords)) {
+ for (const keyword of keywords) {
+ // Only consider symbols (non-word characters or very short patterns)
+ // Exclude single digits since they're already handled by digitMap
+ if (keyword.length <= 3 && !/^\w+$/.test(keyword) && !/^\d$/.test(keyword)) {
+ if (!symbolMap.has(keyword)) {
+ symbolMap.set(keyword, []);
+ }
+ symbolMap.get(keyword).push(emoji);
+ }
+ }
+ }
+
+ // Replace symbols (longest first to handle multi-char like <3 before <)
+ const sortedSymbols = Array.from(symbolMap.keys()).sort((a, b) => b.length - a.length);
+ for (const symbol of sortedSymbols) {
+ if (out.includes(symbol)) {
+ const matchingEmojis = symbolMap.get(symbol);
+ const randomEmoji = matchingEmojis[Math.floor(Math.random() * matchingEmojis.length)];
+ // Escape special regex characters
+ const escaped = symbol.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ out = out.replace(new RegExp(escaped, 'g'), randomEmoji);
+ }
+ }
}
return out;
},
@@ -2227,7 +2314,10 @@ const transforms = {
},
preview: function(text) {
if (!text) return '[rev words]';
- return this.func(text.split(/\s+/).slice(0,2).join(' ')) + '...';
+ // Take last 2-3 words and reverse them to show the effect
+ const words = text.split(/\s+/);
+ const lastWords = words.slice(-3).join(' ');
+ return this.func(lastWords) + '...';
},
reverse: function(text) {
// Reversing words twice restores