UNPKG

ngx-emoji-picker

Version:

A simple emoji picker for Angular 2+ / Ionic 3 with AOT build support

2,209 lines โ€ข 98.1 kB
(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('rxjs'), require('rxjs/operators'), require('twemoji'), require('@angular/platform-browser')) :
    typeof define === 'function' && define.amd ? define('ngx-emoji-picker', ['exports', '@angular/core', '@angular/common', 'rxjs', 'rxjs/operators', 'twemoji', '@angular/platform-browser'], factory) :
    (global = global || self, factory(global['ngx-emoji-picker'] = {}, global.ng.core, global.ng.common, global.rxjs, global.rxjs.operators, global.twemoji, global.ng.platformBrowser));
}(this, (function (exports, core, common, rxjs, operators, twemoji, platformBrowser) { 'use strict';

    twemoji = twemoji && Object.prototype.hasOwnProperty.call(twemoji, 'default') ? twemoji['default'] : twemoji;

    /*! *****************************************************************************
    Copyright (c) Microsoft Corporation.

    Permission to use, copy, modify, and/or distribute this software for any
    purpose with or without fee is hereby granted.

    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    PERFORMANCE OF THIS SOFTWARE.
    ***************************************************************************** */
    /* global Reflect, Promise */

    var extendStatics = function(d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };

    function __extends(d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    }

    var __assign = function() {
        __assign = Object.assign || function __assign(t) {
            for (var s, i = 1, n = arguments.length; i < n; i++) {
                s = arguments[i];
                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
            }
            return t;
        };
        return __assign.apply(this, arguments);
    };

    function __rest(s, e) {
        var t = {};
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
            t[p] = s[p];
        if (s != null && typeof Object.getOwnPropertySymbols === "function")
            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                    t[p[i]] = s[p[i]];
            }
        return t;
    }

    function __decorate(decorators, target, key, desc) {
        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        return c > 3 && r && Object.defineProperty(target, key, r), r;
    }

    function __param(paramIndex, decorator) {
        return function (target, key) { decorator(target, key, paramIndex); }
    }

    function __metadata(metadataKey, metadataValue) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
    }

    function __awaiter(thisArg, _arguments, P, generator) {
        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
        return new (P || (P = Promise))(function (resolve, reject) {
            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
            function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
            step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
    }

    function __generator(thisArg, body) {
        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
        function verb(n) { return function (v) { return step([n, v]); }; }
        function step(op) {
            if (f) throw new TypeError("Generator is already executing.");
            while (_) try {
                if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
                if (y = 0, t) op = [op[0] & 2, t.value];
                switch (op[0]) {
                    case 0: case 1: t = op; break;
                    case 4: _.label++; return { value: op[1], done: false };
                    case 5: _.label++; y = op[1]; op = [0]; continue;
                    case 7: op = _.ops.pop(); _.trys.pop(); continue;
                    default:
                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                        if (t[2]) _.ops.pop();
                        _.trys.pop(); continue;
                }
                op = body.call(thisArg, _);
            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
        }
    }

    function __createBinding(o, m, k, k2) {
        if (k2 === undefined) k2 = k;
        o[k2] = m[k];
    }

    function __exportStar(m, exports) {
        for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];
    }

    function __values(o) {
        var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
        if (m) return m.call(o);
        if (o && typeof o.length === "number") return {
            next: function () {
                if (o && i >= o.length) o = void 0;
                return { value: o && o[i++], done: !o };
            }
        };
        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
    }

    function __read(o, n) {
        var m = typeof Symbol === "function" && o[Symbol.iterator];
        if (!m) return o;
        var i = m.call(o), r, ar = [], e;
        try {
            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
        }
        catch (error) { e = { error: error }; }
        finally {
            try {
                if (r && !r.done && (m = i["return"])) m.call(i);
            }
            finally { if (e) throw e.error; }
        }
        return ar;
    }

    function __spread() {
        for (var ar = [], i = 0; i < arguments.length; i++)
            ar = ar.concat(__read(arguments[i]));
        return ar;
    }

    function __spreadArrays() {
        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
        for (var r = Array(s), k = 0, i = 0; i < il; i++)
            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
                r[k] = a[j];
        return r;
    };

    function __await(v) {
        return this instanceof __await ? (this.v = v, this) : new __await(v);
    }

    function __asyncGenerator(thisArg, _arguments, generator) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var g = generator.apply(thisArg, _arguments || []), i, q = [];
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
        function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
        function fulfill(value) { resume("next", value); }
        function reject(value) { resume("throw", value); }
        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
    }

    function __asyncDelegator(o) {
        var i, p;
        return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
    }

    function __asyncValues(o) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var m = o[Symbol.asyncIterator], i;
        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
    }

    function __makeTemplateObject(cooked, raw) {
        if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
        return cooked;
    };

    function __importStar(mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
        result.default = mod;
        return result;
    }

    function __importDefault(mod) {
        return (mod && mod.__esModule) ? mod : { default: mod };
    }

    function __classPrivateFieldGet(receiver, privateMap) {
        if (!privateMap.has(receiver)) {
            throw new TypeError("attempted to get private field on non-instance");
        }
        return privateMap.get(receiver);
    }

    function __classPrivateFieldSet(receiver, privateMap, value) {
        if (!privateMap.has(receiver)) {
            throw new TypeError("attempted to set private field on non-instance");
        }
        privateMap.set(receiver, value);
        return value;
    }

    var EmojiButtonComponent = /** @class */ (function () {
        function EmojiButtonComponent() {
            this.selectionEmitter = new core.EventEmitter();
        }
        EmojiButtonComponent.prototype.ngOnChanges = function () { };
        __decorate([
            core.Input('emoji'),
            __metadata("design:type", Object)
        ], EmojiButtonComponent.prototype, "emoji", void 0);
        __decorate([
            core.Input('dataToEmit'),
            __metadata("design:type", Object)
        ], EmojiButtonComponent.prototype, "dataToEmit", void 0);
        __decorate([
            core.Input('options'),
            __metadata("design:type", Object)
        ], EmojiButtonComponent.prototype, "options", void 0);
        __decorate([
            core.Input('fitzpatrick'),
            __metadata("design:type", Object)
        ], EmojiButtonComponent.prototype, "fitzpatrick", void 0);
        __decorate([
            core.Output('selection'),
            __metadata("design:type", core.EventEmitter)
        ], EmojiButtonComponent.prototype, "selectionEmitter", void 0);
        EmojiButtonComponent = __decorate([
            core.Component({
                selector: 'emoji-button',
                template: "\n    <button\n      class=\"emoji-button\" \n      (click)=\"selectionEmitter.emit(dataToEmit || emoji)\" [innerHTML]=\"emoji[0] | emojiFallback\">\n    </button>\n  ",
                styles: [":host{display:inline-block}.emoji-button{padding:0;border:none;outline:0;background:0 0;width:34px;height:34px;border-radius:3px;font-size:24px;line-height:1.1;cursor:pointer;transition:.2s}.emoji-button:focus,.emoji-button:hover{background:#f1f1f1;border-color:#f1f1f1}.emoji-button ::ng-deep img{width:20px}"]
            }),
            __metadata("design:paramtypes", [])
        ], EmojiButtonComponent);
        return EmojiButtonComponent;
    }());

    var EmojiCategoriesComponent = /** @class */ (function () {
        function EmojiCategoriesComponent() {
            this.categorySelection = new core.EventEmitter();
        }
        EmojiCategoriesComponent.prototype.handleCategorySelection = function (event) {
            this.categorySelection.emit(event);
        };
        __decorate([
            core.Input('emojisCategories'),
            __metadata("design:type", Object)
        ], EmojiCategoriesComponent.prototype, "emojisCategories", void 0);
        __decorate([
            core.Output('categorySelection'),
            __metadata("design:type", Object)
        ], EmojiCategoriesComponent.prototype, "categorySelection", void 0);
        EmojiCategoriesComponent = __decorate([
            core.Component({
                selector: 'emoji-categories',
                template: "\n  <ng-container *ngFor=\"let category of emojisCategories\">\n    <emoji-button \n      (selection)=\"handleCategorySelection($event)\"\n      [dataToEmit]=\"category\"\n      [emoji]=\"category.icon\"></emoji-button>\n  </ng-container>\n  ",
                styles: [":host{display:flex;flex-wrap:wrap;justify-content:space-between;margin:0 0 10px}"]
            }),
            __metadata("design:paramtypes", [])
        ], EmojiCategoriesComponent);
        return EmojiCategoriesComponent;
    }());

    var EmojiCategoryComponent = /** @class */ (function () {
        function EmojiCategoryComponent(_element) {
            this._element = _element;
        }
        EmojiCategoryComponent.prototype.scrollIntoView = function () {
            this._element.nativeElement.scrollIntoView();
        };
        EmojiCategoryComponent.ctorParameters = function () { return [
            { type: core.ElementRef }
        ]; };
        __decorate([
            core.Input('category'),
            __metadata("design:type", Object)
        ], EmojiCategoryComponent.prototype, "category", void 0);
        EmojiCategoryComponent = __decorate([
            core.Component({
                selector: 'emoji-category',
                template: "\n  <p class=\"emoji-category\">{{category.name}}</p>\n  ",
                styles: [".emoji-category{margin:0;font-size:16px;padding:5px 0 5px 5px;border-bottom:1px solid #f0f0f0;color:#777;font-family:Arial,\"Arial Black\",Tahoma,\"Trebuchet MS\",Verdana}"]
            }),
            __metadata("design:paramtypes", [core.ElementRef])
        ], EmojiCategoryComponent);
        return EmojiCategoryComponent;
    }());

    var EMOJIS = [
        {
            emojis: [
                ['๐Ÿ˜€', 'grinning'],
                ['๐Ÿ˜ƒ', 'smiley'],
                ['๐Ÿ˜„', 'smile'],
                ['๐Ÿ˜', 'grin'],
                ['๐Ÿ˜†', 'laughing'],
                ['๐Ÿ˜…', 'sweat_smile'],
                ['๐Ÿ˜‚', 'joy'],
                ['๐Ÿคฃ', 'rofl'],
                ['๐Ÿ˜Š', 'blush'],
                ['๐Ÿ˜‡', 'innocent'],
                ['๐Ÿ™‚', 'slightly_smiling_face'],
                ['๐Ÿ™ƒ', 'upside_down_face'],
                ['๐Ÿ˜‰', 'wink'],
                ['๐Ÿ˜Œ', 'relieved'],
                ['๐Ÿ˜', 'heart_eyes'],
                ['๐Ÿ˜˜', 'kissing_heart'],
                ['๐Ÿ˜—', 'kissing'],
                ['๐Ÿ˜™', 'kissing_smiling_eyes'],
                ['๐Ÿ˜š', 'kissing_closed_eyes'],
                ['๐Ÿ˜‹', 'yum'],
                ['๐Ÿ˜œ', 'stuck_out_tongue_winking_eye'],
                ['๐Ÿ˜', 'stuck_out_tongue_closed_eyes'],
                ['๐Ÿ˜›', 'stuck_out_tongue'],
                ['๐Ÿค‘', 'money_mouth_face'],
                ['๐Ÿค—', 'hugs'],
                ['๐Ÿค“', 'nerd_face'],
                ['๐Ÿ˜Ž', 'sunglasses'],
                ['๐Ÿคก', 'clown_face'],
                ['๐Ÿค ', 'cowboy_hat_face'],
                ['๐Ÿ˜', 'smirk'],
                ['๐Ÿ˜’', 'unamused'],
                ['๐Ÿ˜ž', 'disappointed'],
                ['๐Ÿ˜”', 'pensive'],
                ['๐Ÿ˜Ÿ', 'worried'],
                ['๐Ÿ˜•', 'confused'],
                ['๐Ÿ™', 'slightly_frowning_face'],
                ['โ˜น๏ธ', 'frowning_face'],
                ['๐Ÿ˜ฃ', 'persevere'],
                ['๐Ÿ˜–', 'confounded'],
                ['๐Ÿ˜ซ', 'tired_face'],
                ['๐Ÿ˜ฉ', 'weary'],
                ['๐Ÿ˜ค', 'triumph'],
                ['๐Ÿ˜ ', 'angry'],
                ['๐Ÿ˜ก', 'rage'],
                ['๐Ÿ˜ถ', 'no_mouth'],
                ['๐Ÿ˜', 'neutral_face'],
                ['๐Ÿ˜‘', 'expressionless'],
                ['๐Ÿ˜ฏ', 'hushed'],
                ['๐Ÿ˜ฆ', 'frowning'],
                ['๐Ÿ˜ง', 'anguished'],
                ['๐Ÿ˜ฎ', 'open_mouth'],
                ['๐Ÿ˜ฒ', 'astonished'],
                ['๐Ÿ˜ต', 'dizzy_face'],
                ['๐Ÿ˜ณ', 'flushed'],
                ['๐Ÿ˜ฑ', 'scream'],
                ['๐Ÿ˜จ', 'fearful'],
                ['๐Ÿ˜ฐ', 'cold_sweat'],
                ['๐Ÿ˜ข', 'cry'],
                ['๐Ÿ˜ฅ', 'disappointed_relieved'],
                ['๐Ÿคค', 'drooling_face'],
                ['๐Ÿ˜ญ', 'sob'],
                ['๐Ÿ˜“', 'sweat'],
                ['๐Ÿ˜ช', 'sleepy'],
                ['๐Ÿ˜ด', 'sleeping'],
                ['๐Ÿ™„', 'roll_eyes'],
                ['๐Ÿค”', 'thinking'],
                ['๐Ÿคฅ', 'lying_face'],
                ['๐Ÿ˜ฌ', 'grimacing'],
                ['๐Ÿค', 'zipper_mouth_face'],
                ['๐Ÿคข', 'nauseated_face'],
                ['๐Ÿคง', 'sneezing_face'],
                ['๐Ÿ˜ท', 'mask'],
                ['๐Ÿค’', 'face_with_thermometer'],
                ['๐Ÿค•', 'face_with_head_bandage'],
                ['๐Ÿ˜ˆ', 'smiling_imp'],
                ['๐Ÿ‘ฟ', 'imp'],
                ['๐Ÿ‘น', 'japanese_ogre'],
                ['๐Ÿ‘บ', 'japanese_goblin'],
                ['๐Ÿ’ฉ', 'hankey'],
                ['๐Ÿ‘ป', 'ghost'],
                ['๐Ÿ’€', 'skull'],
                ['โ˜ ๏ธ', 'skull_and_crossbones'],
                ['๐Ÿ‘ฝ', 'alien'],
                ['๐Ÿ‘พ', 'space_invader'],
                ['๐Ÿค–', 'robot'],
                ['๐ŸŽƒ', 'jack_o_lantern'],
                ['๐Ÿ˜บ', 'smiley_cat'],
                ['๐Ÿ˜ธ', 'smile_cat'],
                ['๐Ÿ˜น', 'joy_cat'],
                ['๐Ÿ˜ป', 'heart_eyes_cat'],
                ['๐Ÿ˜ผ', 'smirk_cat'],
                ['๐Ÿ˜ฝ', 'kissing_cat'],
                ['๐Ÿ™€', 'scream_cat'],
                ['๐Ÿ˜ฟ', 'crying_cat_face'],
                ['๐Ÿ˜พ', 'pouting_cat'],
                ['๐Ÿ‘', 'open_hands'],
                ['๐Ÿ™Œ', 'raised_hands'],
                ['๐Ÿ‘', 'clap'],
                ['๐Ÿ™', 'pray'],
                ['๐Ÿค', 'handshake'],
                ['๐Ÿ‘', '+1'],
                ['๐Ÿ‘Ž', '-1'],
                ['๐Ÿ‘Š', 'fist_oncoming'],
                ['โœŠ', 'fist_raised'],
                ['๐Ÿค›', 'fist_left'],
                ['๐Ÿคœ', 'fist_right'],
                ['๐Ÿคž', 'crossed_fingers'],
                ['โœŒ๏ธ', 'v'],
                ['๐Ÿค˜', 'metal'],
                ['๐Ÿ‘Œ', 'ok_hand'],
                ['๐Ÿ‘ˆ', 'point_left'],
                ['๐Ÿ‘‰', 'point_right'],
                ['๐Ÿ‘†', 'point_up_2'],
                ['๐Ÿ‘‡', 'point_down'],
                ['โ˜๏ธ', 'point_up'],
                ['โœ‹', 'hand'],
                ['๐Ÿคš', 'raised_back_of_hand'],
                ['๐Ÿ–', 'raised_hand_with_fingers_splayed'],
                ['๐Ÿ––', 'vulcan_salute'],
                ['๐Ÿ‘‹', 'wave'],
                ['๐Ÿค™', 'call_me_hand'],
                ['๐Ÿ’ช', 'muscle'],
                ['๐Ÿ–•', 'middle_finger'],
                ['โœ๏ธ', 'writing_hand'],
                ['๐Ÿคณ', 'selfie'],
                ['๐Ÿ’…', 'nail_care'],
                ['๐Ÿ’', 'ring'],
                ['๐Ÿ’„', 'lipstick'],
                ['๐Ÿ’‹', 'kiss'],
                ['๐Ÿ‘„', 'lips'],
                ['๐Ÿ‘…', 'tongue'],
                ['๐Ÿ‘‚', 'ear'],
                ['๐Ÿ‘ƒ', 'nose'],
                ['๐Ÿ‘ฃ', 'footprints'],
                ['๐Ÿ‘', 'eye'],
                ['๐Ÿ‘€', 'eyes'],
                ['๐Ÿ—ฃ', 'speaking_head'],
                ['๐Ÿ‘ค', 'bust_in_silhouette'],
                ['๐Ÿ‘ฅ', 'busts_in_silhouette'],
                ['๐Ÿ‘ถ', 'baby'],
                ['๐Ÿ‘ฆ', 'boy'],
                ['๐Ÿ‘ง', 'girl'],
                ['๐Ÿ‘จ', 'man'],
                ['๐Ÿ‘ฉ', 'woman'],
                ['๐Ÿ‘ฑโ€โ™€', 'blonde_woman'],
                ['๐Ÿ‘ฑ', 'blonde_man'],
                ['๐Ÿ‘ด', 'older_man'],
                ['๐Ÿ‘ต', 'older_woman'],
                ['๐Ÿ‘ฒ', 'man_with_gua_pi_mao'],
                ['๐Ÿ‘ณโ€โ™€', 'woman_with_turban'],
                ['๐Ÿ‘ณ', 'man_with_turban'],
                ['๐Ÿ‘ฎโ€โ™€', 'policewoman'],
                ['๐Ÿ‘ฎ', 'policeman'],
                ['๐Ÿ‘ทโ€โ™€', 'construction_worker_woman'],
                ['๐Ÿ‘ท', 'construction_worker_man'],
                ['๐Ÿ’‚โ€โ™€', 'guardswoman'],
                ['๐Ÿ’‚', 'guardsman'],
                ['๐Ÿ•ต๏ธโ€โ™€๏ธ', 'female_detective'],
                ['๐Ÿ•ต', 'male_detective'],
                ['๐Ÿ‘ฉโ€โš•', 'woman_health_worker'],
                ['๐Ÿ‘จโ€โš•', 'man_health_worker'],
                ['๐Ÿ‘ฉโ€๐ŸŒพ', 'woman_farmer'],
                ['๐Ÿ‘จโ€๐ŸŒพ', 'man_farmer'],
                ['๐Ÿ‘ฉโ€๐Ÿณ', 'woman_cook'],
                ['๐Ÿ‘จโ€๐Ÿณ', 'man_cook'],
                ['๐Ÿ‘ฉโ€๐ŸŽ“', 'woman_student'],
                ['๐Ÿ‘จโ€๐ŸŽ“', 'man_student'],
                ['๐Ÿ‘ฉโ€๐ŸŽค', 'woman_singer'],
                ['๐Ÿ‘จโ€๐ŸŽค', 'man_singer'],
                ['๐Ÿ‘ฉโ€๐Ÿซ', 'woman_teacher'],
                ['๐Ÿ‘จโ€๐Ÿซ', 'man_teacher'],
                ['๐Ÿ‘ฉโ€๐Ÿญ', 'woman_factory_worker'],
                ['๐Ÿ‘จโ€๐Ÿญ', 'man_factory_worker'],
                ['๐Ÿ‘ฉโ€๐Ÿ’ป', 'woman_technologist'],
                ['๐Ÿ‘จโ€๐Ÿ’ป', 'man_technologist'],
                ['๐Ÿ‘ฉโ€๐Ÿ’ผ', 'woman_office_worker'],
                ['๐Ÿ‘จโ€๐Ÿ’ผ', 'man_office_worker'],
                ['๐Ÿ‘ฉโ€๐Ÿ”ง', 'woman_mechanic'],
                ['๐Ÿ‘จโ€๐Ÿ”ง', 'man_mechanic'],
                ['๐Ÿ‘ฉโ€๐Ÿ”ฌ', 'woman_scientist'],
                ['๐Ÿ‘จโ€๐Ÿ”ฌ', 'man_scientist'],
                ['๐Ÿ‘ฉโ€๐ŸŽจ', 'woman_artist'],
                ['๐Ÿ‘จโ€๐ŸŽจ', 'man_artist'],
                ['๐Ÿ‘ฉโ€๐Ÿš’', 'woman_firefighter'],
                ['๐Ÿ‘จโ€๐Ÿš’', 'man_firefighter'],
                ['๐Ÿ‘ฉโ€โœˆ', 'woman_pilot'],
                ['๐Ÿ‘จโ€โœˆ', 'man_pilot'],
                ['๐Ÿ‘ฉโ€๐Ÿš€', 'woman_astronaut'],
                ['๐Ÿ‘จโ€๐Ÿš€', 'man_astronaut'],
                ['๐Ÿ‘ฉโ€โš–', 'woman_judge'],
                ['๐Ÿ‘จโ€โš–', 'man_judge'],
                ['๐Ÿคถ', 'mrs_claus'],
                ['๐ŸŽ…', 'santa'],
                ['๐Ÿ‘ธ', 'princess'],
                ['๐Ÿคด', 'prince'],
                ['๐Ÿ‘ฐ', 'bride_with_veil'],
                ['๐Ÿคต', 'man_in_tuxedo'],
                ['๐Ÿ‘ผ', 'angel'],
                ['๐Ÿคฐ', 'pregnant_woman'],
                ['๐Ÿ™‡โ€โ™€', 'bowing_woman'],
                ['๐Ÿ™‡', 'bowing_man'],
                ['๐Ÿ’', 'tipping_hand_woman'],
                ['๐Ÿ’โ€โ™‚', 'tipping_hand_man'],
                ['๐Ÿ™…', 'no_good_woman'],
                ['๐Ÿ™…โ€โ™‚', 'no_good_man'],
                ['๐Ÿ™†', 'ok_woman'],
                ['๐Ÿ™†โ€โ™‚', 'ok_man'],
                ['๐Ÿ™‹', 'raising_hand_woman'],
                ['๐Ÿ™‹โ€โ™‚', 'raising_hand_man'],
                ['๐Ÿคฆโ€โ™€', 'woman_facepalming'],
                ['๐Ÿคฆโ€โ™‚', 'man_facepalming'],
                ['๐Ÿคทโ€โ™€', 'woman_shrugging'],
                ['๐Ÿคทโ€โ™‚', 'man_shrugging'],
                ['๐Ÿ™Ž', 'pouting_woman'],
                ['๐Ÿ™Žโ€โ™‚', 'pouting_man'],
                ['๐Ÿ™', 'frowning_woman'],
                ['๐Ÿ™โ€โ™‚', 'frowning_man'],
                ['๐Ÿ’‡', 'haircut_woman'],
                ['๐Ÿ’‡โ€โ™‚', 'haircut_man'],
                ['๐Ÿ’†', 'massage_woman'],
                ['๐Ÿ’†โ€โ™‚', 'massage_man'],
                ['๐Ÿ•ด', 'business_suit_levitating'],
                ['๐Ÿ’ƒ', 'dancer'],
                ['๐Ÿ•บ', 'man_dancing'],
                ['๐Ÿ‘ฏ', 'dancing_women'],
                ['๐Ÿ‘ฏโ€โ™‚', 'dancing_men'],
                ['๐Ÿšถโ€โ™€', 'walking_woman'],
                ['๐Ÿšถ', 'walking_man'],
                ['๐Ÿƒโ€โ™€', 'running_woman'],
                ['๐Ÿƒ', 'running_man'],
                ['๐Ÿ‘ซ', 'couple'],
                ['๐Ÿ‘ญ', 'two_women_holding_hands'],
                ['๐Ÿ‘ฌ', 'two_men_holding_hands'],
                ['๐Ÿ’‘', 'couple_with_heart_woman_man'],
                ['๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ', 'couple_with_heart_woman_woman'],
                ['๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ', 'couple_with_heart_man_man'],
                ['๐Ÿ’', 'couplekiss_man_woman'],
                ['๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ', 'couplekiss_woman_woman'],
                ['๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ', 'couplekiss_man_man'],
                ['๐Ÿ‘ช', 'family_man_woman_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง', 'family_man_woman_girl'],
                ['๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', 'family_man_woman_girl_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', 'family_man_woman_boy_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', 'family_man_woman_girl_girl'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ', 'family_woman_woman_boy'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง', 'family_woman_woman_girl'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', 'family_woman_woman_girl_boy'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', 'family_woman_woman_boy_boy'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', 'family_woman_woman_girl_girl'],
                ['๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ', 'family_man_man_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง', 'family_man_man_girl'],
                ['๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', 'family_man_man_girl_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', 'family_man_man_boy_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง', 'family_man_man_girl_girl'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘ฆ', 'family_woman_boy'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘ง', 'family_woman_girl'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', 'family_woman_girl_boy'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', 'family_woman_boy_boy'],
                ['๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', 'family_woman_girl_girl'],
                ['๐Ÿ‘จโ€๐Ÿ‘ฆ', 'family_man_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘ง', 'family_man_girl'],
                ['๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', 'family_man_girl_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', 'family_man_boy_boy'],
                ['๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง', 'family_man_girl_girl'],
                ['๐Ÿ‘š', 'womans_clothes'],
                ['๐Ÿ‘•', 'shirt'],
                ['๐Ÿ‘–', 'jeans'],
                ['๐Ÿ‘”', 'necktie'],
                ['๐Ÿ‘—', 'dress'],
                ['๐Ÿ‘™', 'bikini'],
                ['๐Ÿ‘˜', 'kimono'],
                ['๐Ÿ‘ ', 'high_heel'],
                ['๐Ÿ‘ก', 'sandal'],
                ['๐Ÿ‘ข', 'boot'],
                ['๐Ÿ‘ž', 'mans_shoe'],
                ['๐Ÿ‘Ÿ', 'athletic_shoe'],
                ['๐Ÿ‘’', 'womans_hat'],
                ['๐ŸŽฉ', 'tophat'],
                ['๐ŸŽ“', 'mortar_board'],
                ['๐Ÿ‘‘', 'crown'],
                ['โ›‘', 'rescue_worker_helmet'],
                ['๐ŸŽ’', 'school_satchel'],
                ['๐Ÿ‘', 'pouch'],
                ['๐Ÿ‘›', 'purse'],
                ['๐Ÿ‘œ', 'handbag'],
                ['๐Ÿ’ผ', 'briefcase'],
                ['๐Ÿ‘“', 'eyeglasses'],
                ['๐Ÿ•ถ', 'dark_sunglasses'],
                ['๐ŸŒ‚', 'closed_umbrella'],
                ['โ˜‚๏ธ', 'open_umbrella']
            ],
            name: 'People',
            icon: ['๐Ÿ˜„', 'smile']
        },
        {
            emojis: [
                ['๐Ÿถ', 'dog'],
                ['๐Ÿฑ', 'cat'],
                ['๐Ÿญ', 'mouse'],
                ['๐Ÿน', 'hamster'],
                ['๐Ÿฐ', 'rabbit'],
                ['๐ŸฆŠ', 'fox_face'],
                ['๐Ÿป', 'bear'],
                ['๐Ÿผ', 'panda_face'],
                ['๐Ÿจ', 'koala'],
                ['๐Ÿฏ', 'tiger'],
                ['๐Ÿฆ', 'lion'],
                ['๐Ÿฎ', 'cow'],
                ['๐Ÿท', 'pig'],
                ['๐Ÿฝ', 'pig_nose'],
                ['๐Ÿธ', 'frog'],
                ['๐Ÿต', 'monkey_face'],
                ['๐Ÿ™ˆ', 'see_no_evil'],
                ['๐Ÿ™‰', 'hear_no_evil'],
                ['๐Ÿ™Š', 'speak_no_evil'],
                ['๐Ÿ’', 'monkey'],
                ['๐Ÿ”', 'chicken'],
                ['๐Ÿง', 'penguin'],
                ['๐Ÿฆ', 'bird'],
                ['๐Ÿค', 'baby_chick'],
                ['๐Ÿฃ', 'hatching_chick'],
                ['๐Ÿฅ', 'hatched_chick'],
                ['๐Ÿฆ†', 'duck'],
                ['๐Ÿฆ…', 'eagle'],
                ['๐Ÿฆ‰', 'owl'],
                ['๐Ÿฆ‡', 'bat'],
                ['๐Ÿบ', 'wolf'],
                ['๐Ÿ—', 'boar'],
                ['๐Ÿด', 'horse'],
                ['๐Ÿฆ„', 'unicorn'],
                ['๐Ÿ', 'bee'],
                ['๐Ÿ›', 'bug'],
                ['๐Ÿฆ‹', 'butterfly'],
                ['๐ŸŒ', 'snail'],
                ['๐Ÿš', 'shell'],
                ['๐Ÿž', 'beetle'],
                ['๐Ÿœ', 'ant'],
                ['๐Ÿ•ท', 'spider'],
                ['๐Ÿ•ธ', 'spider_web'],
                ['๐Ÿข', 'turtle'],
                ['๐Ÿ', 'snake'],
                ['๐ŸฆŽ', 'lizard'],
                ['๐Ÿฆ‚', 'scorpion'],
                ['๐Ÿฆ€', 'crab'],
                ['๐Ÿฆ‘', 'squid'],
                ['๐Ÿ™', 'octopus'],
                ['๐Ÿฆ', 'shrimp'],
                ['๐Ÿ ', 'tropical_fish'],
                ['๐ŸŸ', 'fish'],
                ['๐Ÿก', 'blowfish'],
                ['๐Ÿฌ', 'dolphin'],
                ['๐Ÿฆˆ', 'shark'],
                ['๐Ÿณ', 'whale'],
                ['๐Ÿ‹', 'whale2'],
                ['๐ŸŠ', 'crocodile'],
                ['๐Ÿ†', 'leopard'],
                ['๐Ÿ…', 'tiger2'],
                ['๐Ÿƒ', 'water_buffalo'],
                ['๐Ÿ‚', 'ox'],
                ['๐Ÿ„', 'cow2'],
                ['๐ŸฆŒ', 'deer'],
                ['๐Ÿช', 'dromedary_camel'],
                ['๐Ÿซ', 'camel'],
                ['๐Ÿ˜', 'elephant'],
                ['๐Ÿฆ', 'rhinoceros'],
                ['๐Ÿฆ', 'gorilla'],
                ['๐ŸŽ', 'racehorse'],
                ['๐Ÿ–', 'pig2'],
                ['๐Ÿ', 'goat'],
                ['๐Ÿ', 'ram'],
                ['๐Ÿ‘', 'sheep'],
                ['๐Ÿ•', 'dog2'],
                ['๐Ÿฉ', 'poodle'],
                ['๐Ÿˆ', 'cat2'],
                ['๐Ÿ“', 'rooster'],
                ['๐Ÿฆƒ', 'turkey'],
                ['๐Ÿ•Š', 'dove'],
                ['๐Ÿ‡', 'rabbit2'],
                ['๐Ÿ', 'mouse2'],
                ['๐Ÿ€', 'rat'],
                ['๐Ÿฟ', 'chipmunk'],
                ['๐Ÿพ', 'feet'],
                ['๐Ÿ‰', 'dragon'],
                ['๐Ÿฒ', 'dragon_face'],
                ['๐ŸŒต', 'cactus'],
                ['๐ŸŽ„', 'christmas_tree'],
                ['๐ŸŒฒ', 'evergreen_tree'],
                ['๐ŸŒณ', 'deciduous_tree'],
                ['๐ŸŒด', 'palm_tree'],
                ['๐ŸŒฑ', 'seedling'],
                ['๐ŸŒฟ', 'herb'],
                ['โ˜˜๏ธ', 'shamrock'],
                ['๐Ÿ€', 'four_leaf_clover'],
                ['๐ŸŽ', 'bamboo'],
                ['๐ŸŽ‹', 'tanabata_tree'],
                ['๐Ÿƒ', 'leaves'],
                ['๐Ÿ‚', 'fallen_leaf'],
                ['๐Ÿ', 'maple_leaf'],
                ['๐Ÿ„', 'mushroom'],
                ['๐ŸŒพ', 'ear_of_rice'],
                ['๐Ÿ’', 'bouquet'],
                ['๐ŸŒท', 'tulip'],
                ['๐ŸŒน', 'rose'],
                ['๐Ÿฅ€', 'wilted_flower'],
                ['๐ŸŒป', 'sunflower'],
                ['๐ŸŒผ', 'blossom'],
                ['๐ŸŒธ', 'cherry_blossom'],
                ['๐ŸŒบ', 'hibiscus'],
                ['๐ŸŒŽ', 'earth_americas'],
                ['๐ŸŒ', 'earth_africa'],
                ['๐ŸŒ', 'earth_asia'],
                ['๐ŸŒ•', 'full_moon'],
                ['๐ŸŒ–', 'waning_gibbous_moon'],
                ['๐ŸŒ—', 'last_quarter_moon'],
                ['๐ŸŒ˜', 'waning_crescent_moon'],
                ['๐ŸŒ‘', 'new_moon'],
                ['๐ŸŒ’', 'waxing_crescent_moon'],
                ['๐ŸŒ“', 'first_quarter_moon'],
                ['๐ŸŒ”', 'moon'],
                ['๐ŸŒš', 'new_moon_with_face'],
                ['๐ŸŒ', 'full_moon_with_face'],
                ['๐ŸŒž', 'sun_with_face'],
                ['๐ŸŒ›', 'first_quarter_moon_with_face'],
                ['๐ŸŒœ', 'last_quarter_moon_with_face'],
                ['๐ŸŒ™', 'crescent_moon'],
                ['๐Ÿ’ซ', 'dizzy'],
                ['โญ๏ธ', 'star'],
                ['๐ŸŒŸ', 'star2'],
                ['โœจ', 'sparkles'],
                ['โšก๏ธ', 'zap'],
                ['๐Ÿ”ฅ', 'fire'],
                ['๐Ÿ’ฅ', 'boom'],
                ['โ˜„', 'comet'],
                ['โ˜€๏ธ', 'sunny'],
                ['๐ŸŒค', 'sun_behind_small_cloud'],
                ['โ›…๏ธ', 'partly_sunny'],
                ['๐ŸŒฅ', 'sun_behind_large_cloud'],
                ['๐ŸŒฆ', 'sun_behind_rain_cloud'],
                ['๐ŸŒˆ', 'rainbow'],
                ['โ˜๏ธ', 'cloud'],
                ['๐ŸŒง', 'cloud_with_rain'],
                ['โ›ˆ', 'cloud_with_lightning_and_rain'],
                ['๐ŸŒฉ', 'cloud_with_lightning'],
                ['๐ŸŒจ', 'cloud_with_snow'],
                ['โ˜ƒ๏ธ', 'snowman_with_snow'],
                ['โ›„๏ธ', 'snowman'],
                ['โ„๏ธ', 'snowflake'],
                ['๐ŸŒฌ', 'wind_face'],
                ['๐Ÿ’จ', 'dash'],
                ['๐ŸŒช', 'tornado'],
                ['๐ŸŒซ', 'fog'],
                ['๐ŸŒŠ', 'ocean'],
                ['๐Ÿ’ง', 'droplet'],
                ['๐Ÿ’ฆ', 'sweat_drops'],
                ['โ˜”๏ธ', 'umbrella']
            ],
            name: 'Nature',
            icon: ['๐ŸŒธ', 'cherry_blossom']
        },
        {
            emojis: [
                ['๐Ÿ', 'green_apple'],
                ['๐ŸŽ', 'apple'],
                ['๐Ÿ', 'pear'],
                ['๐ŸŠ', 'tangerine'],
                ['๐Ÿ‹', 'lemon'],
                ['๐ŸŒ', 'banana'],
                ['๐Ÿ‰', 'watermelon'],
                ['๐Ÿ‡', 'grapes'],
                ['๐Ÿ“', 'strawberry'],
                ['๐Ÿˆ', 'melon'],
                ['๐Ÿ’', 'cherries'],
                ['๐Ÿ‘', 'peach'],
                ['๐Ÿ', 'pineapple'],
                ['๐Ÿฅ', 'kiwi_fruit'],
                ['๐Ÿฅ‘', 'avocado'],
                ['๐Ÿ…', 'tomato'],
                ['๐Ÿ†', 'eggplant'],
                ['๐Ÿฅ’', 'cucumber'],
                ['๐Ÿฅ•', 'carrot'],
                ['๐ŸŒฝ', 'corn'],
                ['๐ŸŒถ', 'hot_pepper'],
                ['๐Ÿฅ”', 'potato'],
                ['๐Ÿ ', 'sweet_potato'],
                ['๐ŸŒฐ', 'chestnut'],
                ['๐Ÿฅœ', 'peanuts'],
                ['๐Ÿฏ', 'honey_pot'],
                ['๐Ÿฅ', 'croissant'],
                ['๐Ÿž', 'bread'],
                ['๐Ÿฅ–', 'baguette_bread'],
                ['๐Ÿง€', 'cheese'],
                ['๐Ÿฅš', 'egg'],
                ['๐Ÿณ', 'fried_egg'],
                ['๐Ÿฅ“', 'bacon'],
                ['๐Ÿฅž', 'pancakes'],
                ['๐Ÿค', 'fried_shrimp'],
                ['๐Ÿ—', 'poultry_leg'],
                ['๐Ÿ–', 'meat_on_bone'],
                ['๐Ÿ•', 'pizza'],
                ['๐ŸŒญ', 'hotdog'],
                ['๐Ÿ”', 'hamburger'],
                ['๐ŸŸ', 'fries'],
                ['๐Ÿฅ™', 'stuffed_flatbread'],
                ['๐ŸŒฎ', 'taco'],
                ['๐ŸŒฏ', 'burrito'],
                ['๐Ÿฅ—', 'green_salad'],
                ['๐Ÿฅ˜', 'shallow_pan_of_food'],
                ['๐Ÿ', 'spaghetti'],
                ['๐Ÿœ', 'ramen'],
                ['๐Ÿฒ', 'stew'],
                ['๐Ÿฅ', 'fish_cake'],
                ['๐Ÿฃ', 'sushi'],
                ['๐Ÿฑ', 'bento'],
                ['๐Ÿ›', 'curry'],
                ['๐Ÿš', 'rice'],
                ['๐Ÿ™', 'rice_ball'],
                ['๐Ÿ˜', 'rice_cracker'],
                ['๐Ÿข', 'oden'],
                ['๐Ÿก', 'dango'],
                ['๐Ÿง', 'shaved_ice'],
                ['๐Ÿจ', 'ice_cream'],
                ['๐Ÿฆ', 'icecream'],
                ['๐Ÿฐ', 'cake'],
                ['๐ŸŽ‚', 'birthday'],
                ['๐Ÿฎ', 'custard'],
                ['๐Ÿญ', 'lollipop'],
                ['๐Ÿฌ', 'candy'],
                ['๐Ÿซ', 'chocolate_bar'],
                ['๐Ÿฟ', 'popcorn'],
                ['๐Ÿฉ', 'doughnut'],
                ['๐Ÿช', 'cookie'],
                ['๐Ÿฅ›', 'milk_glass'],
                ['๐Ÿผ', 'baby_bottle'],
                ['โ˜•๏ธ', 'coffee'],
                ['๐Ÿต', 'tea'],
                ['๐Ÿถ', 'sake'],
                ['๐Ÿบ', 'beer'],
                ['๐Ÿป', 'beers'],
                ['๐Ÿฅ‚', 'clinking_glasses'],
                ['๐Ÿท', 'wine_glass'],
                ['๐Ÿฅƒ', 'tumbler_glass'],
                ['๐Ÿธ', 'cocktail'],
                ['๐Ÿน', 'tropical_drink'],
                ['๐Ÿพ', 'champagne'],
                ['๐Ÿฅ„', 'spoon'],
                ['๐Ÿด', 'fork_and_knife'],
                ['๐Ÿฝ', 'plate_with_cutlery']
            ],
            name: 'Foods',
            icon: ['๐Ÿ”', 'hamburger']
        },
        {
            emojis: [
                ['โšฝ๏ธ', 'soccer'],
                ['๐Ÿ€', 'basketball'],
                ['๐Ÿˆ', 'football'],
                ['โšพ๏ธ', 'baseball'],
                ['๐ŸŽพ', 'tennis'],
                ['๐Ÿ', 'volleyball'],
                ['๐Ÿ‰', 'rugby_football'],
                ['๐ŸŽฑ', '8ball'],
                ['๐Ÿ“', 'ping_pong'],
                ['๐Ÿธ', 'badminton'],
                ['๐Ÿฅ…', 'goal_net'],
                ['๐Ÿ’', 'ice_hockey'],
                ['๐Ÿ‘', 'field_hockey'],
                ['๐Ÿ', 'cricket'],
                ['โ›ณ๏ธ', 'golf'],
                ['๐Ÿน', 'bow_and_arrow'],
                ['๐ŸŽฃ', 'fishing_pole_and_fish'],
                ['๐ŸฅŠ', 'boxing_glove'],
                ['๐Ÿฅ‹', 'martial_arts_uniform'],
                ['โ›ธ', 'ice_skate'],
                ['๐ŸŽฟ', 'ski'],
                ['โ›ท', 'skier'],
                ['๐Ÿ‚', 'snowboarder'],
                ['๐Ÿ‹๏ธโ€โ™€๏ธ', 'weight_lifting_woman'],
                ['๐Ÿ‹', 'weight_lifting_man'],
                ['๐Ÿคบ', 'person_fencing'],
                ['๐Ÿคผโ€โ™€', 'women_wrestling'],
                ['๐Ÿคผโ€โ™‚', 'men_wrestling'],
                ['๐Ÿคธโ€โ™€', 'woman_cartwheeling'],
                ['๐Ÿคธโ€โ™‚', 'man_cartwheeling'],
                ['โ›น๏ธโ€โ™€๏ธ', 'basketball_woman'],
                ['โ›น', 'basketball_man'],
                ['๐Ÿคพโ€โ™€', 'woman_playing_handball'],
                ['๐Ÿคพโ€โ™‚', 'man_playing_handball'],
                ['๐ŸŒ๏ธโ€โ™€๏ธ', 'golfing_woman'],
                ['๐ŸŒ', 'golfing_man'],
                ['๐Ÿ„โ€โ™€', 'surfing_woman'],
                ['๐Ÿ„', 'surfing_man'],
                ['๐ŸŠโ€โ™€', 'swimming_woman'],
                ['๐ŸŠ', 'swimming_man'],
                ['๐Ÿคฝโ€โ™€', 'woman_playing_water_polo'],
                ['๐Ÿคฝโ€โ™‚', 'man_playing_water_polo'],
                ['๐Ÿšฃโ€โ™€', 'rowing_woman'],
                ['๐Ÿšฃ', 'rowing_man'],
                ['๐Ÿ‡', 'horse_racing'],
                ['๐Ÿšดโ€โ™€', 'biking_woman'],
                ['๐Ÿšด', 'biking_man'],
                ['๐Ÿšตโ€โ™€', 'mountain_biking_woman'],
                ['๐Ÿšต', 'mountain_biking_man'],
                ['๐ŸŽฝ', 'running_shirt_with_sash'],
                ['๐Ÿ…', 'medal_sports'],
                ['๐ŸŽ–', 'medal_military'],
                ['๐Ÿฅ‡', '1st_place_medal'],
                ['๐Ÿฅˆ', '2nd_place_medal'],
                ['๐Ÿฅ‰', '3rd_place_medal'],
                ['๐Ÿ†', 'trophy'],
                ['๐Ÿต', 'rosette'],
                ['๐ŸŽ—', 'reminder_ribbon'],
                ['๐ŸŽซ', 'ticket'],
                ['๐ŸŽŸ', 'tickets'],
                ['๐ŸŽช', 'circus_tent'],
                ['๐Ÿคนโ€โ™€', 'woman_juggling'],
                ['๐Ÿคนโ€โ™‚', 'man_juggling'],
                ['๐ŸŽญ', 'performing_arts'],
                ['๐ŸŽจ', 'art'],
                ['๐ŸŽฌ', 'clapper'],
                ['๐ŸŽค', 'microphone'],
                ['๐ŸŽง', 'headphones'],
                ['๐ŸŽผ', 'musical_score'],
                ['๐ŸŽน', 'musical_keyboard'],
                ['๐Ÿฅ', 'drum'],
                ['๐ŸŽท', 'saxophone'],
                ['๐ŸŽบ', 'trumpet'],
                ['๐ŸŽธ', 'guitar'],
                ['๐ŸŽป', 'violin'],
                ['๐ŸŽฒ', 'game_die'],
                ['๐ŸŽฏ', 'dart'],
                ['๐ŸŽณ', 'bowling'],
                ['๐ŸŽฎ', 'video_game'],
                ['๐ŸŽฐ', 'slot_machine']
            ],
            name: 'Activity',
            icon: ['โšฝ๏ธ', 'soccer']
        },
        {
            emojis: [
                ['๐Ÿš—', 'car'],
                ['๐Ÿš•', 'taxi'],
                ['๐Ÿš™', 'blue_car'],
                ['๐ŸšŒ', 'bus'],
                ['๐ŸšŽ', 'trolleybus'],
                ['๐ŸŽ', 'racing_car'],
                ['๐Ÿš“', 'police_car'],
                ['๐Ÿš‘', 'ambulance'],
                ['๐Ÿš’', 'fire_engine'],
                ['๐Ÿš', 'minibus'],
                ['๐Ÿšš', 'truck'],
                ['๐Ÿš›', 'articulated_lorry'],
                ['๐Ÿšœ', 'tractor'],
                ['๐Ÿ›ด', 'kick_scooter'],
                ['๐Ÿšฒ', 'bike'],
                ['๐Ÿ›ต', 'motor_scooter'],
                ['๐Ÿ', 'motorcycle'],
                ['๐Ÿšจ', 'rotating_light'],
                ['๐Ÿš”', 'oncoming_police_car'],
                ['๐Ÿš', 'oncoming_bus'],
                ['๐Ÿš˜', 'oncoming_automobile'],
                ['๐Ÿš–', 'oncoming_taxi'],
                ['๐Ÿšก', 'aerial_tramway'],
                ['๐Ÿš ', 'mountain_cableway'],
                ['๐ŸšŸ', 'suspension_railway'],
                ['๐Ÿšƒ', 'railway_car'],
                ['๐Ÿš‹', 'train'],
                ['๐Ÿšž', 'mountain_railway'],
                ['๐Ÿš', 'monorail'],
                ['๐Ÿš„', 'bullettrain_side'],
                ['๐Ÿš…', 'bullettrain_front'],
                ['๐Ÿšˆ', 'light_rail'],
                ['๐Ÿš‚', 'steam_locomotive'],
                ['๐Ÿš†', 'train2'],
                ['๐Ÿš‡', 'metro'],
                ['๐ŸšŠ', 'tram'],
                ['๐Ÿš‰', 'station'],
                ['๐Ÿš', 'helicopter'],
                ['๐Ÿ›ฉ', 'small_airplane'],
                ['โœˆ๏ธ', 'airplane'],
                ['๐Ÿ›ซ', 'flight_departure'],
                ['๐Ÿ›ฌ', 'flight_arrival'],
                ['๐Ÿš€', 'rocket'],
                ['๐Ÿ›ฐ', 'artificial_satellite'],
                ['๐Ÿ’บ', 'seat'],
                ['๐Ÿ›ถ', 'canoe'],
                ['โ›ต๏ธ', 'boat'],
                ['๐Ÿ›ฅ', 'motor_boat'],
                ['๐Ÿšค', 'speedboat'],
                ['๐Ÿ›ณ', 'passenger_ship'],
                ['โ›ด', 'ferry'],
                ['๐Ÿšข', 'ship'],
                ['โš“๏ธ', 'anchor'],
                ['๐Ÿšง', 'construction'],
                ['โ›ฝ๏ธ', 'fuelpump'],
                ['๐Ÿš', 'busstop'],
                ['๐Ÿšฆ', 'vertical_traffic_light'],
                ['๐Ÿšฅ', 'traffic_light'],
                ['๐Ÿ—บ', 'world_map'],
                ['๐Ÿ—ฟ', 'moyai'],
                ['๐Ÿ—ฝ', 'statue_of_liberty'],
                ['โ›ฒ๏ธ', 'fountain'],
                ['๐Ÿ—ผ', 'tokyo_tower'],
                ['๐Ÿฐ', 'european_castle'],
                ['๐Ÿฏ', 'japanese_castle'],
                ['๐ŸŸ', 'stadium'],
                ['๐ŸŽก', 'ferris_wheel'],
                ['๐ŸŽข', 'roller_coaster'],
                ['๐ŸŽ ', 'carousel_horse'],
                ['โ›ฑ', 'parasol_on_ground'],
                ['๐Ÿ–', 'beach_umbrella'],
                ['๐Ÿ', 'desert_island'],
                ['โ›ฐ', 'mountain'],
                ['๐Ÿ”', 'mountain_snow'],
                ['๐Ÿ—ป', 'mount_fuji'],
                ['๐ŸŒ‹', 'volcano'],
                ['๐Ÿœ', 'desert'],
                ['๐Ÿ•', 'camping'],
                ['โ›บ๏ธ', 'tent'],
                ['๐Ÿ›ค', 'railway_track'],
                ['๐Ÿ›ฃ', 'motorway'],
                ['๐Ÿ—', 'building_construction'],
                ['๐Ÿญ', 'factory'],
                ['๐Ÿ ', 'house'],
                ['๐Ÿก', 'house_with_garden'],
                ['๐Ÿ˜', 'houses'],
                ['๐Ÿš', 'derelict_house'],
                ['๐Ÿข', 'office'],
                ['๐Ÿฌ', 'department_store'],
                ['๐Ÿฃ', 'post_office'],
                ['๐Ÿค', 'european_post_office'],
                ['๐Ÿฅ', 'hospital'],
                ['๐Ÿฆ', 'bank'],
                ['๐Ÿจ', 'hotel'],
                ['๐Ÿช', 'convenience_store'],
                ['๐Ÿซ', 'school'],
                ['๐Ÿฉ', 'love_hotel'],
                ['๐Ÿ’’', 'wedding'],
                ['๐Ÿ›', 'classical_building'],
                ['โ›ช๏ธ', 'church'],
                ['๐Ÿ•Œ', 'mosque'],
                ['๐Ÿ•', 'synagogue'],
                ['๐Ÿ•‹', 'kaaba'],
                ['โ›ฉ', 'shinto_shrine'],
                ['๐Ÿ—พ', 'japan'],
                ['๐ŸŽ‘', 'rice_scene'],
                ['๐Ÿž', 'national_park'],
                ['๐ŸŒ…', 'sunrise'],
                ['๐ŸŒ„', 'sunrise_over_mountains'],
                ['๐ŸŒ ', 'stars'],
                ['๐ŸŽ‡', 'sparkler'],
                ['๐ŸŽ†', 'fireworks'],
                ['๐ŸŒ‡', 'city_sunrise'],
                ['๐ŸŒ†', 'city_sunset'],
                ['๐Ÿ™', 'cityscape'],
                ['๐ŸŒƒ', 'night_with_stars'],
                ['๐ŸŒŒ', 'milky_way'],
                ['๐ŸŒ‰', 'bridge_at_night'],
                ['๐ŸŒ', 'foggy']
            ],
            name: 'Places',
            icon: ['๐Ÿš—', 'car']
        },
        {
            emojis: [
                ['โŒš๏ธ', 'watch'],
                ['๐Ÿ“ฑ', 'iphone'],
                ['๐Ÿ“ฒ', 'calling'],
                ['๐Ÿ’ป', 'computer'],
                ['โŒจ๏ธ', 'keyboard'],
                ['๐Ÿ–ฅ', 'desktop_computer'],
                ['๐Ÿ–จ', 'printer'],
                ['๐Ÿ–ฑ', 'computer_mouse'],
                ['๐Ÿ–ฒ', 'trackball'],
                ['๐Ÿ•น', 'joystick'],
                ['๐Ÿ—œ', 'clamp'],
                ['๐Ÿ’ฝ', 'minidisc'],
                ['๐Ÿ’พ', 'floppy_disk'],
                ['๐Ÿ’ฟ', 'cd'],
                ['๐Ÿ“€', 'dvd'],
                ['๐Ÿ“ผ', 'vhs'],
                ['๐Ÿ“ท', 'camera'],
                ['๐Ÿ“ธ', 'camera_flash'],
                ['๐Ÿ“น', 'video_camera'],
                ['๐ŸŽฅ', 'movie_camera'],
                ['๐Ÿ“ฝ', 'film_projector'],
                ['๐ŸŽž', 'film_strip'],
                ['๐Ÿ“ž', 'telephone_receiver'],
                ['โ˜Ž๏ธ', 'phone'],
                ['๐Ÿ“Ÿ', 'pager'],
                ['๐Ÿ“ ', 'fax'],
                ['๐Ÿ“บ', 'tv'],
                ['๐Ÿ“ป', 'radio'],
                ['๐ŸŽ™', 'studio_microphone'],
                ['๐ŸŽš', 'level_slider'],
                ['๐ŸŽ›', 'control_knobs'],
                ['โฑ', 'stopwatch'],
                ['โฒ', 'timer_clock'],
                ['โฐ', 'alarm_clock'],
                ['๐Ÿ•ฐ', 'mantelpiece_clock'],
                ['โŒ›๏ธ', 'hourglass'],
                ['โณ', 'hourglass_flowing_sand'],
                ['๐Ÿ“ก', 'satellite'],
                ['๐Ÿ”‹', 'battery'],
                ['๐Ÿ”Œ', 'electric_plug'],
                ['๐Ÿ’ก', 'bulb'],
                ['๐Ÿ”ฆ', 'flashlight'],
                ['๐Ÿ•ฏ', 'candle'],
                ['๐Ÿ—‘', 'wastebasket'],
                ['๐Ÿ›ข', 'oil_drum'],
                ['๐Ÿ’ธ', 'money_with_wings'],
                ['๐Ÿ’ต', 'dollar'],
                ['๐Ÿ’ด', 'yen'],
                ['๐Ÿ’ถ', 'euro'],
                ['๐Ÿ’ท', 'pound'],
                ['๐Ÿ’ฐ', 'moneybag'],
                ['๐Ÿ’ณ', 'credit_card'],
                ['๐Ÿ’Ž', 'gem'],
                ['โš–๏ธ', 'balance_scale'],
                ['๐Ÿ”ง', 'wrench'],
                ['๐Ÿ”จ', 'hammer'],
                ['โš’', 'hammer_and_pick'],
                ['๐Ÿ› ', 'hammer_and_wrench'],
                ['โ›', 'pick'],
                ['๐Ÿ”ฉ', 'nut_and_bolt'],
                ['โš™๏ธ', 'gear'],
                ['โ›“', 'chains'],
                ['๐Ÿ”ซ', 'gun'],
                ['๐Ÿ’ฃ', 'bomb'],
                ['๐Ÿ”ช', 'hocho'],
                ['๐Ÿ—ก', 'dagger'],
                ['โš”๏ธ', 'crossed_swords'],
                ['๐Ÿ›ก', 'shield'],
                ['๐Ÿšฌ', 'smoking'],
                ['โšฐ๏ธ', 'coffin'],
                ['โšฑ๏ธ', 'funeral_urn'],
                ['๐Ÿบ', 'amphora'],
                ['๐Ÿ”ฎ', 'crystal_ball'],
                ['๐Ÿ“ฟ', 'prayer_beads'],
                ['๐Ÿ’ˆ', 'barber'],
                ['โš—๏ธ', 'alembic'],
                ['๐Ÿ”ญ', 'telescope'],
                ['๐Ÿ”ฌ', 'microscope'],
                ['๐Ÿ•ณ', 'hole'],
                ['๐Ÿ’Š', 'pill'],
                ['๐Ÿ’‰', 'syringe'],
                ['๐ŸŒก', 'thermometer'],
                ['๐Ÿšฝ', 'toilet'],
                ['๐Ÿšฐ', 'potable_water'],
                ['๐Ÿšฟ', 'shower'],
                ['๐Ÿ›', 'bathtub'],
                ['๐Ÿ›€', 'bath'],
                ['๐Ÿ›Ž', 'bellhop_bell'],
                ['๐Ÿ”‘', 'key'],
                ['๐Ÿ—', 'old_key'],
                ['๐Ÿšช', 'door'],
                ['๐Ÿ›‹', 'couch_and_lamp'],
                ['๐Ÿ›', 'bed'],
                ['๐Ÿ›Œ', 'sleeping_bed'],
                ['๐Ÿ–ผ', 'framed_picture'],
                ['๐Ÿ›', 'shopping'],
                ['๐Ÿ›’', 'shopping_cart'],
                ['๐ŸŽ', 'gift'],
                ['๐ŸŽˆ', 'balloon'],
                ['๐ŸŽ', 'flags'],
                ['๐ŸŽ€', 'ribbon'],
                ['๐ŸŽŠ', 'confetti_ball'],
                ['๐ŸŽ‰', 'tada'],
                ['๐ŸŽŽ', 'dolls'],
                ['๐Ÿฎ', 'izakaya_lantern'],
                ['๐ŸŽ', 'wind_chime'],
                ['โœ‰๏ธ', 'email'],
                ['๐Ÿ“ฉ', 'envelope_with_arrow'],
                ['๐Ÿ“จ', 'incoming_envelope'],
                ['๐Ÿ“ง', 'e-mail'],
                ['๐Ÿ’Œ', 'love_letter'],
                ['๐Ÿ“ฅ', 'inbox_tray'],
                ['๐Ÿ“ค', 'outbox_tray'],
                ['๐Ÿ“ฆ', 'package'],
                ['๐Ÿท', 'label'],
                ['๐Ÿ“ช', 'mailbox_closed'],
                ['๐Ÿ“ซ', 'mailbox'],
                ['๐Ÿ“ฌ', 'mailbox_with_mail'],
                ['๐Ÿ“ญ', 'mailbox_with_no_mail'],
                ['๐Ÿ“ฎ', 'postbox'],
                ['๐Ÿ“ฏ', 'postal_horn'],
                ['๐Ÿ“œ', 'scroll'],
                ['๐Ÿ“ƒ', 'page_with_curl'],
                ['๐Ÿ“„', 'page_facing_up'],
                ['๐Ÿ“‘', 'bookmark_tabs'],
                ['๐Ÿ“Š', 'bar_chart'],
                ['๐Ÿ“ˆ', 'chart_with_upwards_trend'],
                ['๐Ÿ“‰', 'chart_with_downwards_trend'],
                ['๐Ÿ—’', 'spiral_notepad'],
                ['๐Ÿ—“', 'spiral_calendar'],
                ['๐Ÿ“†', 'calendar'],
                ['๐Ÿ“…', 'date'],
                ['๐Ÿ“‡', 'card_index'],
                ['๐Ÿ—ƒ', 'card_file_box'],
                ['๐Ÿ—ณ', 'ballot_box'],
                ['๐Ÿ—„', 'file_cabinet'],
                ['๐Ÿ“‹', 'clipboard'],
                ['๐Ÿ“', 'file_folder'],
                ['๐Ÿ“‚', 'open_file_folder'],
                ['๐Ÿ—‚', 'card_index_dividers'],
                ['๐Ÿ—ž', 'newspaper_roll'],
                ['๐Ÿ“ฐ', 'newspaper'],
                ['๐Ÿ““', 'notebook'],
                ['๐Ÿ“”', 'notebook_with_decorative_cover'],
                ['๐Ÿ“’', 'ledger'],
                ['๐Ÿ“•', 'closed_book'],
                ['๐Ÿ“—', 'green_book'],
                ['๐Ÿ“˜', 'blue_book'],
                ['๐Ÿ“™', 'orange_book'],
                ['๐Ÿ“š', 'books'],
                ['๐Ÿ“–', 'book'],
                ['๐Ÿ”–', 'bookmark'],
                ['๐Ÿ”—', 'link'],
                ['๐Ÿ“Ž', 'paperclip'],
                ['๐Ÿ–‡', 'paperclips'],
                ['๐Ÿ“', 'triangular_ruler'],
                ['๐Ÿ“', 'straight_ruler'],
                ['๐Ÿ“Œ', 'pushpin'],
                ['๐Ÿ“', 'round_pushpin'],
                ['โœ‚๏ธ', 'scissors'],
                ['๐Ÿ–Š', 'pen'],
                ['๐Ÿ–‹', 'fountain_pen'],
                ['โœ’๏ธ', 'black_nib'],
                ['๐Ÿ–Œ', 'paintbrush'],
                ['๐Ÿ–', 'crayon'],
                ['๐Ÿ“', 'memo'],
                ['โœ๏ธ', 'pencil2'],
                ['๐Ÿ”', 'mag'],
                ['๐Ÿ”Ž', 'mag_right'],
                ['๐Ÿ”', 'lock_with_ink_pen'],
                ['๐Ÿ”', 'closed_lock_with_key'],
                ['๐Ÿ”’', 'lock'],
                ['๐Ÿ”“', 'unlock']
            ],
            name: 'Objects',
            icon: ['๐Ÿ””', 'bell']
        },
        {
            emojis: [
                ['โค๏ธ', 'heart'],
                ['๐Ÿ’›', 'yellow_heart'],
                ['๐Ÿ’š', 'green_heart'],
                ['๐Ÿ’™', 'blue_heart'],
                ['๐Ÿ’œ', 'purple_heart'],
                ['๐Ÿ–ค', 'black_heart'],
                ['๐Ÿ’”', 'broken_heart'],
                ['โฃ๏ธ', 'heavy_heart_exclamation'],
                ['๐Ÿ’•', 'two_hearts'],
                ['๐Ÿ’ž', 'revolving_hearts'],
                ['๐Ÿ’“', 'heartbeat'],
                ['๐Ÿ’—', 'heartpulse'],
                ['๐Ÿ’–', 'sparkling_heart'],
                ['๐Ÿ’˜', 'cupid'],
                ['๐Ÿ’', 'gift_heart'],
                ['๐Ÿ’Ÿ', 'heart_decoration'],
                ['โ˜ฎ๏ธ', 'peace_symbol'],
                ['โœ๏ธ', 'latin_cross'],
                ['โ˜ช๏ธ', 'star_and_crescent'],
                ['๐Ÿ•‰', 'om'],
                ['โ˜ธ๏ธ', 'wheel_of_dharma'],
                ['โœก๏ธ', 'star_of_david'],
                ['๐Ÿ”ฏ', 'six_pointed_star'],
                ['๐Ÿ•Ž', 'menorah'],
                ['โ˜ฏ๏ธ', 'yin_yang'],
                ['โ˜ฆ๏ธ', 'orthodox_cross'],
                ['๐Ÿ›', 'place_of_worship'],
                ['โ›Ž', 'ophiuchus'],
                ['โ™ˆ๏ธ', 'aries'],
                ['โ™‰๏ธ', 'taurus'],
                ['โ™Š๏ธ', 'gemini'],
                ['โ™‹๏ธ', 'cancer'],
                ['โ™Œ๏ธ', 'leo'],
                ['โ™๏ธ', 'virgo'],
                ['โ™Ž๏ธ', 'libra'],
                ['โ™๏ธ', 'scorpius'],
                ['โ™๏ธ', 'sagittarius'],
                ['โ™‘๏ธ', 'capricorn'],
                ['โ™’๏ธ', 'aquarius'],
                ['โ™“๏ธ', 'pisces'],
                ['๐Ÿ†”', 'id'],
                ['โš›๏ธ', 'atom_symbol'],
                ['๐Ÿ‰‘', 'accept'],
                ['โ˜ข๏ธ', 'radioactive'],
                ['โ˜ฃ๏ธ', 'biohazard'],
                ['๐Ÿ“ด', 'mobile_phone_off'],
                ['๐Ÿ“ณ', 'vibration_mode'],
                ['๐Ÿˆถ', 'u6709'],
                ['๐Ÿˆš๏ธ', 'u7121'],
                ['๐Ÿˆธ', 'u7533'],
                ['๐Ÿˆบ', 'u55b6'],
                ['๐Ÿˆท๏ธ', 'u6708'],
                ['โœด๏ธ', 'eight_pointed_black_star'],
                ['๐Ÿ†š', 'vs'],
                ['๐Ÿ’ฎ', 'white_flower'],
                ['๐Ÿ‰', 'ideograph_advantage'],
                ['ใŠ™๏ธ', 'secret'],
                ['ใŠ—๏ธ', 'congratulations'],
                ['๐Ÿˆด', 'u5408'],
                ['๐Ÿˆต', 'u6e80'],
                ['๐Ÿˆน', 'u5272'],
                ['๐Ÿˆฒ', 'u7981'],
                ['๐Ÿ…ฐ๏ธ', 'a'],
                ['๐Ÿ…ฑ๏ธ', 'b'],
                ['๐Ÿ†Ž', 'ab'],
                ['๐Ÿ†‘', 'cl'],
                ['๐Ÿ…พ๏ธ', 'o2'],
                ['๐Ÿ†˜', 'sos'],
                ['โŒ', 'x'],
                ['โญ•๏ธ', 'o'],
                ['๐Ÿ›‘', 'stop_sign'],
                ['โ›”๏ธ', 'no_entry'],
                ['๐Ÿ“›', 'name_badge'],
                ['๐Ÿšซ', 'no_entry_sign'],
                ['๐Ÿ’ฏ', '100'],
                ['๐Ÿ’ข', 'anger'],
                ['โ™จ๏ธ', 'hotsprings'],
                ['๐Ÿšท', 'no_pedestrians'],
                ['๐Ÿšฏ', 'do_not_litter'],
                ['๐Ÿšณ', 'no_bicycles'],
                ['๐Ÿšฑ', 'non-potable_water'],
                ['๐Ÿ”ž', 'underage'],
                ['๐Ÿ“ต', 'no_mobile_phones'],
                ['๐Ÿšญ', 'no_smoking'],
                ['โ—๏ธ', 'exclamation'],
                ['โ•', 'grey_exclamation'],
                ['โ“', 'question'],
                ['โ”', 'grey_question'],
                ['โ€ผ๏ธ', 'bangbang'],
                ['โ‰๏ธ', 'interrobang'],
                ['๐Ÿ”…', 'low_brightness'],
                ['๐Ÿ”†', 'high_brightness'],
                ['ใ€ฝ๏ธ', 'part_alternation_mark'],
                ['โš ๏ธ', 'warning'],
                ['๐Ÿšธ', 'children_crossing'],
                ['๐Ÿ”ฑ', 'trident'],
                ['โšœ๏ธ', 'fleur_de_lis'],
                ['๐Ÿ”ฐ', 'beginner'],
                ['โ™ป๏ธ', 'recycle'],
                ['โœ…', 'white_check_mark'],
                ['๐Ÿˆฏ๏ธ', 'u6307'],
                ['๐Ÿ’น', 'chart'],
                ['โ‡๏ธ', 'sparkle'],
                ['โœณ๏ธ', 'eight_spoked_asterisk'],
                ['โŽ', 'negative_squared_cross_mark'],
                ['๐ŸŒ', 'globe_with_meridians'],
                ['๐Ÿ’ ', 'diamond_shape_with_a_dot_inside'],
                ['โ“‚๏ธ', 'm'],
                ['๐ŸŒ€', 'cyclone'],
                ['๐Ÿ’ค', 'zzz'],
                ['๐Ÿง', 'atm'],
                ['๐Ÿšพ', 'wc'],
                ['โ™ฟ๏ธ', 'wheelchair'],
                ['๐Ÿ…ฟ๏ธ', 'parking'],
                ['๐Ÿˆณ', 'u7a7a'],
                ['๐Ÿˆ‚๏ธ', 'sa'],
                ['๐Ÿ›‚', 'passport_control'],
                ['๐Ÿ›ƒ', 'customs'],
                ['๐Ÿ›„', 'baggage_claim'],
                ['๐Ÿ›…', 'left_luggage'],
                ['๐Ÿšน', 'mens'],
                ['๐Ÿšบ', 'womens'],
                ['๐Ÿšผ', 'baby_symbol'],
                ['๐Ÿšป', 'restroom'],
                ['๐Ÿšฎ', 'put_litter_in_its_place'],
                ['๐ŸŽฆ', 'cinema'],
                ['๐Ÿ“ถ', 'signal_strength'],
                ['๐Ÿˆ', 'koko'],
                ['๐Ÿ”ฃ', 'symbols'],
                ['โ„น๏ธ', 'information_source'],
                ['๐Ÿ”ค', 'abc'],
                ['๐Ÿ”ก', 'abcd'],
                ['๐Ÿ” ', 'capital_abcd'],
                ['๐Ÿ†–', 'ng'],
                ['๐Ÿ†—', 'ok'],
                ['๐Ÿ†™', 'up'],
                ['๐Ÿ†’', 'cool'],
                ['๐Ÿ†•', 'new'],
                ['๐Ÿ†“', 'free'],
                ['0๏ธโƒฃ', 'zero'],
                ['1๏ธโƒฃ', 'one'],
                ['2๏ธโƒฃ', 'two'],
                ['3๏ธโƒฃ', 'three'],
                ['4๏ธโƒฃ', 'four'],
                ['5๏ธโƒฃ', 'five'],
                ['6๏ธโƒฃ', 'six'],
                ['7๏ธโƒฃ', 'seven'],
                ['8๏ธโƒฃ', 'eight'],
                ['9๏ธโƒฃ', 'nine'],
                ['๐Ÿ”Ÿ', 'keycap_ten'],
                ['๐Ÿ”ข', '1234'],
                ['#๏ธโƒฃ', 'hash'],
                ['*๏ธโƒฃ', 'asterisk'],
                ['โ–ถ๏ธ', 'arrow_forward'],
                ['โธ', 'pause_button'],
                ['โฏ', 'play_or_pause_button'],
                ['โน', 'stop_button'],
                ['โบ', 'record_button'],
                ['โญ', 'next_track_button'],
                ['โฎ', 'previous_track_button'],
                ['โฉ', 'fast_forward'],
                ['โช', 'rewind'],
                ['โซ', 'arrow_double_up'],
                ['โฌ', 'arrow_double_down'],
                ['โ—€๏ธ', 'arrow_backward'],
                ['๐Ÿ”ผ', 'arrow_up_small'],
                ['๐Ÿ”ฝ', 'arrow_down_small'],
                ['โžก๏ธ', 'arrow_right'],
                ['โฌ…๏ธ', 'arrow_left'],
                ['โฌ†๏ธ', 'arrow_up'],
                ['โฌ‡๏ธ', 'arrow_down'],
                ['โ†—๏ธ', 'arrow_upper_right'],
                ['โ†˜๏ธ', 'arrow_lower_right'],
                ['โ†™๏ธ', 'arrow_lower_left'],
                ['โ†–๏ธ', 'arrow_upper_left'],
                ['โ†•๏ธ', 'arrow_up_down'],
                ['โ†”๏ธ', 'left_right_arrow'],
                ['โ†ช๏ธ', 'arrow_right_hook'],
                ['โ†ฉ๏ธ', 'leftwards_arrow_with_hook'],
                ['โคด๏ธ', 'arrow_heading_up'],
                ['โคต๏ธ', 'arrow_heading_down'],
                ['๐Ÿ”€', 'twisted_rightwards_arrows'],
                ['๐Ÿ”', 'repeat'],
                ['๐Ÿ”‚', 'repeat_one'],
                ['๐Ÿ”„', 'arrows_counterclockwise'],
                ['๐Ÿ”ƒ', 'arrows_clockwise'],
                ['๐ŸŽต', 'musical_note'],
                ['๐ŸŽถ', 'notes'],
                ['โž•', 'heavy_plus_sign'],
                ['โž–', 'heavy_minus_sign'],
                ['โž—', 'heavy_division_sign'],
                ['โœ–๏ธ', 'heavy_multiplication_x'],
                ['๐Ÿ’ฒ', 'heavy_dollar_sign'],
                ['๐Ÿ’ฑ', 'currency_exchange'],
                ['โ„ข๏ธ', 'tm'],
                ['ยฉ๏ธ', 'copyright'],
                ['ยฎ๏ธ', 'registered'],
                ['ใ€ฐ๏ธ', 'wavy_dash'],
                ['โžฐ', 'curly_loop'],
                ['โžฟ', 'loop'],
                ['๐Ÿ”š', 'end'],
                ['๐Ÿ”™', 'back'],
                ['๐Ÿ”›', 'on'],
                ['๐Ÿ”', 'top'],
                ['๐Ÿ”œ', 'soon'],
                ['โœ”๏ธ', 'heavy_check_mark'],
                ['โ˜‘๏ธ', 'ballot_box_with_check'],
                ['๐Ÿ”˜', 'radio_button'],
                ['โšช๏ธ', 'white_circle'],
                ['โšซ๏ธ', 'black_circle'],
                ['๐Ÿ”ด', 'red_circle'],
                ['๐Ÿ”ต', 'large_blue_circle'],
                ['๐Ÿ”บ', 'small_red_triangle'],
                ['๐Ÿ”ป', 'small_red_triangle_down'],
                ['๐Ÿ”ธ', 'small_orange_diamond'],
                ['๐Ÿ”น', 'small_blue_diamond'],
                ['๐Ÿ”ถ', 'large_orange_diamond'],
                ['๐Ÿ”ท', 'large_blue_diamond'],
                ['๐Ÿ”ณ', 'white_square_button'],
                ['๐Ÿ”ฒ', 'black_square_button'],
                ['โ–ช๏ธ', 'black_small_square'],
                ['โ–ซ๏ธ', 'white_small_square'],
                ['โ—พ๏ธ', 'black_medium_small_square'],
                ['โ—ฝ๏ธ', 'white_medium_small_square'],
                ['โ—ผ๏ธ', 'black_medium_square'],
                ['โ—ป๏ธ', 'white_medium_square'],
                ['โฌ›๏ธ', 'black_large_square'],
                ['โฌœ๏ธ', 'white_large_square'],
                ['๐Ÿ”ˆ', 'speaker'],
                ['๐Ÿ”‡', 'mute'],
                ['๐Ÿ”‰', 'sound'],
                ['๐Ÿ”Š', 'loud_sound'],
                ['๐Ÿ””', 'bell'],
                ['๐Ÿ”•', 'no_bell'],
                ['๐Ÿ“ฃ', 'mega'],
                ['๐Ÿ“ข', 'loudspeaker'],
                ['๐Ÿ‘โ€๐Ÿ—จ', 'eye_speech_bubble'],
                ['๐Ÿ’ฌ', 'speech_balloon'],
                ['๐Ÿ’ญ', 'thought_balloon'],
                ['๐Ÿ—ฏ', 'right_anger_bubble'],
                ['โ™ ๏ธ', 'spades'],
                ['โ™ฃ๏ธ', 'clubs'],
                ['โ™ฅ๏ธ', 'hearts'],
                ['โ™ฆ๏ธ', 'diamonds'],
                ['๐Ÿƒ', 'black_joker'],
                ['๐ŸŽด', 'flower_playing_cards'],
                ['๐Ÿ€„๏ธ', 'mahjong'],
                ['๐Ÿ•', 'clock1'],
                ['๐Ÿ•‘', 'clock2'],
                ['๐Ÿ•’', 'clock3'],
                ['๐Ÿ•“', 'clock4'],
                ['๐Ÿ•”', 'clock5'],
                ['๐Ÿ••', 'clock6'],
                ['๐Ÿ•–', 'clock7'],
                ['๐Ÿ•—', 'clock8'],
                ['๐Ÿ•˜', 'clock9'],
                ['๐Ÿ•™', 'clock10'],
                ['๐Ÿ•š', 'clock11'],
                ['๐Ÿ•›', 'clock12'],
                ['๐Ÿ•œ', 'clock130'],
                ['๐Ÿ•', 'clock230'],
                ['๐Ÿ•ž', 'clock330'],
                ['๐Ÿ•Ÿ', 'clock430'],
                ['๐Ÿ• ', 'clock530'],
                ['๐Ÿ•ก', 'clock630'],
                ['๐Ÿ•ข', 'clock730'],
                ['๐Ÿ•ฃ', 'clock830'],
                ['๐Ÿ•ค', 'clock930'],
                ['๐Ÿ•ฅ', 'clock1030'],
                ['๐Ÿ•ฆ', 'clock1130'],
                ['๐Ÿ•ง', 'clock1230']
            ],
            name: 'Symbols',
            icon: ['๐Ÿ” ', 'capital_abcd']
        }
    ];

    var EmojiListComponent = /** @class */ (function () {
        function EmojiListComponent() {
            this.emojiSelectionEmitter = new core.EventEmitter();
        }
        EmojiListComponent.prototype.selectCategory = function (event) {
            this.emojiCategoryComponents.forEach(function (categoryCmp) {
                if (categoryCmp['category'].name === event.name) {
                    categoryCmp.scrollIntoView();
                }
            });
        };
        __decorate([
            core.ViewChildren(core.forwardRef(function () { return EmojiCategoryComponent; })),
            __metadata("design:type", core.QueryList)
        ], EmojiListComponent.prototype, "emojiCategoryComponents", void 0);
        __decorate([
            core.Input('emojis'),
            __metadata("design:type", Object)
        ], EmojiListComponent.prototype, "emojis", void 0);
        __decorate([
            core.Output('emoji-selection'),
            __metadata("design:type", Object)
        ], EmojiListComponent.prototype, "emojiSelectionEmitter", void 0);
        EmojiListComponent = __decorate([
            core.Component({
                selector: 'emoji-list',
                template: "\n  <div class=\"emoji-list\">\n    <ng-container *ngFor=\"let emojiCategory of emojis | notEmptyEmojiCategory\">\n      <emoji-category [category]=\"emojiCategory\"></emoji-category>\n      <div class=\"emoji-buttons\">\n        <emoji-button \n        *ngFor=\"let emoji of emojiCategory.emojis\"\n        (selection)=\"emojiSelectionEmitter.emit($event)\"\n        [emoji]=\"emoji\"></emoji-button>\n      </div>\n    </ng-container>\n  </div>\n  ",
                styles: [":host{overflow-y:auto}.emoji-list{padding:0 10px 10px}.emoji-buttons{display:flex;justify-content:center;flex-wrap:wrap;margin:5px 0}"]
            }),
            __metadata("design:paramtypes", [])
        ], EmojiListComponent);
        return EmojiListComponent;
    }());

    var EmojiContentComponent = /** @class */ (function () {
        function EmojiContentComponent() {
            this.emojiSelectionEmitter = new core.EventEmitter();
            this._emojis = EMOJIS;
            this.emojis = this._emojis.slice();
            this.emojisCategories = this._emojis.map(function (category) { return Object.assign({}, category, { emojis: [] }); });
        }
        EmojiContentComponent.prototype.searchHandler = function (value) {
            var _this = this;
            var filteredEmojis = this.emojisCategories.map(function (category) { return Object.assign({}, category, { emojis: [] }); });
            value = value.replace(/-/g, '').toLowerCase();
            Object.keys(this._emojis).forEach(function (i) {
                var category = _this._emojis[i];
                category.emojis.forEach(function (emoji) {
                    if (emoji[1].indexOf(value) !== -1) {
                        filteredEmojis[i].emojis.push(emoji);
                    }
                });
            });
            this.emojis = filteredEmojis;
        };
        EmojiContentComponent.prototype.categorySelectionHandler = function (event) {
            this.emojiListComponent.selectCategory(event);
        };
        __decorate([
            core.ViewChild(core.forwardRef(function () { return EmojiListComponent; }), { static: true }),
            __metadata("design:type", EmojiListComponent)
        ], EmojiContentComponent.prototype, "emojiListComponent", void 0);
        __decorate([
            core.Output('emoji-selection'),
            __metadata("design:type", Object)
        ], EmojiContentComponent.prototype, "emojiSelectionEmitter", void 0);
        EmojiContentComponent = __decorate([
            core.Component({
                selector: 'emoji-content',
                template: "\n  <emoji-header \n    [emojisCategories]=\"emojisCategories\"\n    (categorySelection)=\"categorySelectionHandler($event)\"\n    (search)=\"searchHandler($event)\"></emoji-header>\n  <emoji-list [emojis]=\"emojis\" (emoji-selection)=\"emojiSelectionEmitter.emit($event)\"></emoji-list>\n  <emoji-footer></emoji-footer>\n  ",
                styles: [":host{display:flex;flex-direction:column;width:100vw;height:314px;border-radius:3px;background:#fff;text-align:left;box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}@media (min-width:258px){:host{width:258px}}emoji-list{flex-grow:1}"]
            }),
            __metadata("design:paramtypes", [])
        ], EmojiContentComponent);
        return EmojiContentComponent;
    }());

    var EmojiFooterComponent = /** @class */ (function () {
        function EmojiFooterComponent() {
        }
        EmojiFooterComponent = __decorate([
            core.Component({
                selector: 'emoji-footer',
                template: "\n  <footer class=\"emoji-footer\"></footer>\n  ",
                styles: [".emoji-footer{display:flex;align-items:center;justify-content:space-between;border-top:1px solid #f9f9f9;border-radius:0 0 3px 3px;padding:10px;background:#fcfcfc}"]
            }),
            __metadata("design:paramtypes", [])
        ], EmojiFooterComponent);
        return EmojiFooterComponent;
    }());

    var EmojiHeaderComponent = /** @class */ (function () {
        function EmojiHeaderComponent() {
            this.categorySelection = new core.EventEmitter();
            this.searchEmitter = new core.EventEmitter();
        }
        __decorate([
            core.Input('emojisCategories'),
            __metadata("design:type", Object)
        ], EmojiHeaderComponent.prototype, "emojisCategories", void 0);
        __decorate([
            core.Output('categorySelection'),
            __metadata("design:type", Object)
        ], EmojiHeaderComponent.prototype, "categorySelection", void 0);
        __decorate([
            core.Output('search'),
            __metadata("design:type", Object)
        ], EmojiHeaderComponent.prototype, "searchEmitter", void 0);
        EmojiHeaderComponent = __decorate([
            core.Component({
                selector: 'emoji-header',
                template: "\n  <emoji-categories [emojisCategories]=\"emojisCategories\" (categorySelection)=\"categorySelection.emit($event)\"></emoji-categories>\n  <emoji-search (search)=\"searchEmitter.emit($event)\"></emoji-search>\n  ",
                styles: [":host{display:block;border-bottom:1px solid #f9f9f9;border-radius:3px 3px 0 0;padding:10px;background:#fcfcfc}"]
            }),
            __metadata("design:paramtypes", [])
        ], EmojiHeaderComponent);
        return EmojiHeaderComponent;
    }());

    var EmojiSearchComponent = /** @class */ (function () {
        function EmojiSearchComponent() {
            var _this = this;
            this.searchEmitter = new core.EventEmitter();
            this._searchValue = new rxjs.Subject();
            this._destroyed = new rxjs.Subject();
            this._searchValue.pipe(operators.takeUntil(this._destroyed)).subscribe(function (value) {
                _this.searchEmitter.emit(value);
            });
        }
        EmojiSearchComponent.prototype.handleInputChange = function (event) {
            this._searchValue.next(event);
        };
        EmojiSearchComponent.prototype.ngOnDestroy = function () {
            this._destroyed.next(true);
        };
        __decorate([
            core.Output("search"),
            __metadata("design:type", core.EventEmitter)
        ], EmojiSearchComponent.prototype, "searchEmitter", void 0);
        __decorate([
            core.ViewChild("input", { static: true }),
            __metadata("design:type", core.ElementRef)
        ], EmojiSearchComponent.prototype, "input", void 0);
        EmojiSearchComponent = __decorate([
            core.Component({
                selector: "emoji-search",
                template: "\n    <input\n      type=\"text\"\n      autocomplete=\"off\"\n      #input\n      (input)=\"handleInputChange($event.target.value)\"\n      aria-label=\"Search\"\n      placeholder=\"Search\"\n    />\n  ",
                styles: ["input{width:100%;padding:5px 10px;border:1px solid #f0f0f0;outline:0;font-size:14px;font-weight:inherit;box-sizing:border-box}input:focus{border-color:#d7d7d7}"]
            }),
            __metadata("design:paramtypes", [])
        ], EmojiSearchComponent);
        return EmojiSearchComponent;
    }());

    var DIRECTIONS;
    (function (DIRECTIONS) {
        DIRECTIONS[DIRECTIONS["top"] = 0] = "top";
        DIRECTIONS[DIRECTIONS["bottom"] = 1] = "bottom";
        DIRECTIONS[DIRECTIONS["left"] = 2] = "left";
        DIRECTIONS[DIRECTIONS["right"] = 3] = "right";
    })(DIRECTIONS || (DIRECTIONS = {}));

    var EmojiPickerComponent = /** @class */ (function () {
        function EmojiPickerComponent(_renderer, _el) {
            var _this = this;
            this._renderer = _renderer;
            this._el = _el;
            this.selectionEmitter = new core.EventEmitter();
            this.pickerCloseEmitter = new core.EventEmitter();
            this._windowResize = new rxjs.Subject();
            this._destroyed = new rxjs.Subject();
            this._windowResize
                .pipe(operators.takeUntil(this._destroyed), operators.debounceTime(100))
                .subscribe(function (event) {
                _this.setPosition(_this._currentTarget, _this._currentDirection);
            });
        }
        EmojiPickerComponent.prototype.hide = function () {
            this._renderer.setStyle(this._el.nativeElement, "display", "none");
        };
        EmojiPickerComponent.prototype.show = function () {
            this._renderer.setStyle(this._el.nativeElement, "display", "block");
            this.setPosition(this._currentTarget, this._currentDirection);
        };
        EmojiPickerComponent.prototype.setPosition = function (target, directionCode) {
            if (directionCode === void 0) { directionCode = DIRECTIONS.bottom; }
            if (!target) {
                return console.error("Emoji-Picker: positioning failed due to missing target element or direction code");
            }
            this._renderer.setStyle(this._el.nativeElement, "transform", "");
            /** Store anchor and direction */
            this._currentTarget = target;
            this._currentDirection = directionCode;
            var targetBorders = target.nativeElement.getBoundingClientRect(), thisBorders = this._el.nativeElement.getBoundingClientRect();
            var heightCorrection = 0, widthCorrection = 0;
            /** Setting up centering of picker for all cases */
            switch (this._currentDirection) {
                case DIRECTIONS.top:
                case DIRECTIONS.bottom:
                    widthCorrection =
                        targetBorders.left -
                            thisBorders.left +
                            (targetBorders.width - thisBorders.width) / 2;
                    break;
                case DIRECTIONS.left:
                case DIRECTIONS.right:
                    heightCorrection =
                        targetBorders.top -
                            thisBorders.top +
                            (targetBorders.height - thisBorders.height) / 2;
                    break;
            }
            /** Setting up relative positioning for all cases */
            switch (this._currentDirection) {
                case DIRECTIONS.top:
                    heightCorrection = targetBorders.top - thisBorders.bottom;
                    break;
                case DIRECTIONS.left:
                    widthCorrection = targetBorders.left - thisBorders.right;
                    break;
                case DIRECTIONS.right:
                    widthCorrection = targetBorders.right - thisBorders.left;
                    break;
                case DIRECTIONS.bottom:
                    heightCorrection = targetBorders.bottom - thisBorders.top;
                    break;
            }
            /** Correcting positioning due to overflow problems */
            if (thisBorders.bottom + heightCorrection > window.innerHeight) {
                heightCorrection +=
                    window.innerHeight - (thisBorders.bottom + heightCorrection);
            }
            if (thisBorders.top + heightCorrection < 0) {
                heightCorrection -= thisBorders.top + heightCorrection;
            }
            if (thisBorders.right + widthCorrection > window.innerWidth) {
                widthCorrection +=
                    window.innerWidth - (thisBorders.right + widthCorrection);
            }
            if (thisBorders.left + widthCorrection < 0) {
                widthCorrection -= thisBorders.left + widthCorrection;
            }
            /** set the position adjustments to the emoji picker element */
            this._renderer.setStyle(this._el.nativeElement, "transform", "translate(" + widthCorrection + "px," + heightCorrection + "px)");
        };
        EmojiPickerComponent.prototype.onBackground = function (event) {
            /** internal mousedowns are ignored */
            if (event === this._lastHostMousedownEvent || event.emojiPickerExempt) {
                return;
            }
            this.pickerCloseEmitter.emit(event);
        };
        EmojiPickerComponent.prototype.ngOnDestroy = function () {
            this._destroyed.next(true);
        };
        EmojiPickerComponent.ctorParameters = function () { return [
            { type: core.Renderer2 },
            { type: core.ElementRef }
        ]; };
        __decorate([
            core.Output("emoji-select"),
            __metadata("design:type", Object)
        ], EmojiPickerComponent.prototype, "selectionEmitter", void 0);
        __decorate([
            core.Output("picker-close"),
            __metadata("design:type", Object)
        ], EmojiPickerComponent.prototype, "pickerCloseEmitter", void 0);
        EmojiPickerComponent = __decorate([
            core.Component({
                selector: "emoji-picker",
                template: "\n    <emoji-content\n      (emoji-selection)=\"selectionEmitter.emit($event)\"\n    ></emoji-content>\n  ",
                host: {
                    "(document:click)": "onBackground($event)",
                    "(click)": "_lastHostMousedownEvent = $event",
                    "(window:resize)": "_windowResize.next($event)",
                },
                styles: [":host { position: absolute; z-index: 9999; display: none; }"]
            }),
            __metadata("design:paramtypes", [core.Renderer2, core.ElementRef])
        ], EmojiPickerComponent);
        return EmojiPickerComponent;
    }());

    var EmojiEvent = /** @class */ (function () {
        function EmojiEvent(data) {
            Object.assign(this, data);
        }
        EmojiEvent.fromArray = function (emojiArray) {
            return new EmojiEvent({ char: emojiArray[0], label: emojiArray[1] });
        };
        return EmojiEvent;
    }());

    var EmojiPickerApiDirective = /** @class */ (function () {
        function EmojiPickerApiDirective(_cfr, _vcr, _el) {
            var _this = this;
            this._cfr = _cfr;
            this._vcr = _vcr;
            this._el = _el;
            this._directionCode = DIRECTIONS.bottom;
            this._searchBar = false;
            this.emojiPickerIfEmitter = new core.EventEmitter();
            this.selectEmitter = new core.EventEmitter();
            this._emojiPickerOpenState = new rxjs.Subject();
            this._destroyed = new rxjs.Subject();
            this._emojiSubs = [];
            this.initPicker();
            this._emojiPickerOpenState
                .pipe(operators.takeUntil(this._destroyed), operators.distinctUntilChanged())
                .subscribe(function (value) {
                var _a, _b, _c, _d, _e, _f;
                if (value) {
                    (_c = (_b = (_a = _this._emojiPickerRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.show) === null || _c === void 0 ? void 0 : _c.call(_b);
                }
                else {
                    (_f = (_e = (_d = _this._emojiPickerRef) === null || _d === void 0 ? void 0 : _d.instance) === null || _e === void 0 ? void 0 : _e.hide) === null || _f === void 0 ? void 0 : _f.call(_e);
                }
            });
        }
        Object.defineProperty(EmojiPickerApiDirective.prototype, "emojiPickerDirection", {
            set: function (direction) {
                if (DIRECTIONS[direction] === undefined) {
                    console.error("Emoji-Picker: direction '" + direction + "' passed as input does not exist in DIRECTIONS table, defaulting to 'bottom'");
                    this._directionCode = DIRECTIONS.bottom;
                }
                else {
                    this._directionCode = DIRECTIONS[direction];
                }
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(EmojiPickerApiDirective.prototype, "emojiPickerIf", {
            set: function (condition) {
                this._emojiPickerOpenState.next(condition);
            },
            enumerable: true,
            configurable: true
        });
        EmojiPickerApiDirective.prototype.initPicker = function () {
            var _this = this;
            this._emojiPickerFactory = this._emojiPickerFactory || this._cfr.resolveComponentFactory(EmojiPickerComponent);
            this._emojiPickerRef = this._emojiPickerRef || this._vcr.createComponent(this._emojiPickerFactory);
            this._emojiPickerRef.instance.setPosition(this._el, this._directionCode);
            this._emojiSubs.push(this._emojiPickerRef.instance.pickerCloseEmitter.subscribe(function (event) { return _this.emojiPickerIfEmitter.emit(false); }), this._emojiPickerRef.instance.selectionEmitter.subscribe(function (event) { return _this.selectEmitter.emit(EmojiEvent.fromArray(event)); }));
        };
        EmojiPickerApiDirective.prototype.closePicker = function () {
            if (!this._emojiPickerRef || !this._emojiPickerRef.destroy) {
                return;
            }
            this._emojiSubs.forEach(function (subscription) { return subscription.unsubscribe(); });
            this._emojiPickerRef.destroy();
            this._emojiSubs = [];
            delete this._emojiPickerRef;
        };
        EmojiPickerApiDirective.prototype.ngOnDestroy = function () {
            this._destroyed.next(true);
        };
        EmojiPickerApiDirective.ctorParameters = function () { return [
            { type: core.ComponentFactoryResolver },
            { type: core.ViewContainerRef },
            { type: core.ElementRef }
        ]; };
        __decorate([
            core.Input('emojiPickerDirection'),
            __metadata("design:type", String),
            __metadata("design:paramtypes", [String])
        ], EmojiPickerApiDirective.prototype, "emojiPickerDirection", null);
        __decorate([
            core.Input('emojiPickerIf'),
            __metadata("design:type", Boolean),
            __metadata("design:paramtypes", [Boolean])
        ], EmojiPickerApiDirective.prototype, "emojiPickerIf", null);
        __decorate([
            core.Output('emojiPickerIfChange'),
            __metadata("design:type", Object)
        ], EmojiPickerApiDirective.prototype, "emojiPickerIfEmitter", void 0);
        __decorate([
            core.Output('emojiPickerSelect'),
            __metadata("design:type", Object)
        ], EmojiPickerApiDirective.prototype, "selectEmitter", void 0);
        EmojiPickerApiDirective = __decorate([
            core.Directive({
                selector: '[emojiPickerIf]',
                host: {
                    '(click)': '$event.emojiPickerExempt = true' // marking off event listening on anchor
                }
            }),
            __metadata("design:paramtypes", [core.ComponentFactoryResolver,
                core.ViewContainerRef,
                core.ElementRef])
        ], EmojiPickerApiDirective);
        return EmojiPickerApiDirective;
    }());

    var CaretEvent = /** @class */ (function () {
        function CaretEvent(data) {
            Object.assign(this, data);
        }
        CaretEvent.prototype.clone = function () {
            return new CaretEvent(Object.assign({}, this, {
                caretRange: this.caretRange && this.caretRange.cloneRange ? this.caretRange.cloneRange() : this.caretRange
            }));
        };
        CaretEvent.generateNullEvent = function () {
            return new CaretEvent({
                caretOffset: 0,
                textContent: ''
            });
        };
        CaretEvent.comparePropsOfObject = function (r1, r2) {
            for (var k in r1) {
                if (r1[k] !== r2[k]) {
                    return false;
                }
            }
            return true;
        };
        CaretEvent.compare = function (e1, e2) {
            var changed = 
            /** different when either caretRange is omitted while other exists */
            (!e1.caretRange && e2.caretRange) ||
                (e1.caretRange && !e2.caretRange) ||
                /** different when offset has changed */
                (e1.caretOffset !== e2.caretOffset) ||
                /** different when textContent has changed */
                (e1.textContent !== e2.textContent) ||
                /** different when range object properties changed */
                !this.comparePropsOfObject(e1.caretRange, e2.caretRange);
            return !changed;
        };
        CaretEvent.generateCaretEvent = function (win, doc, element) {
            var caretOffset = 0, sel, caretRange, textContent = element.textContent;
            if (element.tagName.toLowerCase() === 'input') {
                return new CaretEvent({
                    caretOffset: element.selectionEnd,
                    textContent: element.value
                });
            }
            if (typeof win.getSelection != "undefined") {
                sel = win.getSelection();
                if (sel.rangeCount > 0) {
                    var range = win.getSelection().getRangeAt(0);
                    var preCaretRange = range.cloneRange();
                    preCaretRange.selectNodeContents(element);
                    preCaretRange.setEnd(range.endContainer, range.endOffset);
                    caretOffset = preCaretRange.toString().length;
                    /** Keeping a reference of the range to emit */
                    caretRange = range.cloneRange();
                }
            }
            else if ((sel = doc.selection) && sel.type != "Control") {
                var textRange = sel.createRange();
                var preCaretTextRange = doc.body.createTextRange();
                preCaretTextRange.moveToElementText(element);
                preCaretTextRange.setEndPoint("EndToEnd", textRange);
                caretOffset = preCaretTextRange.text.length;
                /** Keeping a reference of the range to emit and making it compatible */
                caretRange = textRange.duplicate();
                caretRange.insertNode = function (e) {
                    var container = document.createElement("div");
                    container.appendChild(e);
                    caretRange.pasteHTML(container.innerHTML);
                };
            }
            return new CaretEvent({
                caretOffset: caretOffset,
                caretRange: caretRange,
                textContent: textContent
            });
        };
        return CaretEvent;
    }());

    var EmojiPickerCaretDirective = /** @class */ (function () {
        function EmojiPickerCaretDirective(_el) {
            var _this = this;
            this._el = _el;
            this.caretEmitter = new core.EventEmitter();
            this._caretEvent$ = new rxjs.Subject();
            this._destroyed$ = new rxjs.Subject();
            this._lastCaretEvent = CaretEvent.generateNullEvent();
            this._caretEvent$
                .pipe(operators.takeUntil(this._destroyed$), operators.distinctUntilChanged(function (event1, event2) {
                return CaretEvent.compare(event1, event2);
            }))
                .subscribe(function (event) {
                _this.caretEmitter.emit(event);
                _this._lastCaretEvent = event.clone();
            });
        }
        Object.defineProperty(EmojiPickerCaretDirective.prototype, "doc", {
            get: function () {
                if (!this._doc) {
                    this._doc = this._el.nativeElement.ownerDocument || this._el.nativeElement.document || document;
                }
                return this._doc;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(EmojiPickerCaretDirective.prototype, "win", {
            get: function () {
                if (!this._win) {
                    this._win = this.doc.defaultView || this.doc.parentWindow || window;
                }
                return this._win;
            },
            enumerable: true,
            configurable: true
        });
        EmojiPickerCaretDirective.prototype.ngOnInit = function () {
            if (!this._el.nativeElement.getAttribute('contenteditable') && this._el.nativeElement.tagName.toLowerCase() !== 'input') {
                throw new Error('(emojiPickerPositionEmitter) should only work on contenteditable enabled or input elements');
            }
        };
        EmojiPickerCaretDirective.prototype.ngOnDestroy = function () {
            this._destroyed$.next(true);
        };
        EmojiPickerCaretDirective.prototype.updateCaretPosition = function () {
            var cEvent = CaretEvent.generateCaretEvent(this.win, this.doc, this._el.nativeElement);
            this._caretEvent$.next(cEvent);
        };
        EmojiPickerCaretDirective.prototype.updateCaretDueMutation = function () {
            var _this = this;
            var cEvent = CaretEvent.generateCaretEvent(this.win, this.doc, this._el.nativeElement);
            var textMovement = cEvent.textContent.length - this._lastCaretEvent.textContent.length;
            cEvent.caretOffset = this._lastCaretEvent.caretOffset + textMovement;
            /** change detection after DOMSubtreeModified event is weird
             * ChangeDetectorRef.detectChanges(), ChangeDetectorRef.markForCheck(), ApplicationRef.tick(), NgZone.run()
             * all of those methods did not work as expected.
             * As a temporary hack I am emitting an event after a short timeout, which is fine due to the _caretEvent$ smart stream
             */
            setTimeout(function () {
                _this._caretEvent$.next(cEvent);
            });
        };
        EmojiPickerCaretDirective.ctorParameters = function () { return [
            { type: core.ElementRef }
        ]; };
        __decorate([
            core.Output('emojiPickerCaretEmitter'),
            __metadata("design:type", Object)
        ], EmojiPickerCaretDirective.prototype, "caretEmitter", void 0);
        EmojiPickerCaretDirective = __decorate([
            core.Directive({
                selector: '[emojiPickerCaretEmitter]',
                host: {
                    '(keyup)': 'updateCaretPosition()',
                    '(mouseup)': 'updateCaretPosition()',
                    '(selectstart)': 'updateCaretPosition()',
                    '(focus)': 'updateCaretPosition()',
                    '(DOMSubtreeModified)': 'updateCaretDueMutation($event)'
                }
            }),
            __metadata("design:paramtypes", [core.ElementRef])
        ], EmojiPickerCaretDirective);
        return EmojiPickerCaretDirective;
    }());

    var EmojiEmptyCategoryPipe = /** @class */ (function () {
        function EmojiEmptyCategoryPipe() {
        }
        EmojiEmptyCategoryPipe.prototype.transform = function (categories) {
            return categories.filter(function (category) { return category.emojis.length !== 0; });
        };
        EmojiEmptyCategoryPipe = __decorate([
            core.Pipe({
                name: 'notEmptyEmojiCategory'
            })
        ], EmojiEmptyCategoryPipe);
        return EmojiEmptyCategoryPipe;
    }());

    var EmojiFallback = /** @class */ (function () {
        function EmojiFallback(domSanitizer) {
            this.domSanitizer = domSanitizer;
        }
        EmojiFallback.prototype.transform = function (emoji) {
            return !emoji || this.supportsEmoji() ? emoji : this.domSanitizer.bypassSecurityTrustHtml(twemoji.parse(emoji.trim()));
        };
        // Solution: https://stackoverflow.com/questions/45576748/how-can-i-detect-rendering-support-for-emoji-in-javascript
        EmojiFallback.prototype.supportsEmoji = function () {
            var ctx = document.createElement("canvas").getContext("2d");
            ctx.fillText("๐Ÿ™ƒ", -2, 4);
            return ctx.getImageData(0, 0, 1, 1).data[3] > 0;
        };
        EmojiFallback.ctorParameters = function () { return [
            { type: platformBrowser.DomSanitizer }
        ]; };
        EmojiFallback = __decorate([
            core.Pipe({
                name: 'emojiFallback'
            }),
            __metadata("design:paramtypes", [platformBrowser.DomSanitizer])
        ], EmojiFallback);
        return EmojiFallback;
    }());

    var NgxEmojiPickerModule = /** @class */ (function () {
        function NgxEmojiPickerModule() {
        }
        NgxEmojiPickerModule_1 = NgxEmojiPickerModule;
        NgxEmojiPickerModule.forRoot = function () {
            return {
                ngModule: NgxEmojiPickerModule_1,
                providers: []
            };
        };
        var NgxEmojiPickerModule_1;
        NgxEmojiPickerModule = NgxEmojiPickerModule_1 = __decorate([
            core.NgModule({
                declarations: [
                    EmojiPickerApiDirective,
                    EmojiPickerCaretDirective,
                    EmojiButtonComponent,
                    EmojiContentComponent,
                    EmojiPickerComponent,
                    EmojiListComponent,
                    EmojiHeaderComponent,
                    EmojiSearchComponent,
                    EmojiCategoriesComponent,
                    EmojiCategoryComponent,
                    EmojiFooterComponent,
                    EmojiEmptyCategoryPipe,
                    EmojiFallback
                ],
                imports: [
                    common.CommonModule
                ],
                exports: [
                    EmojiPickerApiDirective,
                    EmojiPickerCaretDirective,
                    EmojiButtonComponent,
                    EmojiContentComponent,
                    EmojiPickerComponent,
                    EmojiListComponent,
                    EmojiHeaderComponent,
                    EmojiSearchComponent,
                    EmojiCategoriesComponent,
                    EmojiCategoryComponent,
                    EmojiFooterComponent
                ],
                providers: [],
                entryComponents: [EmojiPickerComponent]
            })
        ], NgxEmojiPickerModule);
        return NgxEmojiPickerModule;
    }());

    exports.CaretEvent = CaretEvent;
    exports.EmojiButtonComponent = EmojiButtonComponent;
    exports.EmojiCategoriesComponent = EmojiCategoriesComponent;
    exports.EmojiCategoryComponent = EmojiCategoryComponent;
    exports.EmojiContentComponent = EmojiContentComponent;
    exports.EmojiEvent = EmojiEvent;
    exports.EmojiFooterComponent = EmojiFooterComponent;
    exports.EmojiHeaderComponent = EmojiHeaderComponent;
    exports.EmojiListComponent = EmojiListComponent;
    exports.EmojiPickerApiDirective = EmojiPickerApiDirective;
    exports.EmojiPickerCaretDirective = EmojiPickerCaretDirective;
    exports.EmojiPickerComponent = EmojiPickerComponent;
    exports.EmojiSearchComponent = EmojiSearchComponent;
    exports.NgxEmojiPickerModule = NgxEmojiPickerModule;
    exports.ษตa = EmojiEmptyCategoryPipe;
    exports.ษตb = EmojiFallback;

    Object.defineProperty(exports, '__esModule', { value: true });

})));
//# sourceMappingURL=ngx-emoji-picker.umd.js.map