@ctrl/ngx-emoji-mart 5.1.1 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +11 -19
  2. package/anchors.component.d.ts +3 -0
  3. package/category.component.d.ts +7 -2
  4. package/ctrl-ngx-emoji-mart.d.ts +1 -0
  5. package/emoji-frequently.service.d.ts +3 -0
  6. package/emoji-search.service.d.ts +3 -0
  7. package/esm2020/anchors.component.mjs +83 -0
  8. package/esm2020/category.component.mjs +386 -0
  9. package/{esm2015/ctrl-ngx-emoji-mart.js → esm2020/ctrl-ngx-emoji-mart.mjs} +0 -0
  10. package/{esm2015/emoji-frequently.service.js → esm2020/emoji-frequently.service.mjs} +10 -8
  11. package/esm2020/emoji-search.service.mjs +177 -0
  12. package/{esm2015/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.js → esm2020/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.mjs} +0 -0
  13. package/{esm2015/ngx-emoji/data/categories.js → esm2020/ngx-emoji/data/categories.mjs} +4 -4
  14. package/{esm2015/ngx-emoji/data/data.interfaces.js → esm2020/ngx-emoji/data/data.interfaces.mjs} +0 -0
  15. package/esm2020/ngx-emoji/data/emojis.mjs +29543 -0
  16. package/{esm2015/ngx-emoji/data/skins.js → esm2020/ngx-emoji/data/skins.mjs} +0 -0
  17. package/esm2020/ngx-emoji/emoji.component.mjs +236 -0
  18. package/esm2020/ngx-emoji/emoji.module.mjs +18 -0
  19. package/esm2020/ngx-emoji/emoji.service.mjs +144 -0
  20. package/{esm2015/ngx-emoji/index.js → esm2020/ngx-emoji/index.mjs} +0 -0
  21. package/esm2020/picker.component.mjs +505 -0
  22. package/esm2020/picker.module.mjs +49 -0
  23. package/esm2020/preview.component.mjs +181 -0
  24. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  25. package/esm2020/search.component.mjs +165 -0
  26. package/esm2020/skins.component.mjs +108 -0
  27. package/esm2020/svgs/index.mjs +18 -0
  28. package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +0 -0
  29. package/fesm2015/{ctrl-ngx-emoji-mart-ngx-emoji.js → ctrl-ngx-emoji-mart-ngx-emoji.mjs} +24809 -18497
  30. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -0
  31. package/fesm2015/{ctrl-ngx-emoji-mart.js → ctrl-ngx-emoji-mart.mjs} +666 -325
  32. package/fesm2015/ctrl-ngx-emoji-mart.mjs.map +1 -0
  33. package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs +31829 -0
  34. package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -0
  35. package/fesm2020/ctrl-ngx-emoji-mart.mjs +1751 -0
  36. package/fesm2020/ctrl-ngx-emoji-mart.mjs.map +1 -0
  37. package/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.d.ts +1 -0
  38. package/ngx-emoji/emoji.component.d.ts +3 -0
  39. package/ngx-emoji/emoji.module.d.ts +6 -0
  40. package/ngx-emoji/emoji.service.d.ts +3 -0
  41. package/ngx-emoji/package.json +6 -7
  42. package/package.json +29 -10
  43. package/picker.component.d.ts +3 -0
  44. package/picker.module.d.ts +13 -0
  45. package/preview.component.d.ts +4 -1
  46. package/search.component.d.ts +3 -0
  47. package/skins.component.d.ts +6 -3
  48. package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.js +0 -25819
  49. package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.js.map +0 -1
  50. package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.min.js +0 -2
  51. package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.min.js.map +0 -1
  52. package/bundles/ctrl-ngx-emoji-mart.umd.js +0 -1692
  53. package/bundles/ctrl-ngx-emoji-mart.umd.js.map +0 -1
  54. package/bundles/ctrl-ngx-emoji-mart.umd.min.js +0 -2
  55. package/bundles/ctrl-ngx-emoji-mart.umd.min.js.map +0 -1
  56. package/ctrl-ngx-emoji-mart.metadata.json +0 -1
  57. package/esm2015/anchors.component.js +0 -54
  58. package/esm2015/category.component.js +0 -275
  59. package/esm2015/emoji-search.service.js +0 -179
  60. package/esm2015/ngx-emoji/data/emojis.js +0 -23289
  61. package/esm2015/ngx-emoji/emoji.component.js +0 -174
  62. package/esm2015/ngx-emoji/emoji.module.js +0 -13
  63. package/esm2015/ngx-emoji/emoji.service.js +0 -143
  64. package/esm2015/picker.component.js +0 -459
  65. package/esm2015/picker.module.js +0 -34
  66. package/esm2015/preview.component.js +0 -113
  67. package/esm2015/search.component.js +0 -115
  68. package/esm2015/skins.component.js +0 -76
  69. package/esm2015/svgs/index.js +0 -18
  70. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.js.map +0 -1
  71. package/fesm2015/ctrl-ngx-emoji-mart.js.map +0 -1
  72. package/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.metadata.json +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/picker/anchors.component.ts","../../node_modules/tslib/tslib.es6.js","../../src/lib/picker/emoji-frequently.service.ts","../../src/lib/picker/category.component.ts","../../src/lib/picker/utils/index.ts","../../src/lib/picker/emoji-search.service.ts","../../src/lib/picker/preview.component.ts","../../src/lib/picker/search.component.ts","../../src/lib/picker/svgs/index.ts","../../src/lib/picker/picker.component.ts","../../src/lib/picker/skins.component.ts","../../src/lib/picker/picker.module.ts"],"names":["AnchorsComponent","this","categories","icons","anchorClick","EventEmitter","prototype","trackByFn","idx","cat","id","handleClick","$event","index","emit","category","Component","args","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","preserveWhitespaces","Input","Output","Object","create","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__read","n","r","e","ar","push","error","EmojiFrequentlyService","platformId","NAMESPACE","frequently","defaults","initialized","DEFAULTS","init","JSON","parse","isPlatformBrowser","localStorage","getItem","add","emoji","setItem","stringify","get","perLine","totalLines","_this","result","quantity","sliced","keys","sort","a","b","reverse","slice","last","includes","pop","Injectable","providedIn","Inject","PLATFORM_ID","CategoryComponent","ref","emojiService","hasStickyPosition","name","totalFrequentLines","recent","custom","hideObsolete","virtualize","virtualizeOffset","emojiOver","emojiLeave","emojiClick","containerStyles","filteredEmojisSubject","Subject","filteredEmojis$","asObservable","labelStyles","labelSpanStyles","margin","minMargin","maxMargin","top","rows","ngOnInit","emojis","getEmojis","display","height","ngOnChanges","changes","_b","_a","currentValue","_d","_c","previousValue","ngAfterViewInit","filterEmojis","width","container","nativeElement","getBoundingClientRect","perRow","Math","floor","emojiSize","ceil","assign","minHeight","detectChanges","handleScroll","parentNode","scrollTop","memoizeSize","parent","_e","parentTop","labelHeight","label","parentHeight","clientHeight","style","frequentlyUsed","map","filter","getData","updateDisplay","trackById","item","newEmojis","_f","_g","data","obsoletedBy","unified","uniq","arr","reduce","acc","intersect","uniqA","uniqB","indexOf","ChangeDetectorRef","EmojiService","ViewChild","static","EmojiSearch","originalPool","emojisList","emoticonsList","emojiSearch","emojiData","shortNames","emoticons","emoticons_1","e_2","emoticons_1_1","emoticon","getSanitizedData","addCustomToPool","pool","custom_1","custom_1_1","emojiId","search","emojisToShowFilter","maxResults","include","exclude","results","allResults","values","toLowerCase","split","isIncluded","isExcluded","e_5","customIsIncluded","customIsExcluded","v","aPool","aIndex","charIndex","char","scores_1","e_6","buildSearch","short_names","keywords","query","sub","substr","subIndex","score","apply","names","addToSearch","strings","Array","isArray","arr_1","arr_1_1","str","substrings","substrings_1","e_8","substrings_1_1","join","PreviewComponent","skinChange","emojiSkin","emojiSet","knownEmoticons","listedEmoticons","forEach","SearchComponent","autoFocus","searchResults","enterKey","isSearching","inputId","icon","inputRef","focus","clear","handleSearch","handleEnterKey","preventDefault","delete","handleChange","activity","flags","foods","nature","objects","people","places","symbols","I18N","emojilist","notfound","skintones","1","2","3","4","5","6","PickerComponent","ngZone","renderer","i18n","title","darkMode","matchMedia","matches","color","activeCategories","set","skin","isNative","sheetSize","showPreview","emojiTooltip","hideRecent","notFoundEmoji","categoriesIcons","icons.categories","searchIcons","icons.search","useButton","enableFrequentEmojiSort","enableSearch","showSingleCategory","emojiSelect","scrollHeight","clientWidth","firstRender","animationFrameRequestId","measureScrollbar","RECENT_CATEGORY","SEARCH_CATEGORY","anchor","CUSTOM_CATEGORY","backgroundImageFn","document","div","createElement","overflow","position","body","appendChild","scrollbarWidth","offsetWidth","removeChild","allCategories","arguments","concat","__spread","undefined","allCategories_1","allCategories_1_1","emojiIndex","newCategory","includeRecent","excludeRecent","unshift","first","selected","categoriesToLoadFirst","min","setActiveCategories","lastActiveCategoryEmojis","setTimeout","runOutsideAngular","requestAnimationFrame","updateCategoriesSize","scrollListener","listen","scrollRef","ngOnDestroy","cancelAnimationFrame","categoriesToMakeActive","x","categoryRefs","component","target","handleAnchorClick","searchRef","find","nextScroll","componentToScroll","this_1","categoryTrack","noSelectionChange","activeCategory","this_2","$emojis","toArray","markForCheck","handleEmojiOver","previewRef","customEmoji","previewEmoji","handleEmojiLeave","handleEmojiClick","handleSkinChange","String","getWidth","NgZone","Renderer2","ViewChildren","SkinComponent","changeSkin","opened","skinTones","toggleOpen","isSelected","skinTone","isVisible","pressed","tabIndex","expanded","NgModule","imports","CommonModule","FormsModule","EmojiModule","exports","declarations"],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { EmojiCategory } from '@ctrl/ngx-emoji-mart/ngx-emoji';\n\n@Component({\n selector: 'emoji-mart-anchors',\n template: `\n <div class=\"emoji-mart-anchors\">\n <ng-template ngFor let-category [ngForOf]=\"categories\" let-idx=\"index\" [ngForTrackBy]=\"trackByFn\">\n <span\n *ngIf=\"category.anchor !== false\"\n [attr.title]=\"i18n.categories[category.id]\"\n (click)=\"this.handleClick($event, idx)\"\n class=\"emoji-mart-anchor\"\n [class.emoji-mart-anchor-selected]=\"category.name === selected\"\n [style.color]=\"category.name === selected ? color : null\"\n >\n <div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\">\n <path [attr.d]=\"icons[category.id]\" />\n </svg>\n </div>\n <span class=\"emoji-mart-anchor-bar\" [style.background-color]=\"color\"></span>\n </span>\n </ng-template>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n})\nexport class AnchorsComponent {\n @Input() categories: EmojiCategory[] = [];\n @Input() color?: string;\n @Input() selected?: string;\n @Input() i18n: any;\n @Input() icons: { [key: string]: string } = {};\n @Output() anchorClick = new EventEmitter<{ category: EmojiCategory, index: number }>();\n\n trackByFn(idx: number, cat: EmojiCategory) {\n return cat.id;\n }\n handleClick($event: Event, index: number) {\n this.anchorClick.emit({\n category: this.categories[index],\n index,\n });\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n 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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n 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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n 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); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n 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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n 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);\r\n 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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nimport { EmojiData } from '@ctrl/ngx-emoji-mart/ngx-emoji';\n\n@Injectable({ providedIn: 'root' })\nexport class EmojiFrequentlyService {\n NAMESPACE = 'emoji-mart';\n frequently: { [key: string]: number } | null = null;\n defaults: { [key: string]: number } = {};\n initialized = false;\n DEFAULTS = [\n '+1',\n 'grinning',\n 'kissing_heart',\n 'heart_eyes',\n 'laughing',\n 'stuck_out_tongue_winking_eye',\n 'sweat_smile',\n 'joy',\n 'scream',\n 'disappointed',\n 'unamused',\n 'weary',\n 'sob',\n 'sunglasses',\n 'heart',\n 'poop',\n ];\n constructor(@Inject(PLATFORM_ID) private platformId: string) {}\n init() {\n this.frequently = JSON.parse(\n (isPlatformBrowser(this.platformId) &&\n localStorage.getItem(`${this.NAMESPACE}.frequently`)) ||\n 'null',\n );\n this.initialized = true;\n }\n add(emoji: EmojiData) {\n if (!this.initialized) {\n this.init();\n }\n if (!this.frequently) {\n this.frequently = this.defaults;\n }\n if (!this.frequently[emoji.id]) {\n this.frequently[emoji.id] = 0;\n }\n this.frequently[emoji.id] += 1;\n\n if (isPlatformBrowser(this.platformId)) {\n localStorage.setItem(`${this.NAMESPACE}.last`, emoji.id);\n localStorage.setItem(`${this.NAMESPACE}.frequently`, JSON.stringify(this.frequently));\n }\n }\n get(perLine: number, totalLines: number) {\n if (!this.initialized) {\n this.init();\n }\n if (this.frequently === null) {\n this.defaults = {};\n const result = [];\n\n for (let i = 0; i < perLine; i++) {\n this.defaults[this.DEFAULTS[i]] = perLine - i;\n result.push(this.DEFAULTS[i]);\n }\n return result;\n }\n\n const quantity = perLine * totalLines;\n const frequentlyKeys = Object.keys(this.frequently);\n\n const sorted = frequentlyKeys\n .sort((a, b) => this.frequently![a] - this.frequently![b])\n .reverse();\n const sliced = sorted.slice(0, quantity);\n\n const last =\n isPlatformBrowser(this.platformId) && localStorage.getItem(`${this.NAMESPACE}.last`);\n\n if (last && !sliced.includes(last)) {\n sliced.pop();\n sliced.push(last);\n }\n return sliced;\n }\n}\n","import { Emoji, EmojiService } from '@ctrl/ngx-emoji-mart/ngx-emoji';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { EmojiFrequentlyService } from './emoji-frequently.service';\n\n\n@Component({\n selector: 'emoji-category',\n template: `\n <section\n #container\n class=\"emoji-mart-category\"\n [attr.aria-label]=\"i18n.categories[id]\"\n [class.emoji-mart-no-results]=\"emojis && !emojis.length\"\n [ngStyle]=\"containerStyles\"\n >\n <div class=\"emoji-mart-category-label\" [ngStyle]=\"labelStyles\" [attr.data-name]=\"name\">\n <!-- already labeled by the section aria-label -->\n <span #label [ngStyle]=\"labelSpanStyles\" aria-hidden=\"true\">\n {{ i18n.categories[id] }}\n </span>\n </div>\n\n <div\n *ngIf=\"virtualize; else normalRenderTemplate\"\n >\n <div *ngIf=\"filteredEmojis$ | async as filteredEmojis\">\n <ngx-emoji\n *ngFor=\"let emoji of filteredEmojis; trackBy: trackById\"\n [emoji]=\"emoji\"\n [size]=\"emojiSize\"\n [skin]=\"emojiSkin\"\n [isNative]=\"emojiIsNative\"\n [set]=\"emojiSet\"\n [sheetSize]=\"emojiSheetSize\"\n [forceSize]=\"emojiForceSize\"\n [tooltip]=\"emojiTooltip\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [imageUrlFn]=\"emojiImageUrlFn\"\n [hideObsolete]=\"hideObsolete\"\n [useButton]=\"emojiUseButton\"\n (emojiOver)=\"emojiOver.emit($event)\"\n (emojiLeave)=\"emojiLeave.emit($event)\"\n (emojiClick)=\"emojiClick.emit($event)\"\n ></ngx-emoji>\n </div>\n </div>\n\n <div *ngIf=\"emojis && !emojis.length\">\n <div>\n <ngx-emoji\n [emoji]=\"notFoundEmoji\"\n size=\"38\"\n [skin]=\"emojiSkin\"\n [isNative]=\"emojiIsNative\"\n [set]=\"emojiSet\"\n [sheetSize]=\"emojiSheetSize\"\n [forceSize]=\"emojiForceSize\"\n [tooltip]=\"emojiTooltip\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [useButton]=\"emojiUseButton\"\n ></ngx-emoji>\n </div>\n\n <div class=\"emoji-mart-no-results-label\">\n {{ i18n.notfound }}\n </div>\n </div>\n </section>\n\n <ng-template #normalRenderTemplate>\n <div *ngIf=\"emojis\">\n <ngx-emoji\n *ngFor=\"let emoji of emojis; trackBy: trackById\"\n [emoji]=\"emoji\"\n [size]=\"emojiSize\"\n [skin]=\"emojiSkin\"\n [isNative]=\"emojiIsNative\"\n [set]=\"emojiSet\"\n [sheetSize]=\"emojiSheetSize\"\n [forceSize]=\"emojiForceSize\"\n [tooltip]=\"emojiTooltip\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [imageUrlFn]=\"emojiImageUrlFn\"\n [hideObsolete]=\"hideObsolete\"\n (emojiOver)=\"emojiOver.emit($event)\"\n (emojiLeave)=\"emojiLeave.emit($event)\"\n (emojiClick)=\"emojiClick.emit($event)\"\n ></ngx-emoji>\n </div>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n})\nexport class CategoryComponent implements OnChanges, OnInit, AfterViewInit {\n @Input() emojis?: any[] | null;\n @Input() hasStickyPosition = true;\n @Input() name = '';\n @Input() perLine = 9;\n @Input() totalFrequentLines = 4;\n @Input() recent: string[] = [];\n @Input() custom: any[] = [];\n @Input() i18n: any;\n @Input() id: any;\n @Input() hideObsolete = true;\n @Input() notFoundEmoji?: string;\n @Input() virtualize = false;\n @Input() virtualizeOffset = 0;\n @Input() emojiIsNative?: Emoji['isNative'];\n @Input() emojiSkin!: Emoji['skin'];\n @Input() emojiSize!: Emoji['size'];\n @Input() emojiSet!: Emoji['set'];\n @Input() emojiSheetSize!: Emoji['sheetSize'];\n @Input() emojiForceSize!: Emoji['forceSize'];\n @Input() emojiTooltip!: Emoji['tooltip'];\n @Input() emojiBackgroundImageFn?: Emoji['backgroundImageFn'];\n @Input() emojiImageUrlFn?: Emoji['imageUrlFn'];\n @Input() emojiUseButton?: boolean;\n @Output() emojiOver: Emoji['emojiOver'] = new EventEmitter();\n @Output() emojiLeave: Emoji['emojiLeave'] = new EventEmitter();\n @Output() emojiClick: Emoji['emojiClick'] = new EventEmitter();\n @ViewChild('container', { static: true }) container!: ElementRef;\n @ViewChild('label', { static: true }) label!: ElementRef;\n containerStyles: any = {};\n private filteredEmojisSubject = new Subject<any[] | null | undefined>();\n filteredEmojis$: Observable<any[] | null | undefined> = this.filteredEmojisSubject.asObservable();\n labelStyles: any = {};\n labelSpanStyles: any = {};\n margin = 0;\n minMargin = 0;\n maxMargin = 0;\n top = 0;\n rows = 0;\n\n constructor(\n public ref: ChangeDetectorRef,\n private emojiService: EmojiService,\n private frequently: EmojiFrequentlyService,\n ) {}\n\n ngOnInit() {\n this.emojis = this.getEmojis();\n\n if (!this.emojis) {\n this.containerStyles = { display: 'none' };\n }\n\n if (!this.hasStickyPosition) {\n this.labelStyles = { height: 28 };\n // this.labelSpanStyles = { position: 'absolute' };\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.emojis?.currentValue?.length !== changes.emojis?.previousValue?.length) {\n this.ngAfterViewInit();\n }\n }\n\n ngAfterViewInit() {\n if (!this.virtualize || !this.emojis?.length) {\n return;\n }\n\n this.emojis = this.filterEmojis();\n\n const { width } = this.container.nativeElement.getBoundingClientRect();\n\n const perRow = Math.floor(width / (this.emojiSize + 12));\n this.rows = Math.ceil(this.emojis.length / perRow);\n\n this.containerStyles = {\n ...this.containerStyles,\n minHeight: `${this.rows * (this.emojiSize + 12) + 28}px`,\n };\n\n this.ref?.detectChanges();\n\n this.handleScroll(this.container.nativeElement.parentNode.parentNode.scrollTop);\n }\n\n memoizeSize() {\n const parent = this.container.nativeElement.parentNode.parentNode;\n const { top, height } = this.container.nativeElement.getBoundingClientRect();\n const parentTop = parent.getBoundingClientRect().top;\n const labelHeight = this.label.nativeElement.getBoundingClientRect().height;\n\n this.top = top - parentTop + parent.scrollTop;\n\n if (height === 0) {\n this.maxMargin = 0;\n } else {\n this.maxMargin = height - labelHeight;\n }\n }\n handleScroll(scrollTop: number): boolean {\n let margin = scrollTop - this.top;\n margin = margin < this.minMargin ? this.minMargin : margin;\n margin = margin > this.maxMargin ? this.maxMargin : margin;\n\n if (this.virtualize) {\n const { top, height } = this.container.nativeElement.getBoundingClientRect();\n const parentHeight = this.container.nativeElement.parentNode.parentNode.clientHeight;\n\n if (parentHeight + (parentHeight + this.virtualizeOffset) >= top && -height - (parentHeight + this.virtualizeOffset) <= top) {\n this.filteredEmojisSubject.next(this.emojis);\n } else {\n this.filteredEmojisSubject.next([]);\n }\n }\n\n if (margin === this.margin) {\n this.ref.detectChanges();\n return false;\n }\n\n if (!this.hasStickyPosition) {\n this.label.nativeElement.style.top = `${margin}px`;\n }\n\n this.margin = margin;\n this.ref.detectChanges();\n return true;\n }\n\n getEmojis() {\n if (this.name === 'Recent') {\n let frequentlyUsed =\n this.recent || this.frequently.get(this.perLine, this.totalFrequentLines);\n if (!frequentlyUsed || !frequentlyUsed.length) {\n frequentlyUsed = this.frequently.get(this.perLine, this.totalFrequentLines);\n }\n if (frequentlyUsed.length) {\n this.emojis = frequentlyUsed\n .map(id => {\n const emoji = this.custom.filter((e: any) => e.id === id)[0];\n if (emoji) {\n return emoji;\n }\n\n return id;\n })\n .filter(id => !!this.emojiService.getData(id));\n }\n\n if ((!this.emojis || this.emojis.length === 0) && frequentlyUsed.length > 0) {\n return null;\n }\n }\n\n if (this.emojis) {\n this.emojis = this.emojis.slice(0);\n }\n\n return this.emojis;\n }\n updateDisplay(display: 'none' | 'block') {\n this.containerStyles.display = display;\n this.getEmojis();\n this.ref.detectChanges();\n }\n trackById(index: number, item: any) {\n return item;\n }\n\n private filterEmojis(): any[] {\n const newEmojis = [];\n for (const emoji of this.emojis || []) {\n if (!emoji) {\n continue;\n }\n const data = this.emojiService.getData(emoji);\n if (!data || (data.obsoletedBy && this.hideObsolete) || (!data.unified && !data.custom)) {\n continue;\n }\n newEmojis.push(emoji);\n }\n return newEmojis;\n }\n}\n","function uniq(arr: any[]) {\n return arr.reduce((acc: Array<any>, item: any) => {\n if (!acc.includes(item)) {\n acc.push(item);\n }\n return acc;\n }, []);\n}\n\nexport function intersect(a: any, b: any) {\n const uniqA = uniq(a);\n const uniqB = uniq(b);\n\n return uniqA.filter((item: any) => uniqB.indexOf(item) >= 0);\n}\n\n// https://github.com/sonicdoe/measure-scrollbar\nexport function measureScrollbar() {\n if (typeof document === 'undefined') {\n return 0;\n }\n const div = document.createElement('div');\n\n div.style.width = '100px';\n div.style.height = '100px';\n div.style.overflow = 'scroll';\n div.style.position = 'absolute';\n div.style.top = '-9999px';\n\n document.body.appendChild(div);\n const scrollbarWidth = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n\n return scrollbarWidth;\n}\n","import { Injectable } from '@angular/core';\n\nimport { categories, EmojiData, EmojiService } from '@ctrl/ngx-emoji-mart/ngx-emoji';\nimport { intersect } from './utils';\n\n@Injectable({ providedIn: 'root' })\nexport class EmojiSearch {\n originalPool: any = {};\n index: {\n results?: EmojiData[];\n pool?: { [key: string]: EmojiData };\n [key: string]: any;\n } = {};\n emojisList: any = {};\n emoticonsList: { [key: string]: string } = {};\n emojiSearch: { [key: string]: string } = {};\n\n constructor(private emojiService: EmojiService) {\n for (const emojiData of this.emojiService.emojis) {\n const { shortNames, emoticons } = emojiData;\n const id = shortNames[0];\n\n for (const emoticon of emoticons) {\n if (this.emoticonsList[emoticon]) {\n continue;\n }\n\n this.emoticonsList[emoticon] = id;\n }\n\n this.emojisList[id] = this.emojiService.getSanitizedData(id);\n this.originalPool[id] = emojiData;\n }\n }\n\n addCustomToPool(custom: any, pool: any) {\n for (const emoji of custom) {\n const emojiId = emoji.id || emoji.shortNames[0];\n\n if (emojiId && !pool[emojiId]) {\n pool[emojiId] = this.emojiService.getData(emoji);\n this.emojisList[emojiId] = this.emojiService.getSanitizedData(emoji);\n }\n }\n }\n\n search(\n value: string,\n emojisToShowFilter?: (x: any) => boolean,\n maxResults = 75,\n include: any[] = [],\n exclude: any[] = [],\n custom: any[] = [],\n ): EmojiData[] | null {\n this.addCustomToPool(custom, this.originalPool);\n\n let results: EmojiData[] | undefined;\n let pool = this.originalPool;\n\n if (value.length) {\n if (value === '-' || value === '-1') {\n return [this.emojisList['-1']];\n }\n if (value === '+' || value === '+1') {\n return [this.emojisList['+1']];\n }\n\n let values = value.toLowerCase().split(/[\\s|,|\\-|_]+/);\n let allResults = [];\n\n if (values.length > 2) {\n values = [values[0], values[1]];\n }\n\n if (include.length || exclude.length) {\n pool = {};\n\n for (const category of categories || []) {\n const isIncluded = include && include.length ? include.indexOf(category.id) > -1 : true;\n const isExcluded = exclude && exclude.length ? exclude.indexOf(category.id) > -1 : false;\n\n if (!isIncluded || isExcluded) {\n continue;\n }\n\n for (const emojiId of category.emojis || []) {\n // Need to make sure that pool gets keyed\n // with the correct id, which is why we call emojiService.getData below\n const emoji = this.emojiService.getData(emojiId);\n pool[emoji?.id ?? ''] = emoji;\n }\n }\n\n if (custom.length) {\n const customIsIncluded =\n include && include.length ? include.indexOf('custom') > -1 : true;\n const customIsExcluded =\n exclude && exclude.length ? exclude.indexOf('custom') > -1 : false;\n if (customIsIncluded && !customIsExcluded) {\n this.addCustomToPool(custom, pool);\n }\n }\n }\n\n allResults = values\n .map(v => {\n let aPool = pool;\n let aIndex = this.index;\n let length = 0;\n\n // tslint:disable-next-line: prefer-for-of\n for (let charIndex = 0; charIndex < v.length; charIndex++) {\n const char = v[charIndex];\n length++;\n if (!aIndex[char]) {\n aIndex[char] = {};\n }\n aIndex = aIndex[char];\n\n if (!aIndex.results) {\n const scores: { [key: string]: number } = {};\n\n aIndex.results = [];\n aIndex.pool = {};\n\n for (const id of Object.keys(aPool)) {\n const emoji = aPool[id];\n if (!this.emojiSearch[id]) {\n this.emojiSearch[id] = this.buildSearch(\n emoji.short_names,\n emoji.name,\n emoji.id,\n emoji.keywords,\n emoji.emoticons,\n );\n }\n const query = this.emojiSearch[id];\n const sub = v.substr(0, length);\n const subIndex = query.indexOf(sub);\n\n if (subIndex !== -1) {\n let score = subIndex + 1;\n if (sub === id) {\n score = 0;\n }\n\n aIndex.results.push(this.emojisList[id]);\n aIndex.pool[id] = emoji;\n\n scores[id] = score;\n }\n }\n\n aIndex.results.sort((a, b) => {\n const aScore = scores[a.id];\n const bScore = scores[b.id];\n\n return aScore - bScore;\n });\n }\n\n aPool = aIndex.pool;\n }\n\n return aIndex.results;\n })\n .filter(a => a);\n\n if (allResults.length > 1) {\n results = intersect.apply(null, allResults as any);\n } else if (allResults.length) {\n results = allResults[0];\n } else {\n results = [];\n }\n }\n\n if (results) {\n if (emojisToShowFilter) {\n results = results.filter((result: EmojiData) => {\n if (result && result.id) {\n return emojisToShowFilter(this.emojiService.names[result.id]);\n }\n return false;\n });\n }\n\n if (results && results.length > maxResults) {\n results = results.slice(0, maxResults);\n }\n }\n return results || null;\n }\n\n buildSearch(\n shortNames: string[],\n name: string,\n id: string,\n keywords: string[],\n emoticons: string[],\n ) {\n const search: string[] = [];\n\n const addToSearch = (strings: string | string[], split: boolean) => {\n if (!strings) {\n return;\n }\n\n const arr = Array.isArray(strings) ? strings : [strings];\n\n for (const str of arr) {\n const substrings = split ? str.split(/[-|_|\\s]+/) : [str];\n\n for (let s of substrings) {\n s = s.toLowerCase();\n\n if (!search.includes(s)) {\n search.push(s);\n }\n }\n }\n };\n\n addToSearch(shortNames, true);\n addToSearch(name, true);\n addToSearch(id, true);\n addToSearch(keywords, true);\n addToSearch(emoticons, false);\n\n return search.join(',');\n }\n}\n","import { Emoji, EmojiData, EmojiService } from '@ctrl/ngx-emoji-mart/ngx-emoji';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output\n} from '@angular/core';\n\n\n@Component({\n selector: 'emoji-preview',\n template: `\n <div class=\"emoji-mart-preview\" *ngIf=\"emoji && emojiData\">\n <div class=\"emoji-mart-preview-emoji\">\n <ngx-emoji\n [emoji]=\"emoji\"\n [size]=\"38\"\n [isNative]=\"emojiIsNative\"\n [skin]=\"emojiSkin\"\n [size]=\"emojiSize\"\n [set]=\"emojiSet\"\n [sheetSize]=\"emojiSheetSize\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [imageUrlFn]=\"emojiImageUrlFn\"\n ></ngx-emoji>\n </div>\n\n <div class=\"emoji-mart-preview-data\">\n <div class=\"emoji-mart-preview-name\">{{ emojiData.name }}</div>\n <div class=\"emoji-mart-preview-shortname\">\n <span\n class=\"emoji-mart-preview-shortname\"\n *ngFor=\"let short_name of emojiData.shortNames\"\n >\n :{{ short_name }}:\n </span>\n </div>\n <div class=\"emoji-mart-preview-emoticons\">\n <span class=\"emoji-mart-preview-emoticon\" *ngFor=\"let emoticon of listedEmoticons\">\n {{ emoticon }}\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"emoji-mart-preview\" *ngIf=\"!emoji\">\n <div class=\"emoji-mart-preview-emoji\">\n <ngx-emoji\n *ngIf=\"idleEmoji && idleEmoji.length\"\n [isNative]=\"emojiIsNative\"\n [skin]=\"emojiSkin\"\n [set]=\"emojiSet\"\n [emoji]=\"idleEmoji\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [size]=\"38\"\n [imageUrlFn]=\"emojiImageUrlFn\"\n ></ngx-emoji>\n </div>\n\n <div class=\"emoji-mart-preview-data\">\n <span class=\"emoji-mart-title-label\">{{ title }}</span>\n </div>\n\n <div class=\"emoji-mart-preview-skins\">\n <emoji-skins [skin]=\"emojiSkin\" (changeSkin)=\"skinChange.emit($event)\" [i18n]=\"i18n\">\n </emoji-skins>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n})\nexport class PreviewComponent implements OnChanges {\n @Input() title?: string;\n @Input() emoji: any;\n @Input() idleEmoji: any;\n @Input() i18n: any;\n @Input() emojiIsNative?: Emoji['isNative'];\n @Input() emojiSkin?: Emoji['skin'];\n @Input() emojiSize?: Emoji['size'];\n @Input() emojiSet?: Emoji['set'];\n @Input() emojiSheetSize?: Emoji['sheetSize'];\n @Input() emojiBackgroundImageFn?: Emoji['backgroundImageFn'];\n @Input() emojiImageUrlFn?: Emoji['imageUrlFn'];\n @Output() skinChange = new EventEmitter<number>();\n emojiData: Partial<EmojiData> = {};\n listedEmoticons?: string[];\n\n constructor(public ref: ChangeDetectorRef, private emojiService: EmojiService) {}\n\n ngOnChanges() {\n if (!this.emoji) {\n return;\n }\n this.emojiData = this.emojiService.getData(\n this.emoji,\n this.emojiSkin,\n this.emojiSet,\n ) as EmojiData;\n const knownEmoticons: string[] = [];\n const listedEmoticons: string[] = [];\n const emoitcons = this.emojiData.emoticons || [];\n emoitcons.forEach((emoticon: string) => {\n if (knownEmoticons.indexOf(emoticon.toLowerCase()) >= 0) {\n return;\n }\n knownEmoticons.push(emoticon.toLowerCase());\n listedEmoticons.push(emoticon);\n });\n this.listedEmoticons = listedEmoticons;\n this.ref?.detectChanges();\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { EmojiSearch } from './emoji-search.service';\n\nlet id = 0;\n\n@Component({\n selector: 'emoji-search',\n template: `\n <div class=\"emoji-mart-search\">\n <input\n [id]=\"inputId\"\n #inputRef\n type=\"search\"\n (keyup.enter)=\"handleEnterKey($event)\"\n [placeholder]=\"i18n.search\"\n [autofocus]=\"autoFocus\"\n [(ngModel)]=\"query\"\n (ngModelChange)=\"handleChange()\"\n />\n <!--\n Use a <label> in addition to the placeholder for accessibility, but place it off-screen\n http://www.maxability.co.in/2016/01/placeholder-attribute-and-why-it-is-not-accessible/\n -->\n <label class=\"emoji-mart-sr-only\" [htmlFor]=\"inputId\">\n {{ i18n.search }}\n </label>\n <button\n type=\"button\"\n class=\"emoji-mart-search-icon\"\n (click)=\"clear()\"\n (keyup.enter)=\"clear()\"\n [disabled]=\"!isSearching\"\n [attr.aria-label]=\"i18n.clear\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n width=\"13\"\n height=\"13\"\n opacity=\"0.5\"\n >\n <path [attr.d]=\"icon\" />\n </svg>\n </button>\n </div>\n `,\n preserveWhitespaces: false,\n})\nexport class SearchComponent implements AfterViewInit, OnInit {\n @Input() maxResults = 75;\n @Input() autoFocus = false;\n @Input() i18n: any;\n @Input() include: string[] = [];\n @Input() exclude: string[] = [];\n @Input() custom: any[] = [];\n @Input() icons!: { [key: string]: string };\n @Input() emojisToShowFilter?: (x: any) => boolean;\n @Output() searchResults = new EventEmitter<any[]>();\n @Output() enterKey = new EventEmitter<any>();\n @ViewChild('inputRef', { static: true }) private inputRef!: ElementRef;\n isSearching = false;\n icon?: string;\n query = '';\n inputId = `emoji-mart-search-${++id}`;\n\n constructor(private emojiSearch: EmojiSearch) {}\n\n ngOnInit() {\n this.icon = this.icons.search;\n }\n ngAfterViewInit() {\n if (this.autoFocus) {\n this.inputRef.nativeElement.focus();\n }\n }\n clear() {\n this.query = '';\n this.handleSearch('');\n this.inputRef.nativeElement.focus();\n }\n handleEnterKey($event: Event) {\n if (!this.query) {\n return;\n }\n this.enterKey.emit($event);\n $event.preventDefault();\n }\n handleSearch(value: string) {\n if (value === '') {\n this.icon = this.icons.search;\n this.isSearching = false;\n } else {\n this.icon = this.icons.delete;\n this.isSearching = true;\n }\n const emojis = this.emojiSearch.search(\n this.query,\n this.emojisToShowFilter,\n this.maxResults,\n this.include,\n this.exclude,\n this.custom,\n ) as any[];\n this.searchResults.emit(emojis);\n }\n handleChange() {\n this.handleSearch(this.query);\n }\n}\n","/* tslint:disable max-line-length */\nexport const categories: { [key: string]: string } = {\n activity: `M12 0a12 12 0 1 0 0 24 12 12 0 0 0 0-24m10 11h-5c.3-2.5 1.3-4.8 2-6.1a10 10 0 0 1 3 6.1m-9 0V2a10 10 0 0 1 4.4 1.6A18 18 0 0 0 15 11h-2zm-2 0H9a18 18 0 0 0-2.4-7.4A10 10 0 0 1 11 2.1V11zm0 2v9a10 10 0 0 1-4.4-1.6A18 18 0 0 0 9 13h2zm4 0a18 18 0 0 0 2.4 7.4 10 10 0 0 1-4.4 1.5V13h2zM5 4.9c.7 1.3 1.7 3.6 2 6.1H2a10 10 0 0 1 3-6.1M2 13h5c-.3 2.5-1.3 4.8-2 6.1A10 10 0 0 1 2 13m17 6.1c-.7-1.3-1.7-3.6-2-6.1h5a10 10 0 0 1-3 6.1`,\n\n custom: `M10 1h3v21h-3zm10.186 4l1.5 2.598L3.5 18.098 2 15.5zM2 7.598L3.5 5l18.186 10.5-1.5 2.598z`,\n\n flags: `M0 0l6 24h2L2 0zm21 5h-4l-1-4H4l3 12h3l1 4h13L21 5zM6.6 3h7.8l2 8H8.6l-2-8zm8.8 10l-2.9 1.9-.4-1.9h3.3zm3.6 0l-1.5-6h2l2 8H16l3-2z`,\n\n foods: `M17 5c-1.8 0-2.9.4-3.7 1 .5-1.3 1.8-3 4.7-3a1 1 0 0 0 0-2c-3 0-4.6 1.3-5.5 2.5l-.2.2c-.6-1.9-1.5-3.7-3-3.7C8.5 0 7.7.3 7 1c-2 1.5-1.7 2.9-.5 4C3.6 5.2 0 7.4 0 13c0 4.6 5 11 9 11 2 0 2.4-.5 3-1 .6.5 1 1 3 1 4 0 9-6.4 9-11 0-6-4-8-7-8M8.2 2.5c.7-.5 1-.5 1-.5.4.2 1 1.4 1.4 3-1.6-.6-2.8-1.3-3-1.8l.6-.7M15 22c-1 0-1.2-.1-1.6-.4l-.1-.2a2 2 0 0 0-2.6 0l-.1.2c-.4.3-.5.4-1.6.4-2.8 0-7-5.4-7-9 0-6 4.5-6 5-6 2 0 2.5.4 3.4 1.2l.3.3a2 2 0 0 0 2.6 0l.3-.3c1-.8 1.5-1.2 3.4-1.2.5 0 5 .1 5 6 0 3.6-4.2 9-7 9`,\n\n nature: `M15.5 8a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3m-7 0a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3m10.43-8h-.02c-.97 0-2.14.79-3.02 1.5A13.88 13.88 0 0 0 12 .99c-1.28 0-2.62.13-3.87.51C7.24.8 6.07 0 5.09 0h-.02C3.35 0 .07 2.67 0 7.03c-.04 2.47.28 4.23 1.04 5 .26.27.88.69 1.3.9.19 3.17.92 5.23 2.53 6.37.9.64 2.19.95 3.2 1.1-.03.2-.07.4-.07.6 0 1.77 2.35 3 4 3s4-1.23 4-3c0-.2-.04-.4-.07-.59 2.57-.38 5.43-1.87 5.92-7.58.4-.22.89-.57 1.1-.8.77-.76 1.09-2.52 1.05-5C23.93 2.67 20.65 0 18.93 0M3.23 9.13c-.24.29-.84 1.16-.9 1.24A9.67 9.67 0 0 1 2 7.08c.05-3.28 2.48-4.97 3.1-5.03.25.02.72.27 1.26.65A7.95 7.95 0 0 0 4 7.82c-.14.55-.4.86-.79 1.31M12 22c-.9 0-1.95-.7-2-1 0-.65.47-1.24 1-1.6v.6a1 1 0 1 0 2 0v-.6c.52.36 1 .95 1 1.6-.05.3-1.1 1-2 1m3-3.48v.02a4.75 4.75 0 0 0-1.26-1.02c1.09-.52 2.24-1.33 2.24-2.22 0-1.84-1.78-2.2-3.98-2.2s-3.98.36-3.98 2.2c0 .89 1.15 1.7 2.24 2.22A4.8 4.8 0 0 0 9 18.54v-.03a6.1 6.1 0 0 1-2.97-.84c-1.3-.92-1.84-3.04-1.86-6.48l.03-.04c.5-.82 1.49-1.45 1.8-3.1C6 6 7.36 4.42 8.36 3.53c1.01-.35 2.2-.53 3.59-.53 1.45 0 2.68.2 3.73.57 1 .9 2.32 2.46 2.32 4.48.31 1.65 1.3 2.27 1.8 3.1l.1.18c-.06 5.97-1.95 7.01-4.9 7.19m6.63-8.2l-.11-.2a7.59 7.59 0 0 0-.74-.98 3.02 3.02 0 0 1-.79-1.32 7.93 7.93 0 0 0-2.35-5.12c.53-.38 1-.63 1.26-.65.64.07 3.05 1.77 3.1 5.03.02 1.81-.35 3.22-.37 3.24`,\n\n objects: `M12 0a9 9 0 0 0-5 16.5V21s2 3 5 3 5-3 5-3v-4.5A9 9 0 0 0 12 0zm0 2a7 7 0 1 1 0 14 7 7 0 0 1 0-14zM9 17.5a9 9 0 0 0 6 0v.8a7 7 0 0 1-3 .7 7 7 0 0 1-3-.7v-.8zm.2 3a8.9 8.9 0 0 0 2.8.5c1 0 1.9-.2 2.8-.5-.6.7-1.6 1.5-2.8 1.5-1.1 0-2.1-.8-2.8-1.5zm5.5-8.1c-.8 0-1.1-.8-1.5-1.8-.5-1-.7-1.5-1.2-1.5s-.8.5-1.3 1.5c-.4 1-.8 1.8-1.6 1.8h-.3c-.5-.2-.8-.7-1.3-1.8l-.2-1A3 3 0 0 0 7 9a1 1 0 0 1 0-2c1.7 0 2 1.4 2.2 2.1.5-1 1.3-2 2.8-2 1.5 0 2.3 1.1 2.7 2.1.2-.8.6-2.2 2.3-2.2a1 1 0 1 1 0 2c-.2 0-.3.5-.3.7a6.5 6.5 0 0 1-.3 1c-.5 1-.8 1.7-1.7 1.7`,\n\n people: `M12 0a12 12 0 1 0 0 24 12 12 0 0 0 0-24m0 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20M8 7a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4m-.8 8c-.7 1.2-1.8 2-3.3 2-1.5 0-2.7-.8-3.4-2H15m3-2H6a6 6 0 1 0 12 0`,\n\n places: `M6.5 12a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5m0 3c-.3 0-.5-.2-.5-.5s.2-.5.5-.5.5.2.5.5-.2.5-.5.5m11-3a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5m0 3c-.3 0-.5-.2-.5-.5s.2-.5.5-.5.5.2.5.5-.2.5-.5.5m5-5.5l-1-.4-.1-.1h.6c.6 0 1-.4 1-1 0-1-.9-2-2-2h-.6l-.8-1.7A3 3 0 0 0 16.8 2H7.2a3 3 0 0 0-2.8 2.3L3.6 6H3a2 2 0 0 0-2 2c0 .6.4 1 1 1h.6v.1l-1 .4a2 2 0 0 0-1.4 2l.7 7.6a1 1 0 0 0 1 .9H3v1c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-1h6v1c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-1h1.1a1 1 0 0 0 1-.9l.7-7.5a2 2 0 0 0-1.3-2.1M6.3 4.9c.1-.5.5-.9 1-.9h9.5c.4 0 .8.4 1 .9L19.2 9H4.7l1.6-4.1zM7 21H5v-1h2v1zm12 0h-2v-1h2v1zm2.2-3H2.8l-.7-6.6.9-.4h18l.9.4-.7 6.6z`,\n\n recent: `M13 4h-2v7H9v2h2v2h2v-2h4v-2h-4zm-1-4a12 12 0 1 0 0 24 12 12 0 0 0 0-24m0 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20`,\n\n symbols: `M0 0h11v2H0zm4 11h3V6h4V4H0v2h4zm11.5 6a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5m0-2.99a.5.5 0 0 1 0 .99c-.28 0-.5-.22-.5-.5s.22-.49.5-.49m6 5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5m0 2.99a.5.5 0 0 1-.5-.5.5.5 0 0 1 1 .01.5.5 0 0 1-.5.49m.5-9l-9 9 1.51 1.5 9-9zm-5-2c2.2 0 4-1.12 4-2.5V2s.98-.16 1.5.95C23 4.05 23 6 23 6s1-1.12 1-3.13C24-.02 21 0 21 0h-2v6.35A5.85 5.85 0 0 0 17 6c-2.2 0-4 1.12-4 2.5s1.8 2.5 4 2.5m-6.7 9.48L8.82 18.9a47.54 47.54 0 0 1-1.44 1.13c-.3-.3-.99-1.02-2.04-2.19.9-.83 1.47-1.46 1.72-1.89s.38-.87.38-1.33c0-.6-.27-1.18-.82-1.76-.54-.58-1.33-.87-2.35-.87-1 0-1.79.29-2.34.87-.56.6-.83 1.18-.83 1.79 0 .81.42 1.75 1.25 2.8a6.57 6.57 0 0 0-1.8 1.79 3.46 3.46 0 0 0-.51 1.83c0 .86.3 1.56.92 2.1a3.5 3.5 0 0 0 2.42.83c1.17 0 2.44-.38 3.81-1.14L8.23 24h2.82l-2.09-2.38 1.34-1.14zM3.56 14.1a1.02 1.02 0 0 1 .73-.28c.31 0 .56.08.75.25a.85.85 0 0 1 .28.66c0 .52-.42 1.11-1.26 1.78-.53-.65-.8-1.23-.8-1.74a.9.9 0 0 1 .3-.67m.18 7.9c-.43 0-.78-.12-1.06-.35-.28-.23-.41-.49-.41-.76 0-.6.5-1.3 1.52-2.09a31.23 31.23 0 0 0 2.25 2.44c-.92.5-1.69.76-2.3.76`,\n};\n\nexport const search: { [key: string]: string } = {\n search: `M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z`,\n delete: `M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z`,\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n QueryList,\n Renderer2,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\n\nimport {\n categories,\n Emoji,\n EmojiCategory,\n EmojiData,\n EmojiEvent,\n} from '@ctrl/ngx-emoji-mart/ngx-emoji';\nimport { CategoryComponent } from './category.component';\nimport { EmojiFrequentlyService } from './emoji-frequently.service';\nimport { PreviewComponent } from './preview.component';\nimport { SearchComponent } from './search.component';\nimport * as icons from './svgs';\nimport { measureScrollbar } from './utils';\n\nconst I18N: any = {\n search: 'Search',\n emojilist: 'List of emoji',\n notfound: 'No Emoji Found',\n clear: 'Clear',\n categories: {\n search: 'Search Results',\n recent: 'Frequently Used',\n people: 'Smileys & People',\n nature: 'Animals & Nature',\n foods: 'Food & Drink',\n activity: 'Activity',\n places: 'Travel & Places',\n objects: 'Objects',\n symbols: 'Symbols',\n flags: 'Flags',\n custom: 'Custom',\n },\n skintones: {\n 1: 'Default Skin Tone',\n 2: 'Light Skin Tone',\n 3: 'Medium-Light Skin Tone',\n 4: 'Medium Skin Tone',\n 5: 'Medium-Dark Skin Tone',\n 6: 'Dark Skin Tone',\n },\n};\n\n@Component({\n selector: 'emoji-mart',\n templateUrl: './picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n})\nexport class PickerComponent implements OnInit, OnDestroy {\n @Input() perLine = 9;\n @Input() totalFrequentLines = 4;\n @Input() i18n: any = {};\n @Input() style: any = {};\n @Input() title = 'Emoji Mart™';\n @Input() emoji = 'department_store';\n @Input() darkMode = !!(\n typeof matchMedia === 'function' && matchMedia('(prefers-color-scheme: dark)').matches\n );\n @Input() color = '#ae65c5';\n @Input() hideObsolete = true;\n /** all categories shown */\n @Input() categories: EmojiCategory[] = [];\n /** used to temporarily draw categories */\n @Input() activeCategories: EmojiCategory[] = [];\n @Input() set: Emoji['set'] = 'apple';\n @Input() skin: Emoji['skin'] = 1;\n /** Renders the native unicode emoji */\n @Input() isNative: Emoji['isNative'] = false;\n @Input() emojiSize: Emoji['size'] = 24;\n @Input() sheetSize: Emoji['sheetSize'] = 64;\n @Input() emojisToShowFilter?: (x: string) => boolean;\n @Input() showPreview = true;\n @Input() emojiTooltip = false;\n @Input() autoFocus = false;\n @Input() custom: any[] = [];\n @Input() hideRecent = true;\n @Input() imageUrlFn: Emoji['imageUrlFn'];\n @Input() include?: string[];\n @Input() exclude?: string[];\n @Input() notFoundEmoji = 'sleuth_or_spy';\n @Input() categoriesIcons = icons.categories;\n @Input() searchIcons = icons.search;\n @Input() useButton = false;\n @Input() enableFrequentEmojiSort = false;\n @Input() enableSearch = true;\n @Input() showSingleCategory = false;\n @Input() virtualize = false;\n @Input() virtualizeOffset = 0;\n @Input() recent?: string[];\n @Output() emojiClick = new EventEmitter<any>();\n @Output() emojiSelect = new EventEmitter<any>();\n @Output() skinChange = new EventEmitter<Emoji['skin']>();\n @ViewChild('scrollRef', { static: true }) private scrollRef!: ElementRef;\n @ViewChild(PreviewComponent, { static: false }) previewRef?: PreviewComponent;\n @ViewChild(SearchComponent, { static: false }) searchRef?: SearchComponent;\n @ViewChildren(CategoryComponent) categoryRefs!: QueryList<CategoryComponent>;\n scrollHeight = 0;\n clientHeight = 0;\n clientWidth = 0;\n selected?: string;\n nextScroll?: string;\n scrollTop?: number;\n firstRender = true;\n previewEmoji: any;\n animationFrameRequestId: number | null = null;\n NAMESPACE = 'emoji-mart';\n measureScrollbar = 0;\n RECENT_CATEGORY: EmojiCategory = {\n id: 'recent',\n name: 'Recent',\n emojis: null,\n };\n SEARCH_CATEGORY: EmojiCategory = {\n id: 'search',\n name: 'Search',\n emojis: null,\n anchor: false,\n };\n CUSTOM_CATEGORY: EmojiCategory = {\n id: 'custom',\n name: 'Custom',\n emojis: [],\n };\n private scrollListener!: () => void;\n\n @Input()\n backgroundImageFn: Emoji['backgroundImageFn'] = (set: string, sheetSize: number) =>\n `https://unpkg.com/emoji-datasource-${this.set}@6.0.0/img/${this.set}/sheets-256/${this.sheetSize}.png`\n\n constructor(\n private ngZone: NgZone,\n private renderer: Renderer2,\n private ref: ChangeDetectorRef,\n private frequently: EmojiFrequentlyService,\n @Inject(PLATFORM_ID) private platformId: string,\n ) {}\n\n ngOnInit() {\n // measure scroll\n this.measureScrollbar = measureScrollbar();\n\n this.i18n = { ...I18N, ...this.i18n };\n this.i18n.categories = { ...I18N.categories, ...this.i18n.categories };\n this.skin =\n JSON.parse(\n (isPlatformBrowser(this.platformId) && localStorage.getItem(`${this.NAMESPACE}.skin`)) ||\n 'null',\n ) || this.skin;\n\n const allCategories = [...categories];\n\n if (this.custom.length > 0) {\n this.CUSTOM_CATEGORY.emojis = this.custom.map(emoji => {\n return {\n ...emoji,\n // `<Category />` expects emoji to have an `id`.\n id: emoji.shortNames[0],\n custom: true,\n };\n });\n\n allCategories.push(this.CUSTOM_CATEGORY);\n }\n\n if (this.include !== undefined) {\n allCategories.sort((a, b) => {\n if (this.include!.indexOf(a.id) > this.include!.indexOf(b.id)) {\n return 1;\n }\n return -1;\n });\n }\n\n for (const category of allCategories) {\n const isIncluded =\n this.include && this.include.length ? this.include.indexOf(category.id) > -1 : true;\n const isExcluded =\n this.exclude && this.exclude.length ? this.exclude.indexOf(category.id) > -1 : false;\n if (!isIncluded || isExcluded) {\n continue;\n }\n\n if (this.emojisToShowFilter) {\n const newEmojis = [];\n\n const { emojis } = category;\n // tslint:disable-next-line: prefer-for-of\n for (let emojiIndex = 0; emojiIndex < emojis!.length; emojiIndex++) {\n const emoji = emojis![emojiIndex];\n if (this.emojisToShowFilter(emoji)) {\n newEmojis.push(emoji);\n }\n }\n\n if (newEmojis.length) {\n const newCategory = {\n emojis: newEmojis,\n name: category.name,\n id: category.id,\n };\n\n this.categories.push(newCategory);\n }\n } else {\n this.categories.push(category);\n }\n\n this.categoriesIcons = { ...icons.categories, ...this.categoriesIcons };\n this.searchIcons = { ...icons.search, ...this.searchIcons };\n }\n\n const includeRecent =\n this.include && this.include.length\n ? this.include.indexOf(this.RECENT_CATEGORY.id) > -1\n : true;\n const excludeRecent =\n this.exclude && this.exclude.length\n ? this.exclude.indexOf(this.RECENT_CATEGORY.id) > -1\n : false;\n if (includeRecent && !excludeRecent) {\n this.hideRecent = false;\n this.categories.unshift(this.RECENT_CATEGORY);\n }\n\n if (this.categories[0]) {\n this.categories[0].first = true;\n }\n\n this.categories.unshift(this.SEARCH_CATEGORY);\n this.selected = this.categories.filter(category => category.first)[0].name;\n\n // Need to be careful if small number of categories\n const categoriesToLoadFirst = Math.min(this.categories.length, 3);\n this.setActiveCategories(\n (this.activeCategories = this.categories.slice(0, categoriesToLoadFirst)),\n );\n\n // Trim last active category\n const lastActiveCategoryEmojis = this.categories[categoriesToLoadFirst - 1].emojis!.slice();\n this.categories[categoriesToLoadFirst - 1].emojis = lastActiveCategoryEmojis.slice(0, 60);\n\n setTimeout(() => {\n // Restore last category\n this.categories[categoriesToLoadFirst - 1].emojis = lastActiveCategoryEmojis;\n this.setActiveCategories(this.categories);\n // The `setTimeout` will trigger the change detection, but since we're inside\n // the OnPush component we can run change detection locally starting from this\n // component and going down to the children.\n this.ref.detectChanges();\n\n // tslint:disable-next-line: no-unused-expression\n isPlatformBrowser(this.platformId) &&\n this.ngZone.runOutsideAngular(() => {\n // The `updateCategoriesSize` doesn't change properties that are used\n // in templates, thus this is run in the context of the root zone to avoid\n // running change detection.\n requestAnimationFrame(() => {\n this.updateCategoriesSize();\n });\n });\n });\n\n this.ngZone.runOutsideAngular(() => {\n // DOM events that are listened by Angular inside the template trigger change detection\n // and also wrapped into additional functions that call `markForCheck()`. We listen `scroll`\n // in the context of the root zone since it will not trigger change detection each time\n // the `scroll` event is dispatched.\n this.scrollListener = this.renderer.listen(this.scrollRef.nativeElement, 'scroll', () => {\n this.handleScroll();\n });\n });\n }\n\n ngOnDestroy(): void {\n this.scrollListener();\n // This is called here because the component might be destroyed\n // but there will still be a `requestAnimationFrame` callback in the queue\n // that calls `detectChanges()` on the `ViewRef`. This will lead to a runtime\n // exception if the `detectChanges()` is called after the `ViewRef` is destroyed.\n this.cancelAnimationFrame();\n }\n\n setActiveCategories(categoriesToMakeActive: Array<EmojiCategory>) {\n if (this.showSingleCategory) {\n this.activeCategories = categoriesToMakeActive.filter(\n x => x.name === this.selected || x === this.SEARCH_CATEGORY,\n );\n } else {\n this.activeCategories = categoriesToMakeActive;\n }\n }\n updateCategoriesSize() {\n this.categoryRefs.forEach(component => component.memoizeSize());\n\n if (this.scrollRef) {\n const target = this.scrollRef.nativeElement;\n this.scrollHeight = target.scrollHeight;\n this.clientHeight = target.clientHeight;\n this.clientWidth = target.clientWidth;\n }\n }\n handleAnchorClick($event: { category: EmojiCategory; index: number }) {\n this.updateCategoriesSize();\n this.selected = $event.category.name;\n this.setActiveCategories(this.categories);\n\n if (this.SEARCH_CATEGORY.emojis) {\n this.handleSearch(null);\n this.searchRef?.clear();\n this.handleAnchorClick($event);\n return;\n }\n\n const component = this.categoryRefs.find(n => n.id === $event.category.id);\n if (component) {\n let { top } = component;\n\n if ($event.category.first) {\n top = 0;\n } else {\n top += 1;\n }\n this.scrollRef.nativeElement.scrollTop = top;\n }\n this.nextScroll = $event.category.name;\n\n // handle component scrolling to load emojis\n for (const category of this.categories) {\n const componentToScroll = this.categoryRefs.find(({ id }) => id === category.id);\n componentToScroll?.handleScroll(this.scrollRef.nativeElement.scrollTop);\n }\n }\n categoryTrack(index: number, item: any) {\n return item.id;\n }\n handleScroll(noSelectionChange = false) {\n if (this.nextScroll) {\n this.selected = this.nextScroll;\n this.nextScroll = undefined;\n this.ref.detectChanges();\n return;\n }\n if (!this.scrollRef) {\n return;\n }\n if (this.showSingleCategory) {\n return;\n }\n\n let activeCategory: EmojiCategory | undefined;\n if (this.SEARCH_CATEGORY.emojis) {\n activeCategory = this.SEARCH_CATEGORY;\n } else {\n const target = this.scrollRef.nativeElement;\n // check scroll is not at bottom\n if (target.scrollTop === 0) {\n // hit the TOP\n activeCategory = this.categories.find(n => n.first === true);\n } else if (target.scrollHeight - target.scrollTop === this.clientHeight) {\n // scrolled to bottom activate last category\n activeCategory = this.categories[this.categories.length - 1];\n } else {\n // scrolling\n for (const category of this.categories) {\n const component = this.categoryRefs.find(({ id }) => id === category.id);\n const active: boolean | undefined = component?.handleScroll(target.scrollTop);\n if (active) {\n activeCategory = category;\n }\n }\n }\n\n this.scrollTop = target.scrollTop;\n }\n // This will allow us to run the change detection only when the category changes.\n if (!noSelectionChange && activeCategory && activeCategory.name !== this.selected) {\n this.selected = activeCategory.name;\n this.ref.detectChanges();\n } else if (noSelectionChange) {\n this.ref.detectChanges();\n }\n }\n handleSearch($emojis: any[] | null) {\n this.SEARCH_CATEGORY.emojis = $emojis;\n for (const component of this.categoryRefs.toArray()) {\n if (component.name === 'Search') {\n component.emojis = $emojis;\n component.updateDisplay($emojis ? 'block' : 'none');\n } else {\n component.updateDisplay($emojis ? 'none' : 'block');\n }\n }\n\n this.scrollRef.nativeElement.scrollTop = 0;\n this.handleScroll();\n }\n\n handleEnterKey($event: Event, emoji?: EmojiData) {\n if (!emoji) {\n if (this.SEARCH_CATEGORY.emojis !== null && this.SEARCH_CATEGORY.emojis.length) {\n emoji = this.SEARCH_CATEGORY.emojis[0];\n if (emoji) {\n this.emojiSelect.emit({ $event, emoji });\n } else {\n return;\n }\n }\n }\n\n if (!this.hideRecent && !this.recent && emoji) {\n this.frequently.add(emoji);\n }\n\n const component = this.categoryRefs.toArray()[1];\n if (component && this.enableFrequentEmojiSort) {\n component.getEmojis();\n component.ref.markForCheck();\n }\n }\n handleEmojiOver($event: EmojiEvent) {\n if (!this.showPreview || !this.previewRef) {\n return;\n }\n\n const emojiData = this.CUSTOM_CATEGORY.emojis!.find(\n (customEmoji: any) => customEmoji.id === $event.emoji.id,\n );\n if (emojiData) {\n $event.emoji = { ...emojiData };\n }\n\n this.previewEmoji = $event.emoji;\n this.cancelAnimationFrame();\n this.ref?.detectChanges();\n }\n handleEmojiLeave() {\n if (!this.showPreview || !this.previewRef) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.animationFrameRequestId = requestAnimationFrame(() => {\n this.previewEmoji = null;\n this.ref.detectChanges();\n });\n });\n }\n handleEmojiClick($event: EmojiEvent) {\n this.emojiClick.emit($event);\n this.emojiSelect.emit($event);\n this.handleEnterKey($event.$event, $event.emoji);\n }\n handleSkinChange(skin: Emoji['skin']) {\n this.skin = skin;\n localStorage.setItem(`${this.NAMESPACE}.skin`, String(skin));\n this.skinChange.emit(skin);\n }\n getWidth(): string {\n if (this.style && this.style.width) {\n return this.style.width;\n }\n return this.perLine * (this.emojiSize + 12) + 12 + 2 + this.measureScrollbar + 'px';\n }\n\n private cancelAnimationFrame(): void {\n if (this.animationFrameRequestId !== null) {\n cancelAnimationFrame(this.animationFrameRequestId);\n this.animationFrameRequestId = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { Emoji } from '@ctrl/ngx-emoji-mart/ngx-emoji';\n\n@Component({\n selector: 'emoji-skins',\n template: `\n <section\n class=\"emoji-mart-skin-swatches\"\n [class.opened]=\"opened\"\n >\n <span\n *ngFor=\"let skinTone of skinTones\"\n class=\"emoji-mart-skin-swatch\"\n [class.selected]=\"skinTone === skin\"\n >\n <span\n (click)=\"this.handleClick(skinTone)\"\n (keyup.enter)=\"handleClick(skinTone)\"\n (keyup.space)=\"handleClick(skinTone)\"\n class=\"emoji-mart-skin emoji-mart-skin-tone-{{ skinTone }}\"\n role=\"button\"\n [tabIndex]=\"tabIndex(skinTone)\"\n [attr.aria-hidden]=\"!isVisible(skinTone)\"\n [attr.aria-pressed]=\"pressed(skinTone)\"\n [attr.aria-haspopup]=\"!!isSelected(skinTone)\"\n [attr.aria-expanded]=\"expanded(skinTone)\"\n [attr.aria-label]=\"i18n.skintones[skinTone]\"\n [title]=\"i18n.skintones[skinTone]\"\n ></span>\n </span>\n </section>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n})\nexport class SkinComponent {\n /** currently selected skin */\n @Input() skin?: Emoji['skin'];\n @Input() i18n: any;\n @Output() changeSkin = new EventEmitter<number>();\n opened = false;\n skinTones = [1, 2, 3, 4, 5, 6];\n\n toggleOpen() {\n this.opened = !this.opened;\n }\n\n isSelected(skinTone: Emoji['skin']): boolean {\n return skinTone === this.skin;\n }\n\n isVisible(skinTone: Emoji['skin']): boolean {\n return this.opened || this.isSelected(skinTone);\n }\n\n pressed(skinTone: Emoji['skin']) {\n return this.opened ? !!this.isSelected(skinTone) : '';\n }\n\n tabIndex(skinTone: Emoji['skin']) {\n return this.isVisible(skinTone) ? '0' : '';\n }\n\n expanded(skinTone: Emoji['skin']) {\n return this.isSelected(skinTone) ? this.opened : '';\n }\n\n handleClick(skin: number) {\n if (!this.opened) {\n this.opened = true;\n return;\n }\n this.opened = false;\n if (skin !== this.skin) {\n this.changeSkin.emit(skin);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { EmojiModule } from '@ctrl/ngx-emoji-mart/ngx-emoji';\nimport { AnchorsComponent } from './anchors.component';\nimport { CategoryComponent } from './category.component';\nimport { PickerComponent } from './picker.component';\nimport { PreviewComponent } from './preview.component';\nimport { SearchComponent } from './search.component';\nimport { SkinComponent } from './skins.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, EmojiModule],\n exports: [\n PickerComponent,\n AnchorsComponent,\n CategoryComponent,\n SearchComponent,\n PreviewComponent,\n SkinComponent,\n ],\n declarations: [\n PickerComponent,\n AnchorsComponent,\n CategoryComponent,\n SearchComponent,\n PreviewComponent,\n SkinComponent,\n ],\n})\nexport class PickerModule {}\n"]}
@@ -1 +0,0 @@
1
- {"__symbolic":"module","version":4,"metadata":{"AnchorsComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":10,"character":1},"arguments":[{"selector":"emoji-mart-anchors","template":"\n <div class=\"emoji-mart-anchors\">\n <ng-template ngFor let-category [ngForOf]=\"categories\" let-idx=\"index\" [ngForTrackBy]=\"trackByFn\">\n <span\n *ngIf=\"category.anchor !== false\"\n [attr.title]=\"i18n.categories[category.id]\"\n (click)=\"this.handleClick($event, idx)\"\n class=\"emoji-mart-anchor\"\n [class.emoji-mart-anchor-selected]=\"category.name === selected\"\n [style.color]=\"category.name === selected ? color : null\"\n >\n <div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\">\n <path [attr.d]=\"icons[category.id]\" />\n </svg>\n </div>\n <span class=\"emoji-mart-anchor-bar\" [style.background-color]=\"color\"></span>\n </span>\n </ng-template>\n </div>\n ","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":33,"character":19},"member":"OnPush"},"preserveWhitespaces":false}]}],"members":{"categories":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":37,"character":3}}]}],"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"selected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"icons":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"anchorClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":42,"character":3}}]}],"trackByFn":[{"__symbolic":"method"}],"handleClick":[{"__symbolic":"method"}]}},"CategoryComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":19,"character":1},"arguments":[{"selector":"emoji-category","template":"\n <section\n #container\n class=\"emoji-mart-category\"\n [attr.aria-label]=\"i18n.categories[id]\"\n [class.emoji-mart-no-results]=\"emojis && !emojis.length\"\n [ngStyle]=\"containerStyles\"\n >\n <div class=\"emoji-mart-category-label\" [ngStyle]=\"labelStyles\" [attr.data-name]=\"name\">\n <!-- already labeled by the section aria-label -->\n <span #label [ngStyle]=\"labelSpanStyles\" aria-hidden=\"true\">\n {{ i18n.categories[id] }}\n </span>\n </div>\n\n <div\n *ngIf=\"virtualize; else normalRenderTemplate\"\n >\n <div *ngIf=\"filteredEmojis$ | async as filteredEmojis\">\n <ngx-emoji\n *ngFor=\"let emoji of filteredEmojis; trackBy: trackById\"\n [emoji]=\"emoji\"\n [size]=\"emojiSize\"\n [skin]=\"emojiSkin\"\n [isNative]=\"emojiIsNative\"\n [set]=\"emojiSet\"\n [sheetSize]=\"emojiSheetSize\"\n [forceSize]=\"emojiForceSize\"\n [tooltip]=\"emojiTooltip\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [imageUrlFn]=\"emojiImageUrlFn\"\n [hideObsolete]=\"hideObsolete\"\n [useButton]=\"emojiUseButton\"\n (emojiOver)=\"emojiOver.emit($event)\"\n (emojiLeave)=\"emojiLeave.emit($event)\"\n (emojiClick)=\"emojiClick.emit($event)\"\n ></ngx-emoji>\n </div>\n </div>\n\n <div *ngIf=\"emojis && !emojis.length\">\n <div>\n <ngx-emoji\n [emoji]=\"notFoundEmoji\"\n size=\"38\"\n [skin]=\"emojiSkin\"\n [isNative]=\"emojiIsNative\"\n [set]=\"emojiSet\"\n [sheetSize]=\"emojiSheetSize\"\n [forceSize]=\"emojiForceSize\"\n [tooltip]=\"emojiTooltip\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [useButton]=\"emojiUseButton\"\n ></ngx-emoji>\n </div>\n\n <div class=\"emoji-mart-no-results-label\">\n {{ i18n.notfound }}\n </div>\n </div>\n </section>\n\n <ng-template #normalRenderTemplate>\n <div *ngIf=\"emojis\">\n <ngx-emoji\n *ngFor=\"let emoji of emojis; trackBy: trackById\"\n [emoji]=\"emoji\"\n [size]=\"emojiSize\"\n [skin]=\"emojiSkin\"\n [isNative]=\"emojiIsNative\"\n [set]=\"emojiSet\"\n [sheetSize]=\"emojiSheetSize\"\n [forceSize]=\"emojiForceSize\"\n [tooltip]=\"emojiTooltip\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [imageUrlFn]=\"emojiImageUrlFn\"\n [hideObsolete]=\"hideObsolete\"\n (emojiOver)=\"emojiOver.emit($event)\"\n (emojiLeave)=\"emojiLeave.emit($event)\"\n (emojiClick)=\"emojiClick.emit($event)\"\n ></ngx-emoji>\n </div>\n </ng-template>\n ","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":105,"character":19},"member":"OnPush"},"preserveWhitespaces":false}]}],"members":{"emojis":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":3}}]}],"hasStickyPosition":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":110,"character":3}}]}],"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"perLine":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":112,"character":3}}]}],"totalFrequentLines":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":113,"character":3}}]}],"recent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":114,"character":3}}]}],"custom":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":115,"character":3}}]}],"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":116,"character":3}}]}],"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":117,"character":3}}]}],"hideObsolete":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":118,"character":3}}]}],"notFoundEmoji":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":119,"character":3}}]}],"virtualize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":120,"character":3}}]}],"virtualizeOffset":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":121,"character":3}}]}],"emojiIsNative":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":122,"character":3}}]}],"emojiSkin":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":123,"character":3}}]}],"emojiSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":124,"character":3}}]}],"emojiSet":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":125,"character":3}}]}],"emojiSheetSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":126,"character":3}}]}],"emojiForceSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":127,"character":3}}]}],"emojiTooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":128,"character":3}}]}],"emojiBackgroundImageFn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":129,"character":3}}]}],"emojiImageUrlFn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":130,"character":3}}]}],"emojiUseButton":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":131,"character":3}}]}],"emojiOver":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":132,"character":3}}]}],"emojiLeave":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":133,"character":3}}]}],"emojiClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":134,"character":3}}]}],"container":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":135,"character":3},"arguments":["container",{"static":true}]}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":136,"character":3},"arguments":["label",{"static":true}]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":149,"character":16},{"__symbolic":"reference","module":"@ctrl/ngx-emoji-mart/ngx-emoji","name":"EmojiService","line":150,"character":26},{"__symbolic":"reference","name":"EmojiFrequentlyService"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"memoizeSize":[{"__symbolic":"method"}],"handleScroll":[{"__symbolic":"method"}],"getEmojis":[{"__symbolic":"method"}],"updateDisplay":[{"__symbolic":"method"}],"trackById":[{"__symbolic":"method"}],"filterEmojis":[{"__symbolic":"method"}]}},"EmojiFrequentlyService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":29,"character":15},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":29,"character":22}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"init":[{"__symbolic":"method"}],"add":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"EmojiSearch":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ctrl/ngx-emoji-mart/ngx-emoji","name":"EmojiService","line":17,"character":36}]}],"addCustomToPool":[{"__symbolic":"method"}],"search":[{"__symbolic":"method"}],"buildSearch":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"PickerComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":62,"character":1},"arguments":[{"selector":"emoji-mart","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":65,"character":19},"member":"OnPush"},"preserveWhitespaces":false,"template":"<section\n class=\"emoji-mart {{ darkMode ? 'emoji-mart-dark' : '' }}\"\n [style.width]=\"getWidth()\"\n [ngStyle]=\"style\"\n>\n <div class=\"emoji-mart-bar\">\n <emoji-mart-anchors\n [categories]=\"categories\"\n (anchorClick)=\"handleAnchorClick($event)\"\n [color]=\"color\"\n [selected]=\"selected\"\n [i18n]=\"i18n\"\n [icons]=\"categoriesIcons\"\n ></emoji-mart-anchors>\n </div>\n <emoji-search\n *ngIf=\"enableSearch\"\n [i18n]=\"i18n\"\n (searchResults)=\"handleSearch($event)\"\n (enterKey)=\"handleEnterKey($event)\"\n [include]=\"include\"\n [exclude]=\"exclude\"\n [custom]=\"custom\"\n [autoFocus]=\"autoFocus\"\n [icons]=\"searchIcons\"\n [emojisToShowFilter]=\"emojisToShowFilter\"\n ></emoji-search>\n <section #scrollRef class=\"emoji-mart-scroll\" [attr.aria-label]=\"i18n.emojilist\">\n <emoji-category\n *ngFor=\"let category of activeCategories; let idx = index; trackBy: categoryTrack\"\n [id]=\"category.id\"\n [name]=\"category.name\"\n [emojis]=\"category.emojis\"\n [perLine]=\"perLine\"\n [totalFrequentLines]=\"totalFrequentLines\"\n [hasStickyPosition]=\"isNative\"\n [i18n]=\"i18n\"\n [hideObsolete]=\"hideObsolete\"\n [notFoundEmoji]=\"notFoundEmoji\"\n [custom]=\"category.id == RECENT_CATEGORY.id ? CUSTOM_CATEGORY.emojis : undefined\"\n [recent]=\"category.id == RECENT_CATEGORY.id ? recent : undefined\"\n [virtualize]=\"virtualize\"\n [virtualizeOffset]=\"virtualizeOffset\"\n [emojiIsNative]=\"isNative\"\n [emojiSkin]=\"skin\"\n [emojiSize]=\"emojiSize\"\n [emojiSet]=\"set\"\n [emojiSheetSize]=\"sheetSize\"\n [emojiForceSize]=\"isNative\"\n [emojiTooltip]=\"emojiTooltip\"\n [emojiBackgroundImageFn]=\"backgroundImageFn\"\n [emojiImageUrlFn]=\"imageUrlFn\"\n [emojiUseButton]=\"useButton\"\n (emojiOver)=\"handleEmojiOver($event)\"\n (emojiLeave)=\"handleEmojiLeave()\"\n (emojiClick)=\"handleEmojiClick($event)\"\n ></emoji-category>\n </section>\n <div class=\"emoji-mart-bar\" *ngIf=\"showPreview\">\n <emoji-preview\n [title]=\"title\"\n [emoji]=\"previewEmoji\"\n [idleEmoji]=\"emoji\"\n [emojiIsNative]=\"isNative\"\n [emojiSize]=\"38\"\n [emojiSkin]=\"skin\"\n [emojiSet]=\"set\"\n [i18n]=\"i18n\"\n [emojiSheetSize]=\"sheetSize\"\n [emojiBackgroundImageFn]=\"backgroundImageFn\"\n [emojiImageUrlFn]=\"imageUrlFn\"\n (skinChange)=\"handleSkinChange($event)\"\n ></emoji-preview>\n </div>\n</section>\n"}]}],"members":{"perLine":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":69,"character":3}}]}],"totalFrequentLines":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3}}]}],"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"style":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":3}}]}],"emoji":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"darkMode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}}]}],"hideObsolete":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}}]}],"categories":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3}}]}],"activeCategories":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":3}}]}],"set":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"skin":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":85,"character":3}}]}],"isNative":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3}}]}],"emojiSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3}}]}],"sheetSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":89,"character":3}}]}],"emojisToShowFilter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3}}]}],"showPreview":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":3}}]}],"emojiTooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"autoFocus":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3}}]}],"custom":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3}}]}],"hideRecent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":95,"character":3}}]}],"imageUrlFn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":3}}]}],"include":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":3}}]}],"exclude":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":98,"character":3}}]}],"notFoundEmoji":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":99,"character":3}}]}],"categoriesIcons":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":100,"character":3}}]}],"searchIcons":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":101,"character":3}}]}],"useButton":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":3}}]}],"enableFrequentEmojiSort":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3}}]}],"enableSearch":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":3}}]}],"showSingleCategory":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3}}]}],"virtualize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":106,"character":3}}]}],"virtualizeOffset":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":107,"character":3}}]}],"recent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":108,"character":3}}]}],"emojiClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":109,"character":3}}]}],"emojiSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":110,"character":3}}]}],"skinChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":111,"character":3}}]}],"scrollRef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":112,"character":3},"arguments":["scrollRef",{"static":true}]}]}],"previewRef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":113,"character":3},"arguments":[{"__symbolic":"reference","name":"PreviewComponent"},{"static":false}]}]}],"searchRef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":114,"character":3},"arguments":[{"__symbolic":"reference","name":"SearchComponent"},{"static":false}]}]}],"categoryRefs":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChildren","line":115,"character":3},"arguments":[{"__symbolic":"reference","name":"CategoryComponent"}]}]}],"backgroundImageFn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":145,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":154,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":154,"character":12}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":150,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":151,"character":22},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":152,"character":17},{"__symbolic":"reference","name":"EmojiFrequentlyService"},{"__symbolic":"reference","name":"string"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"setActiveCategories":[{"__symbolic":"method"}],"updateCategoriesSize":[{"__symbolic":"method"}],"handleAnchorClick":[{"__symbolic":"method"}],"categoryTrack":[{"__symbolic":"method"}],"handleScroll":[{"__symbolic":"method"}],"handleSearch":[{"__symbolic":"method"}],"handleEnterKey":[{"__symbolic":"method"}],"handleEmojiOver":[{"__symbolic":"method"}],"handleEmojiLeave":[{"__symbolic":"method"}],"handleEmojiClick":[{"__symbolic":"method"}],"handleSkinChange":[{"__symbolic":"method"}],"getWidth":[{"__symbolic":"method"}],"cancelAnimationFrame":[{"__symbolic":"method"}]}},"PickerModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":12,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":12},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":13,"character":26},{"__symbolic":"reference","module":"@ctrl/ngx-emoji-mart/ngx-emoji","name":"EmojiModule","line":13,"character":39}],"exports":[{"__symbolic":"reference","name":"PickerComponent"},{"__symbolic":"reference","name":"AnchorsComponent"},{"__symbolic":"reference","name":"CategoryComponent"},{"__symbolic":"reference","name":"SearchComponent"},{"__symbolic":"reference","name":"PreviewComponent"},{"__symbolic":"reference","name":"SkinComponent"}],"declarations":[{"__symbolic":"reference","name":"PickerComponent"},{"__symbolic":"reference","name":"AnchorsComponent"},{"__symbolic":"reference","name":"CategoryComponent"},{"__symbolic":"reference","name":"SearchComponent"},{"__symbolic":"reference","name":"PreviewComponent"},{"__symbolic":"reference","name":"SkinComponent"}]}]}],"members":{}},"PreviewComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":12,"character":1},"arguments":[{"selector":"emoji-preview","template":"\n <div class=\"emoji-mart-preview\" *ngIf=\"emoji && emojiData\">\n <div class=\"emoji-mart-preview-emoji\">\n <ngx-emoji\n [emoji]=\"emoji\"\n [size]=\"38\"\n [isNative]=\"emojiIsNative\"\n [skin]=\"emojiSkin\"\n [size]=\"emojiSize\"\n [set]=\"emojiSet\"\n [sheetSize]=\"emojiSheetSize\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [imageUrlFn]=\"emojiImageUrlFn\"\n ></ngx-emoji>\n </div>\n\n <div class=\"emoji-mart-preview-data\">\n <div class=\"emoji-mart-preview-name\">{{ emojiData.name }}</div>\n <div class=\"emoji-mart-preview-shortname\">\n <span\n class=\"emoji-mart-preview-shortname\"\n *ngFor=\"let short_name of emojiData.shortNames\"\n >\n :{{ short_name }}:\n </span>\n </div>\n <div class=\"emoji-mart-preview-emoticons\">\n <span class=\"emoji-mart-preview-emoticon\" *ngFor=\"let emoticon of listedEmoticons\">\n {{ emoticon }}\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"emoji-mart-preview\" *ngIf=\"!emoji\">\n <div class=\"emoji-mart-preview-emoji\">\n <ngx-emoji\n *ngIf=\"idleEmoji && idleEmoji.length\"\n [isNative]=\"emojiIsNative\"\n [skin]=\"emojiSkin\"\n [set]=\"emojiSet\"\n [emoji]=\"idleEmoji\"\n [backgroundImageFn]=\"emojiBackgroundImageFn\"\n [size]=\"38\"\n [imageUrlFn]=\"emojiImageUrlFn\"\n ></ngx-emoji>\n </div>\n\n <div class=\"emoji-mart-preview-data\">\n <span class=\"emoji-mart-title-label\">{{ title }}</span>\n </div>\n\n <div class=\"emoji-mart-preview-skins\">\n <emoji-skins [skin]=\"emojiSkin\" (changeSkin)=\"skinChange.emit($event)\" [i18n]=\"i18n\">\n </emoji-skins>\n </div>\n </div>\n ","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":72,"character":19},"member":"OnPush"},"preserveWhitespaces":false}]}],"members":{"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"emoji":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"idleEmoji":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}}]}],"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}}]}],"emojiIsNative":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}}]}],"emojiSkin":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3}}]}],"emojiSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"emojiSet":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":3}}]}],"emojiSheetSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"emojiBackgroundImageFn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":85,"character":3}}]}],"emojiImageUrlFn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":86,"character":3}}]}],"skinChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":87,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":91,"character":26},{"__symbolic":"reference","module":"@ctrl/ngx-emoji-mart/ngx-emoji","name":"EmojiService","line":91,"character":67}]}],"ngOnChanges":[{"__symbolic":"method"}]}},"SearchComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":15,"character":1},"arguments":[{"selector":"emoji-search","template":"\n <div class=\"emoji-mart-search\">\n <input\n [id]=\"inputId\"\n #inputRef\n type=\"search\"\n (keyup.enter)=\"handleEnterKey($event)\"\n [placeholder]=\"i18n.search\"\n [autofocus]=\"autoFocus\"\n [(ngModel)]=\"query\"\n (ngModelChange)=\"handleChange()\"\n />\n <!--\n Use a <label> in addition to the placeholder for accessibility, but place it off-screen\n http://www.maxability.co.in/2016/01/placeholder-attribute-and-why-it-is-not-accessible/\n -->\n <label class=\"emoji-mart-sr-only\" [htmlFor]=\"inputId\">\n {{ i18n.search }}\n </label>\n <button\n type=\"button\"\n class=\"emoji-mart-search-icon\"\n (click)=\"clear()\"\n (keyup.enter)=\"clear()\"\n [disabled]=\"!isSearching\"\n [attr.aria-label]=\"i18n.clear\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n width=\"13\"\n height=\"13\"\n opacity=\"0.5\"\n >\n <path [attr.d]=\"icon\" />\n </svg>\n </button>\n </div>\n ","preserveWhitespaces":false}]}],"members":{"maxResults":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":59,"character":3}}]}],"autoFocus":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"include":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"exclude":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":63,"character":3}}]}],"custom":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":3}}]}],"icons":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"emojisToShowFilter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3}}]}],"searchResults":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":67,"character":3}}]}],"enterKey":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":68,"character":3}}]}],"inputRef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":69,"character":3},"arguments":["inputRef",{"static":true}]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EmojiSearch"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"handleEnterKey":[{"__symbolic":"method"}],"handleSearch":[{"__symbolic":"method"}],"handleChange":[{"__symbolic":"method"}]}},"SkinComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":10,"character":1},"arguments":[{"selector":"emoji-skins","template":"\n <section\n class=\"emoji-mart-skin-swatches\"\n [class.opened]=\"opened\"\n >\n <span\n *ngFor=\"let skinTone of skinTones\"\n class=\"emoji-mart-skin-swatch\"\n [class.selected]=\"skinTone === skin\"\n >\n <span\n (click)=\"this.handleClick(skinTone)\"\n (keyup.enter)=\"handleClick(skinTone)\"\n (keyup.space)=\"handleClick(skinTone)\"\n class=\"emoji-mart-skin emoji-mart-skin-tone-{{ skinTone }}\"\n role=\"button\"\n [tabIndex]=\"tabIndex(skinTone)\"\n [attr.aria-hidden]=\"!isVisible(skinTone)\"\n [attr.aria-pressed]=\"pressed(skinTone)\"\n [attr.aria-haspopup]=\"!!isSelected(skinTone)\"\n [attr.aria-expanded]=\"expanded(skinTone)\"\n [attr.aria-label]=\"i18n.skintones[skinTone]\"\n [title]=\"i18n.skintones[skinTone]\"\n ></span>\n </span>\n </section>\n ","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":39,"character":19},"member":"OnPush"},"preserveWhitespaces":false}]}],"members":{"skin":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":44,"character":3}}]}],"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"changeSkin":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":46,"character":3}}]}],"toggleOpen":[{"__symbolic":"method"}],"isSelected":[{"__symbolic":"method"}],"isVisible":[{"__symbolic":"method"}],"pressed":[{"__symbolic":"method"}],"tabIndex":[{"__symbolic":"method"}],"expanded":[{"__symbolic":"method"}],"handleClick":[{"__symbolic":"method"}]}}},"origins":{"AnchorsComponent":"./anchors.component","CategoryComponent":"./category.component","EmojiFrequentlyService":"./emoji-frequently.service","EmojiSearch":"./emoji-search.service","PickerComponent":"./picker.component","PickerModule":"./picker.module","PreviewComponent":"./preview.component","SearchComponent":"./search.component","SkinComponent":"./skins.component"},"importAs":"@ctrl/ngx-emoji-mart"}
@@ -1,54 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
- export class AnchorsComponent {
3
- constructor() {
4
- this.categories = [];
5
- this.icons = {};
6
- this.anchorClick = new EventEmitter();
7
- }
8
- trackByFn(idx, cat) {
9
- return cat.id;
10
- }
11
- handleClick($event, index) {
12
- this.anchorClick.emit({
13
- category: this.categories[index],
14
- index,
15
- });
16
- }
17
- }
18
- AnchorsComponent.decorators = [
19
- { type: Component, args: [{
20
- selector: 'emoji-mart-anchors',
21
- template: `
22
- <div class="emoji-mart-anchors">
23
- <ng-template ngFor let-category [ngForOf]="categories" let-idx="index" [ngForTrackBy]="trackByFn">
24
- <span
25
- *ngIf="category.anchor !== false"
26
- [attr.title]="i18n.categories[category.id]"
27
- (click)="this.handleClick($event, idx)"
28
- class="emoji-mart-anchor"
29
- [class.emoji-mart-anchor-selected]="category.name === selected"
30
- [style.color]="category.name === selected ? color : null"
31
- >
32
- <div>
33
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
34
- <path [attr.d]="icons[category.id]" />
35
- </svg>
36
- </div>
37
- <span class="emoji-mart-anchor-bar" [style.background-color]="color"></span>
38
- </span>
39
- </ng-template>
40
- </div>
41
- `,
42
- changeDetection: ChangeDetectionStrategy.OnPush,
43
- preserveWhitespaces: false
44
- },] }
45
- ];
46
- AnchorsComponent.propDecorators = {
47
- categories: [{ type: Input }],
48
- color: [{ type: Input }],
49
- selected: [{ type: Input }],
50
- i18n: [{ type: Input }],
51
- icons: [{ type: Input }],
52
- anchorClick: [{ type: Output }]
53
- };
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9ycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BpY2tlci9hbmNob3JzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQThCdkIsTUFBTSxPQUFPLGdCQUFnQjtJQTFCN0I7UUEyQlcsZUFBVSxHQUFvQixFQUFFLENBQUM7UUFJakMsVUFBSyxHQUE4QixFQUFFLENBQUM7UUFDckMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBOEMsQ0FBQztJQVd6RixDQUFDO0lBVEMsU0FBUyxDQUFDLEdBQVcsRUFBRSxHQUFrQjtRQUN2QyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUNELFdBQVcsQ0FBQyxNQUFhLEVBQUUsS0FBYTtRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQixRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDaEMsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQTFDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVDtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsbUJBQW1CLEVBQUUsS0FBSzthQUMzQjs7O3lCQUVFLEtBQUs7b0JBQ0wsS0FBSzt1QkFDTCxLQUFLO21CQUNMLEtBQUs7b0JBQ0wsS0FBSzswQkFDTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRW1vamlDYXRlZ29yeSB9IGZyb20gJ0BjdHJsL25neC1lbW9qaS1tYXJ0L25neC1lbW9qaSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Vtb2ppLW1hcnQtYW5jaG9ycycsXG4gIHRlbXBsYXRlOiBgXG4gIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LWFuY2hvcnNcIj5cbiAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNhdGVnb3J5IFtuZ0Zvck9mXT1cImNhdGVnb3JpZXNcIiBsZXQtaWR4PVwiaW5kZXhcIiBbbmdGb3JUcmFja0J5XT1cInRyYWNrQnlGblwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJjYXRlZ29yeS5hbmNob3IgIT09IGZhbHNlXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwiaTE4bi5jYXRlZ29yaWVzW2NhdGVnb3J5LmlkXVwiXG4gICAgICAgIChjbGljayk9XCJ0aGlzLmhhbmRsZUNsaWNrKCRldmVudCwgaWR4KVwiXG4gICAgICAgIGNsYXNzPVwiZW1vamktbWFydC1hbmNob3JcIlxuICAgICAgICBbY2xhc3MuZW1vamktbWFydC1hbmNob3Itc2VsZWN0ZWRdPVwiY2F0ZWdvcnkubmFtZSA9PT0gc2VsZWN0ZWRcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiY2F0ZWdvcnkubmFtZSA9PT0gc2VsZWN0ZWQgPyBjb2xvciA6IG51bGxcIlxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj5cbiAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwiaWNvbnNbY2F0ZWdvcnkuaWRdXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZW1vamktbWFydC1hbmNob3ItYmFyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY29sb3JcIj48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgQW5jaG9yc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNhdGVnb3JpZXM6IEVtb2ppQ2F0ZWdvcnlbXSA9IFtdO1xuICBASW5wdXQoKSBjb2xvcj86IHN0cmluZztcbiAgQElucHV0KCkgc2VsZWN0ZWQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGkxOG46IGFueTtcbiAgQElucHV0KCkgaWNvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgQE91dHB1dCgpIGFuY2hvckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNhdGVnb3J5OiBFbW9qaUNhdGVnb3J5LCBpbmRleDogbnVtYmVyIH0+KCk7XG5cbiAgdHJhY2tCeUZuKGlkeDogbnVtYmVyLCBjYXQ6IEVtb2ppQ2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gY2F0LmlkO1xuICB9XG4gIGhhbmRsZUNsaWNrKCRldmVudDogRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmFuY2hvckNsaWNrLmVtaXQoe1xuICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcmllc1tpbmRleF0sXG4gICAgICBpbmRleCxcbiAgICB9KTtcbiAgfVxufVxuIl19