{"version":3,"sources":["webpack:///./src/components/utilities/Emoji.vue","webpack:///./src/components/utilities/Emoji.vue?3a56","webpack:///./src/view/apps/chat/overview/SingleGroupChat.vue?6e1a","webpack:///./src/view/apps/chat/overview/SingleChat.vue?3633","webpack:///./src/view/apps/chat/overview/SingleGroupChat.vue","webpack:///./src/view/apps/chat/overview/SingleGroupChat.vue?9c3a","webpack:///./src/view/apps/chat/overview/SingleChat.vue","webpack:///./src/view/apps/chat/overview/SingleChat.vue?1ab9","webpack:///./src/view/dashboard/AllTreatment.vue?d875","webpack:///./node_modules/emoji-picker-element/picker.js","webpack:///./src/view/dashboard/AllTreatment.vue","webpack:///./src/view/dashboard/AllTreatment.vue?d2fa","webpack:///./src/view/apps/chat/overview/SingleGroupChat.vue?b754","webpack:///./src/view/dashboard/AllTreatment.vue?ee97","webpack:///./node_modules/emoji-picker-element/database.js","webpack:///./src/static/img/avatar/chat-auth.png"],"names":["_createBlock","_component_emoji_picker","onEmojiClick","_ctx","OnEmojiClick","class","defineComponent","props","emojiClick","PropTypes","func","def","emoji","console","log","setup","toRefs","e","value","detail","unicode","__exports__","render","style","id","overflow","_createElementVNode","_component_SingleChatWrapper","_createVNode","_component_sdCards","title","_withCtx","_component_router_link","to","_component_a_avatar","src","_hoisted_1","_toDisplayString","treatmentName","docName","loader","noMessage","_createElementBlock","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","require","alt","_hoisted_9","_component_MessageList","_hoisted_11","_hoisted_23","_component_Main","_hoisted_24","_hoisted_13","_Fragment","_renderList","messages","chat","_mergeProps","_toHandlers","paramTrigger","key","admin","doc","_normalizeClass","_hoisted_14","_component_sdHeading","as","_hoisted_15","_hoisted_16","_hoisted_18","note","_hoisted_19","pat","_hoisted_20","_hoisted_21","timestamp","moment","format","_hoisted_22","_component_Footer","_cache","args","handleForm","fileList","length","fileList2","_hoisted_25","placeholder","name","chatMessage","$event","_hoisted_26","_component_sdButton","onClick","type","_component_sdFeatherIcons","size","SingleGroupChat","components","SingleChatWrapper","MessageList","BackShadowEmoji","Footer","EmojiPicker","PerfectScrollbar","data","treatment","isSent","this","$route","params","computed","getMessages","updated","methods","moveBottom","axios","post","then","res","response","message","doc_name","Object","entries","reverse","splice","$nextTick","myDiv","document","getElementById","scrollTop","scrollHeight","preventDefault","casenum","status","state","dispatch","useStore","useRoute","rtl","ChangeLayoutMode","rtlData","chatData","groupData","left","me","ref","singleContent","content","groupName","inputValue","handleChange","target","handleSubmit","getMessage","onMounted","action","headers","authorization","listType","onChange","info","file","success","error","attachment","role","pickerShow","_component_BackShadowEmoji","setPickerShow","_component_perfect_scrollbar","options","time","img","email","index","_hoisted_8","_component_sdDropdown","placement","overlay","_hoisted_10","_hoisted_12","_hoisted_30","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_40","onSubmit","_hoisted_41","_hoisted_42","_component_EmojiPicker","onPickerShow","width","_hoisted_44","SingleChat","privetData","userName","emojiObject","pushcontent","Date","getTime","seen","reaction","_message","noop","run","fn","blank_object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","src_url_equal_anchor","src_url_equal","element_src","url","createElement","href","is_empty","obj","keys","action_destroyer","action_result","destroy","globals","window","globalThis","global","append","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","element","text","createTextNode","listen","event","handler","addEventListener","removeEventListener","attr","attribute","removeAttribute","getAttribute","setAttribute","set_data","set_input_value","input","set_style","important","removeProperty","setProperty","current_component","set_current_component","component","get_current_component","Error","onMount","$$","on_mount","push","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","schedule_update","flush","add_render_callback","seen_callbacks","Set","flushidx","saved_component","update","pop","i","callback","has","add","clear","fragment","before_update","dirty","p","ctx","after_update","flush_render_callbacks","filtered","targets","c","indexOf","outroing","transition_in","block","local","delete","destroy_block","lookup","d","update_keyed_each","old_blocks","get_key","dynamic","list","create_each_block","next","get_context","o","n","old_indexes","new_blocks","new_lookup","Map","deltas","updates","child_ctx","get","set","Math","abs","will_move","did_move","m","first","new_block","old_block","new_key","old_key","mount_component","customElement","new_on_destroy","map","filter","on_destroy","destroy_component","detaching","make_dirty","fill","init","instance","create_fragment","not_equal","append_styles","parent_component","bound","on_disconnect","context","callbacks","skip_bound","root","ready","ret","rest","undefined","SvelteComponent","$destroy","$$props","$$set","allGroups","groups","slice","customGroup","MIN_SEARCH_TEXT_LENGTH","NUM_SKIN_TONES","rIC","requestIdleCallback","setTimeout","hasZwj","includes","versionsAndTestEmoji","TIMEOUT_BEFORE_LOADING_MESSAGE","DEFAULT_SKIN_TONE_EMOJI","DEFAULT_NUM_COLUMNS","MOST_COMMONLY_USED_EMOJI","FONT_FAMILY","DEFAULT_CATEGORY_SORTING","getTextFeature","color","canvas","height","getContext","textBaseline","font","fillStyle","scale","fillText","getImageData","compareFeatures","feature1","feature2","feature1Str","join","feature2Str","startsWith","testColorEmojiSupported","determineEmojiSupportLevel","version","promise","detectEmojiSupportLevel","supportedZwjEmojis","VARIATION_SELECTOR","SKINTONE_MODIFIER","ZWJ","LIGHT_SKIN_TONE","LIGHT_SKIN_TONE_MODIFIER","applySkinTone","str","skinTone","zwjIndex","substring","String","fromCodePoint","endsWith","halt","stopPropagation","incrementOrDecrement","decrement","val","arr","uniqBy","item","summarizeEmojisForUI","emojis","emojiSupportLevel","toSimpleSkinsMap","skins","skin","tone","shortcodes","category","rAF","requestAnimationFrame","baselineEmojiWidth","resizeObserverSupported","ResizeObserver","calculateWidth","onUpdate","resizeObserver","contentRect","observe","getBoundingClientRect","disconnect","calculateTextWidth","range","createRange","selectNode","firstChild","checkZwjSupport","zwjEmojisToCheck","baselineEmoji","emojiToDomNode","domNode","emojiWidth","supported","uniq","_","resetScrollTopIfPossible","Map_1","get_each_context","get_each_context_1","get_each_context_2","get_each_context_3","get_each_context_4","create_each_block_4","key_1","div","t","div_id_value","div_class_value","div_aria_selected_value","div_title_value","div_aria_label_value","t_value","skinTones","new_ctx","create_each_block_3","button","button_aria_controls_value","button_aria_label_value","button_aria_selected_value","button_title_value","mounted","dispose","click_handler","categories","create_else_block_1","img_src_value","create_if_block_1","create_each_block_2","button_role_value","button_class_value","button_id_value","select_block_type","current_block_type","if_block","create_each_block_1","div0","div0_id_value","div0_class_value","div1","div1_role_value","div1_aria_labelledby_value","div1_id_value","searchResultsLabel","custom","each_blocks","each_1_lookup","each_value_2","create_else_block","create_if_block","select_block_type_1","section","div4","input_placeholder_value","input_aria_expanded_value","input_aria_activedescendant_value","label","t0","span0","t1","div2","button0","t2","button0_class_value","div2_class_value","span1","t3","div3","div3_class_value","div3_aria_label_value","div3_aria_activedescendant_value","div3_aria_hidden_value","div5","div5_aria_label_value","div7","div6","div8","t4","div8_class_value","div10","div9","div10_class_value","div10_role_value","div10_aria_label_value","div10_id_value","div11","div11_class_value","div11_aria_label_value","button1","section_aria_label_value","t0_value","searchLabel","t1_value","searchDescription","t3_value","skinToneDescription","each_blocks_3","each0_lookup","each_blocks_2","each1_lookup","each_blocks_1","each2_lookup","each3_lookup","each_value_4","each_value_3","get_key_1","each_value_1","get_key_2","each_value","get_key_3","textContent","skinTonesLabel","categoriesLabel","favoritesLabel","regionLabel","call","$$self","$$invalidate","rootElement","tabpanelElement","skinToneDropdown","skinToneButtonText","pickerStyle","defaultFavoriteEmojis","currentGroup","activeSearchItemId","skinToneEmoji","i18n","database","customEmoji","customCategorySorting","emojiVersion","initialLoad","currentEmojis","currentEmojisWithCategories","rawSearchText","searchText","searchMode","activeSearchItem","skinTonePickerExpanded","skinTonePickerExpandedAfterAnimation","currentSkinTone","activeSkinTone","skinToneButtonLabel","currentFavorites","numColumns","isRtl","scrollbarWidth","currentGroupIndex","groups$1","databaseLoaded","focus","getRootNode","fireEvent","dispatchEvent","CustomEvent","bubbles","composed","unicodeWithSkin","labelWithSkin","calculateEmojiGridStyle","getComputedStyle","newNumColumns","parseInt","getPropertyValue","newIsRtl","parentWidth","parentElement","newScrollbarWidth","checkZwjSupportAndUpdate","rootNode","isZwjSupported","async","filterEmojisByVersion","summarizeEmojis","getEmojisByGroup","group","getEmojiByGroup","getEmojisBySearchQuery","query","getEmojiBySearchQuery","onSearchKeydown","goToNextOrPrevious","previous","clickEmoji","onNavClick","findIndex","onNavKeydown","doFocus","el","previousSibling","nextSibling","lastChild","unicodeOrName","getEmojiByUnicodeOrName","emojiSummary","find","skinTonedUnicode","incrementFavoriteEmojiCount","classList","contains","changeSkinTone","setPreferredSkinTone","onSkinToneOptionsClick","match","onClickSkinToneButton","onSkinToneOptionsKeydown","changeActiveSkinTone","nextSkinTone","onSkinToneOptionsKeyup","onSkinToneOptionsFocusOut","relatedTarget","input_input_handler","div3_binding","$$value","level","emojiUnsupportedMessage","div10_binding","button1_binding","section_binding","handleDatabaseLoading","showingLoadingMessage","timeoutHandle","loadingMessage","err","networkErrorMessage","clearTimeout","trim","updateEmojis","currentSearchText","newEmojis","currentGroupId","updatePreferredSkinTone","getPreferredSkinTone","Array","skinToneLabel","replace","updateDefaultFavoriteEmojis","all","Boolean","updateFavorites","dbFavorites","getTopFavoriteEmoji","favorites","calculateCurrentEmojisWithCategories","categoriesToEmoji","sort","once","Picker","super","DEFAULT_DATA_SOURCE","DEFAULT_LOCALE","enI18n","activities","objects","symbols","flags","PROPS","EXTRA_STYLES","PickerElement","HTMLElement","attachShadow","mode","shadowRoot","locale","dataSource","prop","prototype","hasOwnProperty","_dbFlush","_cmp","isConnected","close","catch","attrName","oldValue","newValue","_set","up","toUpperCase","parseFloat","$set","_dbCreate","definitions","defineProperties","customElements","define","$data","load","_component_a_row","gutter","_component_a_col","lg","xl","md","xs","treatments","_component_CardStyleWrapper","headless","border","image","srcset","$options","gotoUrl","link","_component_a_spin","SocialMediaOverview","defineAsyncComponent","FacebookOverview","YoutubeSubscribers","TwitterOverview","InstagramOverview","LinkedinKeyMetrics","SocialTrafficMetrics","Main","CardStyleWrapper","Splide","SplideSlide","flag","uId","medicines","rewind","perPage","gap","autoplay","pauseOnHover","arrows","open","getTreatmentsMeds","assertNonEmptyString","assertNumber","number","DB_VERSION_CURRENT","DB_VERSION_INITIAL","STORE_EMOJI","STORE_KEYVALUE","STORE_FAVORITES","FIELD_TOKENS","INDEX_TOKENS","FIELD_UNICODE","INDEX_COUNT","FIELD_GROUP","FIELD_ORDER","INDEX_GROUP_AND_ORDER","KEY_ETAG","KEY_URL","KEY_PREFERRED_SKINTONE","MODE_READONLY","MODE_READWRITE","INDEX_SKIN_UNICODE","FIELD_SKIN_UNICODE","uniqEmoji","initialMigration","db","createObjectStore","keyPath","indexes","store","indexName","multiEntry","createIndex","openIndexedDBRequests","databaseCache","onCloseListeners","handleOpenOrDeleteReq","reject","req","onerror","onblocked","onsuccess","result","createDatabase","dbName","indexedDB","onupgradeneeded","oldVersion","onclose","closeDatabase","openDatabase","dbPromise","storeName","readOnlyOrReadWrite","cb","txn","transaction","durability","objectStore","oncomplete","listeners","listener","deleteDatabase","addOnCloseListener","irregularEmoticons","extractTokens","split","word","toLowerCase","normalizeTokens","transformEmojiData","emojiData","annotation","emoticon","order","tags","tokens","flat","skinUnicodes","skinVersions","callStore","method","getIDB","getAllIDB","commit","minBy","array","minItem","findCommonMembers","arrays","uniqByFunc","shortestArray","results","some","isEmpty","hasData","eTag","oldETag","oldUrl","doFullDatabaseScanForSingleResult","predicate","BATCH_SIZE","emojiStore","lastKey","processNextBatch","getAll","IDBKeyRange","lowerBound","loadData","transformedData","metaStore","todo","checkFetched","onFetched","put","intermediateResults","checkDone","onDone","token","only","getEmojiByShortcode","shortcode","lowerShortcodes","getEmojiByUnicode","customEmojiIndex","limit","favoritesStore","openCursor","cursor","addResult","continue","primaryKey","byName","CODA_MARKER","trie","itemToTokens","currentMap","char","charAt","nextMap","valuesAtCoda","search","exact","queue","shift","entriesSortedByKey","requiredKeys$1","assertCustomEmojis","customEmojis","isArray","firstItemIsFaulty","sortByName","emojiToTokens","searchTrie","searchByExactMatch","searchByPrefix","shortcodeToEmoji","nameToEmoji","byShortcode","isFirefoxContentScript","wrappedJSObject","cleanEmoji","structuredClone","len","warnETag","warn","requiredKeys","assertEmojiData","assertStatus","floor","getETag","fetch","getETagAndData","json","arrayBufferToBinaryString","buffer","binary","bytes","Uint8Array","byteLength","fromCharCode","binaryStringToArrayBuffer","buf","ArrayBuffer","charCodeAt","jsonChecksum","object","inString","JSON","stringify","inBuffer","outBuffer","crypto","subtle","digest","outBinString","btoa","checkForUpdates","eTagAndData","loadDataForFirstTime","Database","_dbName","_db","_lazyUpdate","_custom","_clear","bind","_ready","_init","empty","checkReady","customs","natives","_shutdown","module","exports"],"mappings":"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","file":"js/privateSingle.6ba45a9b.js","sourcesContent":["\r\n\r\n","import { render } from \"./Emoji.vue?vue&type=template&id=4230f3f9\"\nimport script from \"./Emoji.vue?vue&type=script&lang=js\"\nexport * from \"./Emoji.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\HP\\\\Downloads\\\\better-doctor-customer-portal-main\\\\better-doctor-customer-portal-main\\\\client\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SingleGroupChat.vue?vue&type=style&index=1&id=3a78353c&lang=css\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SingleChat.vue?vue&type=style&index=0&id=150d90b6&scoped=true&lang=css\"","\r\n\r\n\r\n\r\n","import { render } from \"./SingleGroupChat.vue?vue&type=template&id=3a78353c&scoped=true\"\nimport script from \"./SingleGroupChat.vue?vue&type=script&lang=js\"\nexport * from \"./SingleGroupChat.vue?vue&type=script&lang=js\"\n\nimport \"./SingleGroupChat.vue?vue&type=style&index=0&id=3a78353c&scoped=true&lang=css\"\nimport \"./SingleGroupChat.vue?vue&type=style&index=1&id=3a78353c&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\HP\\\\Downloads\\\\better-doctor-customer-portal-main\\\\better-doctor-customer-portal-main\\\\client\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3a78353c\"]])\n\nexport default __exports__","\r\n\r\n\r\n","import { render } from \"./SingleChat.vue?vue&type=template&id=150d90b6&scoped=true\"\nimport script from \"./SingleChat.vue?vue&type=script&lang=js\"\nexport * from \"./SingleChat.vue?vue&type=script&lang=js\"\n\nimport \"./SingleChat.vue?vue&type=style&index=0&id=150d90b6&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\HP\\\\Downloads\\\\better-doctor-customer-portal-main\\\\better-doctor-customer-portal-main\\\\client\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-150d90b6\"]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AllTreatment.vue?vue&type=style&index=1&id=098a0f2d&lang=css\"","import Database from './database.js';\n\nfunction noop() { }\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.data === data)\n return;\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_style(node, key, value, important) {\n if (value == null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\n\nconst dirty_components = [];\nconst binding_callbacks = [];\nlet render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n // Do not reenter flush while dirty components are updated, as this can\n // result in an infinite loop. Instead, let the inner flush handle it.\n // Reentrancy is ok afterwards for bindings etc.\n if (flushidx !== 0) {\n return;\n }\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n try {\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n }\n catch (e) {\n // reset dirty state to not end up in a deadlocked state and then rethrow\n dirty_components.length = 0;\n flushidx = 0;\n throw e;\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n */\nfunction flush_render_callbacks(fns) {\n const filtered = [];\n const targets = [];\n render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));\n targets.forEach((c) => c());\n render_callbacks = filtered;\n}\nconst outroing = new Set();\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n const updates = [];\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n // defer updates until all the DOM shuffling is done\n updates.push(() => block.p(child_ctx, dirty));\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n run_all(updates);\n return new_blocks;\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n // if the component was destroyed immediately\n // it will update the `$$.on_destroy` reference to `null`.\n // the destructured on_destroy may still reference to the old array\n if (component.$$.on_destroy) {\n component.$$.on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n flush_render_callbacks($$.after_update);\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: [],\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map((parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n mount_component(component, options.target, undefined, undefined);\n flush();\n }\n set_current_component(parent_component);\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\n// via https://unpkg.com/browse/emojibase-data@6.0.0/meta/groups.json\nconst allGroups = [\n [-1, '✨', 'custom'],\n [0, '😀', 'smileys-emotion'],\n [1, '👋', 'people-body'],\n [3, '🐱', 'animals-nature'],\n [4, '🍎', 'food-drink'],\n [5, '🏠️', 'travel-places'],\n [6, '⚽', 'activities'],\n [7, '📝', 'objects'],\n [8, '⛔️', 'symbols'],\n [9, '🏁', 'flags']\n].map(([id, emoji, name]) => ({ id, emoji, name }));\n\nconst groups = allGroups.slice(1);\nconst customGroup = allGroups[0];\n\nconst MIN_SEARCH_TEXT_LENGTH = 2;\nconst NUM_SKIN_TONES = 6;\n\n/* istanbul ignore next */\nconst rIC = typeof requestIdleCallback === 'function' ? requestIdleCallback : setTimeout;\n\n// check for ZWJ (zero width joiner) character\nfunction hasZwj (emoji) {\n return emoji.unicode.includes('\\u200d')\n}\n\n// Find one good representative emoji from each version to test by checking its color.\n// Ideally it should have color in the center. For some inspiration, see:\n// https://about.gitlab.com/blog/2018/05/30/journey-in-native-unicode-emoji/\n//\n// Note that for certain versions (12.1, 13.1), there is no point in testing them explicitly, because\n// all the emoji from this version are compound-emoji from previous versions. So they would pass a color\n// test, even in browsers that display them as double emoji. (E.g. \"face in clouds\" might render as\n// \"face without mouth\" plus \"fog\".) These emoji can only be filtered using the width test,\n// which happens in checkZwjSupport.js.\nconst versionsAndTestEmoji = {\n '🫨': 15,\n '🫠': 14,\n '🥲': 13.1, // smiling face with tear, technically from v13 but see note above\n '🥻': 12.1, // sari, technically from v12 but see note above\n '🥰': 11,\n '🤩': 5,\n '👱‍♀️': 4,\n '🤣': 3,\n '👁️‍🗨️': 2,\n '😀': 1,\n '😐️': 0.7,\n '😃': 0.6\n};\n\nconst TIMEOUT_BEFORE_LOADING_MESSAGE = 1000; // 1 second\nconst DEFAULT_SKIN_TONE_EMOJI = '🖐️';\nconst DEFAULT_NUM_COLUMNS = 8;\n\n// Based on https://fivethirtyeight.com/features/the-100-most-used-emojis/ and\n// https://blog.emojipedia.org/facebook-reveals-most-and-least-used-emojis/ with\n// a bit of my own curation. (E.g. avoid the \"OK\" gesture because of connotations:\n// https://emojipedia.org/ok-hand/)\nconst MOST_COMMONLY_USED_EMOJI = [\n '😊',\n '😒',\n '♥️',\n '👍️',\n '😍',\n '😂',\n '😭',\n '☺️',\n '😔',\n '😩',\n '😏',\n '💕',\n '🙌',\n '😘'\n];\n\n// It's important to list Twemoji Mozilla before everything else, because Mozilla bundles their\n// own font on some platforms (notably Windows and Linux as of this writing). Typically, Mozilla\n// updates faster than the underlying OS, and we don't want to render older emoji in one font and\n// newer emoji in another font:\n// https://github.com/nolanlawson/emoji-picker-element/pull/268#issuecomment-1073347283\nconst FONT_FAMILY = '\"Twemoji Mozilla\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",' +\n '\"Noto Color Emoji\",\"EmojiOne Color\",\"Android Emoji\",sans-serif';\n\n/* istanbul ignore next */\nconst DEFAULT_CATEGORY_SORTING = (a, b) => a < b ? -1 : a > b ? 1 : 0;\n\n// Test if an emoji is supported by rendering it to canvas and checking that the color is not black\n// See https://about.gitlab.com/blog/2018/05/30/journey-in-native-unicode-emoji/\n// and https://www.npmjs.com/package/if-emoji for inspiration\n// This implementation is largely borrowed from if-emoji, adding the font-family\n\n\nconst getTextFeature = (text, color) => {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n\n const ctx = canvas.getContext('2d');\n ctx.textBaseline = 'top';\n ctx.font = `100px ${FONT_FAMILY}`;\n ctx.fillStyle = color;\n ctx.scale(0.01, 0.01);\n ctx.fillText(text, 0, 0);\n\n return ctx.getImageData(0, 0, 1, 1).data\n};\n\nconst compareFeatures = (feature1, feature2) => {\n const feature1Str = [...feature1].join(',');\n const feature2Str = [...feature2].join(',');\n // This is RGBA, so for 0,0,0, we are checking that the first RGB is not all zeroes.\n // Most of the time when unsupported this is 0,0,0,0, but on Chrome on Mac it is\n // 0,0,0,61 - there is a transparency here.\n return feature1Str === feature2Str && !feature1Str.startsWith('0,0,0,')\n};\n\nfunction testColorEmojiSupported (text) {\n // Render white and black and then compare them to each other and ensure they're the same\n // color, and neither one is black. This shows that the emoji was rendered in color.\n const feature1 = getTextFeature(text, '#000');\n const feature2 = getTextFeature(text, '#fff');\n return feature1 && feature2 && compareFeatures(feature1, feature2)\n}\n\n// rather than check every emoji ever, which would be expensive, just check some representatives from the\n// different emoji releases to determine what the font supports\n\nfunction determineEmojiSupportLevel () {\n const entries = Object.entries(versionsAndTestEmoji);\n try {\n // start with latest emoji and work backwards\n for (const [emoji, version] of entries) {\n if (testColorEmojiSupported(emoji)) {\n return version\n }\n }\n } catch (e) { // canvas error\n } finally {\n }\n // In case of an error, be generous and just assume all emoji are supported (e.g. for canvas errors\n // due to anti-fingerprinting add-ons). Better to show some gray boxes than nothing at all.\n return entries[0][1] // first one in the list is the most recent version\n}\n\n// Check which emojis we know for sure aren't supported, based on Unicode version level\nlet promise;\nconst detectEmojiSupportLevel = () => {\n if (!promise) {\n // Delay so it can run while the IDB database is being created by the browser (on another thread).\n // This helps especially with first load – we want to start pre-populating the database on the main thread,\n // and then wait for IDB to commit everything, and while waiting we run this check.\n promise = new Promise(resolve => (\n rIC(() => (\n resolve(determineEmojiSupportLevel()) // delay so ideally this can run while IDB is first populating\n ))\n ));\n }\n return promise\n};\n// determine which emojis containing ZWJ (zero width joiner) characters\n// are supported (rendered as one glyph) rather than unsupported (rendered as two or more glyphs)\nconst supportedZwjEmojis = new Map();\n\nconst VARIATION_SELECTOR = '\\ufe0f';\nconst SKINTONE_MODIFIER = '\\ud83c';\nconst ZWJ = '\\u200d';\nconst LIGHT_SKIN_TONE = 0x1F3FB;\nconst LIGHT_SKIN_TONE_MODIFIER = 0xdffb;\n\n// TODO: this is a naive implementation, we can improve it later\n// It's only used for the skintone picker, so as long as people don't customize with\n// really exotic emoji then it should work fine\nfunction applySkinTone (str, skinTone) {\n if (skinTone === 0) {\n return str\n }\n const zwjIndex = str.indexOf(ZWJ);\n if (zwjIndex !== -1) {\n return str.substring(0, zwjIndex) +\n String.fromCodePoint(LIGHT_SKIN_TONE + skinTone - 1) +\n str.substring(zwjIndex)\n }\n if (str.endsWith(VARIATION_SELECTOR)) {\n str = str.substring(0, str.length - 1);\n }\n return str + SKINTONE_MODIFIER + String.fromCodePoint(LIGHT_SKIN_TONE_MODIFIER + skinTone - 1)\n}\n\nfunction halt (event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\n// Implementation left/right or up/down navigation, circling back when you\n// reach the start/end of the list\nfunction incrementOrDecrement (decrement, val, arr) {\n val += (decrement ? -1 : 1);\n if (val < 0) {\n val = arr.length - 1;\n } else if (val >= arr.length) {\n val = 0;\n }\n return val\n}\n\n// like lodash's uniqBy but much smaller\nfunction uniqBy (arr, func) {\n const set = new Set();\n const res = [];\n for (const item of arr) {\n const key = func(item);\n if (!set.has(key)) {\n set.add(key);\n res.push(item);\n }\n }\n return res\n}\n\n// We don't need all the data on every emoji, and there are specific things we need\n// for the UI, so build a \"view model\" from the emoji object we got from the database\n\nfunction summarizeEmojisForUI (emojis, emojiSupportLevel) {\n const toSimpleSkinsMap = skins => {\n const res = {};\n for (const skin of skins) {\n // ignore arrays like [1, 2] with multiple skin tones\n // also ignore variants that are in an unsupported emoji version\n // (these do exist - variants from a different version than their base emoji)\n if (typeof skin.tone === 'number' && skin.version <= emojiSupportLevel) {\n res[skin.tone] = skin.unicode;\n }\n }\n return res\n };\n\n return emojis.map(({ unicode, skins, shortcodes, url, name, category }) => ({\n unicode,\n name,\n shortcodes,\n url,\n category,\n id: unicode || name,\n skins: skins && toSimpleSkinsMap(skins),\n title: (shortcodes || []).join(', ')\n }))\n}\n\n// import rAF from one place so that the bundle size is a bit smaller\nconst rAF = requestAnimationFrame;\n\n// Svelte action to calculate the width of an element and auto-update\n// using ResizeObserver. If ResizeObserver is unsupported, we just use rAF once\n// and don't bother to update.\n\n\nlet resizeObserverSupported = typeof ResizeObserver === 'function';\n\nfunction calculateWidth (node, onUpdate) {\n let resizeObserver;\n if (resizeObserverSupported) {\n resizeObserver = new ResizeObserver(entries => (\n onUpdate(entries[0].contentRect.width)\n ));\n resizeObserver.observe(node);\n } else { // just set the width once, don't bother trying to track it\n rAF(() => (\n onUpdate(node.getBoundingClientRect().width)\n ));\n }\n\n // cleanup function (called on destroy)\n return {\n destroy () {\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n }\n }\n}\n\n// get the width of the text inside of a DOM node, via https://stackoverflow.com/a/59525891/680742\nfunction calculateTextWidth (node) {\n /* istanbul ignore else */\n {\n const range = document.createRange();\n range.selectNode(node.firstChild);\n return range.getBoundingClientRect().width\n }\n}\n\nlet baselineEmojiWidth;\n\nfunction checkZwjSupport (zwjEmojisToCheck, baselineEmoji, emojiToDomNode) {\n for (const emoji of zwjEmojisToCheck) {\n const domNode = emojiToDomNode(emoji);\n const emojiWidth = calculateTextWidth(domNode);\n if (typeof baselineEmojiWidth === 'undefined') { // calculate the baseline emoji width only once\n baselineEmojiWidth = calculateTextWidth(baselineEmoji);\n }\n // On Windows, some supported emoji are ~50% bigger than the baseline emoji, but what we really want to guard\n // against are the ones that are 2x the size, because those are truly broken (person with red hair = person with\n // floating red wig, black cat = cat with black square, polar bear = bear with snowflake, etc.)\n // So here we set the threshold at 1.8 times the size of the baseline emoji.\n const supported = emojiWidth / 1.8 < baselineEmojiWidth;\n supportedZwjEmojis.set(emoji.unicode, supported);\n }\n}\n\n// Measure after style/layout are complete\n// See https://github.com/andrewiggins/afterframe\n\n\nconst requestPostAnimationFrame = callback => {\n rAF(() => {\n setTimeout(callback);\n });\n};\n\n// like lodash's uniq\n\nfunction uniq (arr) {\n return uniqBy(arr, _ => _)\n}\n\n// Note we put this in its own function outside Picker.js to avoid Svelte doing an invalidation on the \"setter\" here.\n// At best the invalidation is useless, at worst it can cause infinite loops:\n// https://github.com/nolanlawson/emoji-picker-element/pull/180\n// https://github.com/sveltejs/svelte/issues/6521\n// Also note tabpanelElement can be null if the element is disconnected immediately after connected\nfunction resetScrollTopIfPossible (element) {\n if (element) {\n element.scrollTop = 0;\n }\n}\n\n/* src/picker/components/Picker/Picker.svelte generated by Svelte v3.59.1 */\n\nconst { Map: Map_1 } = globals;\n\nfunction get_each_context(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[64] = list[i];\n\tchild_ctx[66] = i;\n\treturn child_ctx;\n}\n\nfunction get_each_context_1(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[67] = list[i];\n\tchild_ctx[66] = i;\n\treturn child_ctx;\n}\n\nfunction get_each_context_2(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[64] = list[i];\n\tchild_ctx[66] = i;\n\treturn child_ctx;\n}\n\nfunction get_each_context_3(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[70] = list[i];\n\treturn child_ctx;\n}\n\nfunction get_each_context_4(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[73] = list[i];\n\tchild_ctx[66] = i;\n\treturn child_ctx;\n}\n\n// (50:38) {#each skinTones as skinTone, i (skinTone)}\nfunction create_each_block_4(key_1, ctx) {\n\tlet div;\n\tlet t_value = /*skinTone*/ ctx[73] + \"\";\n\tlet t;\n\tlet div_id_value;\n\tlet div_class_value;\n\tlet div_aria_selected_value;\n\tlet div_title_value;\n\tlet div_aria_label_value;\n\n\treturn {\n\t\tkey: key_1,\n\t\tfirst: null,\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tt = text(t_value);\n\t\t\tattr(div, \"id\", div_id_value = \"skintone-\" + /*i*/ ctx[66]);\n\n\t\t\tattr(div, \"class\", div_class_value = \"emoji \" + (/*i*/ ctx[66] === /*activeSkinTone*/ ctx[20]\n\t\t\t? 'active'\n\t\t\t: ''));\n\n\t\t\tattr(div, \"aria-selected\", div_aria_selected_value = /*i*/ ctx[66] === /*activeSkinTone*/ ctx[20]);\n\t\t\tattr(div, \"role\", \"option\");\n\t\t\tattr(div, \"title\", div_title_value = /*i18n*/ ctx[0].skinTones[/*i*/ ctx[66]]);\n\t\t\tattr(div, \"aria-label\", div_aria_label_value = /*i18n*/ ctx[0].skinTones[/*i*/ ctx[66]]);\n\t\t\tthis.first = div;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, t);\n\t\t},\n\t\tp(new_ctx, dirty) {\n\t\t\tctx = new_ctx;\n\t\t\tif (dirty[0] & /*skinTones*/ 512 && t_value !== (t_value = /*skinTone*/ ctx[73] + \"\")) set_data(t, t_value);\n\n\t\t\tif (dirty[0] & /*skinTones*/ 512 && div_id_value !== (div_id_value = \"skintone-\" + /*i*/ ctx[66])) {\n\t\t\t\tattr(div, \"id\", div_id_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinTones, activeSkinTone*/ 1049088 && div_class_value !== (div_class_value = \"emoji \" + (/*i*/ ctx[66] === /*activeSkinTone*/ ctx[20]\n\t\t\t? 'active'\n\t\t\t: ''))) {\n\t\t\t\tattr(div, \"class\", div_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinTones, activeSkinTone*/ 1049088 && div_aria_selected_value !== (div_aria_selected_value = /*i*/ ctx[66] === /*activeSkinTone*/ ctx[20])) {\n\t\t\t\tattr(div, \"aria-selected\", div_aria_selected_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n, skinTones*/ 513 && div_title_value !== (div_title_value = /*i18n*/ ctx[0].skinTones[/*i*/ ctx[66]])) {\n\t\t\t\tattr(div, \"title\", div_title_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n, skinTones*/ 513 && div_aria_label_value !== (div_aria_label_value = /*i18n*/ ctx[0].skinTones[/*i*/ ctx[66]])) {\n\t\t\t\tattr(div, \"aria-label\", div_aria_label_value);\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t}\n\t};\n}\n\n// (59:33) {#each groups as group (group.id)}\nfunction create_each_block_3(key_1, ctx) {\n\tlet button;\n\tlet div;\n\tlet t_value = /*group*/ ctx[70].emoji + \"\";\n\tlet t;\n\tlet button_aria_controls_value;\n\tlet button_aria_label_value;\n\tlet button_aria_selected_value;\n\tlet button_title_value;\n\tlet mounted;\n\tlet dispose;\n\n\tfunction click_handler() {\n\t\treturn /*click_handler*/ ctx[50](/*group*/ ctx[70]);\n\t}\n\n\treturn {\n\t\tkey: key_1,\n\t\tfirst: null,\n\t\tc() {\n\t\t\tbutton = element(\"button\");\n\t\t\tdiv = element(\"div\");\n\t\t\tt = text(t_value);\n\t\t\tattr(div, \"class\", \"nav-emoji emoji\");\n\t\t\tattr(button, \"role\", \"tab\");\n\t\t\tattr(button, \"class\", \"nav-button\");\n\t\t\tattr(button, \"aria-controls\", button_aria_controls_value = \"tab-\" + /*group*/ ctx[70].id);\n\t\t\tattr(button, \"aria-label\", button_aria_label_value = /*i18n*/ ctx[0].categories[/*group*/ ctx[70].name]);\n\t\t\tattr(button, \"aria-selected\", button_aria_selected_value = !/*searchMode*/ ctx[4] && /*currentGroup*/ ctx[13].id === /*group*/ ctx[70].id);\n\t\t\tattr(button, \"title\", button_title_value = /*i18n*/ ctx[0].categories[/*group*/ ctx[70].name]);\n\t\t\tthis.first = button;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, button, anchor);\n\t\t\tappend(button, div);\n\t\t\tappend(div, t);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(button, \"click\", click_handler);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(new_ctx, dirty) {\n\t\t\tctx = new_ctx;\n\t\t\tif (dirty[0] & /*groups*/ 4096 && t_value !== (t_value = /*group*/ ctx[70].emoji + \"\")) set_data(t, t_value);\n\n\t\t\tif (dirty[0] & /*groups*/ 4096 && button_aria_controls_value !== (button_aria_controls_value = \"tab-\" + /*group*/ ctx[70].id)) {\n\t\t\t\tattr(button, \"aria-controls\", button_aria_controls_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n, groups*/ 4097 && button_aria_label_value !== (button_aria_label_value = /*i18n*/ ctx[0].categories[/*group*/ ctx[70].name])) {\n\t\t\t\tattr(button, \"aria-label\", button_aria_label_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode, currentGroup, groups*/ 12304 && button_aria_selected_value !== (button_aria_selected_value = !/*searchMode*/ ctx[4] && /*currentGroup*/ ctx[13].id === /*group*/ ctx[70].id)) {\n\t\t\t\tattr(button, \"aria-selected\", button_aria_selected_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n, groups*/ 4097 && button_title_value !== (button_title_value = /*i18n*/ ctx[0].categories[/*group*/ ctx[70].name])) {\n\t\t\t\tattr(button, \"title\", button_title_value);\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(button);\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\n// (100:100) {:else}\nfunction create_else_block_1(ctx) {\n\tlet img;\n\tlet img_src_value;\n\n\treturn {\n\t\tc() {\n\t\t\timg = element(\"img\");\n\t\t\tattr(img, \"class\", \"custom-emoji\");\n\t\t\tif (!src_url_equal(img.src, img_src_value = /*emoji*/ ctx[64].url)) attr(img, \"src\", img_src_value);\n\t\t\tattr(img, \"alt\", \"\");\n\t\t\tattr(img, \"loading\", \"lazy\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, img, anchor);\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty[0] & /*currentEmojisWithCategories*/ 32768 && !src_url_equal(img.src, img_src_value = /*emoji*/ ctx[64].url)) {\n\t\t\t\tattr(img, \"src\", img_src_value);\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(img);\n\t\t}\n\t};\n}\n\n// (100:40) {#if emoji.unicode}\nfunction create_if_block_1(ctx) {\n\tlet t_value = /*unicodeWithSkin*/ ctx[27](/*emoji*/ ctx[64], /*currentSkinTone*/ ctx[8]) + \"\";\n\tlet t;\n\n\treturn {\n\t\tc() {\n\t\t\tt = text(t_value);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, t, anchor);\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty[0] & /*currentEmojisWithCategories, currentSkinTone*/ 33024 && t_value !== (t_value = /*unicodeWithSkin*/ ctx[27](/*emoji*/ ctx[64], /*currentSkinTone*/ ctx[8]) + \"\")) set_data(t, t_value);\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(t);\n\t\t}\n\t};\n}\n\n// (95:53) {#each emojiWithCategory.emojis as emoji, i (emoji.id)}\nfunction create_each_block_2(key_1, ctx) {\n\tlet button;\n\tlet button_role_value;\n\tlet button_aria_selected_value;\n\tlet button_aria_label_value;\n\tlet button_title_value;\n\tlet button_class_value;\n\tlet button_id_value;\n\n\tfunction select_block_type(ctx, dirty) {\n\t\tif (/*emoji*/ ctx[64].unicode) return create_if_block_1;\n\t\treturn create_else_block_1;\n\t}\n\n\tlet current_block_type = select_block_type(ctx);\n\tlet if_block = current_block_type(ctx);\n\n\treturn {\n\t\tkey: key_1,\n\t\tfirst: null,\n\t\tc() {\n\t\t\tbutton = element(\"button\");\n\t\t\tif_block.c();\n\t\t\tattr(button, \"role\", button_role_value = /*searchMode*/ ctx[4] ? 'option' : 'menuitem');\n\n\t\t\tattr(button, \"aria-selected\", button_aria_selected_value = /*searchMode*/ ctx[4]\n\t\t\t? /*i*/ ctx[66] == /*activeSearchItem*/ ctx[5]\n\t\t\t: '');\n\n\t\t\tattr(button, \"aria-label\", button_aria_label_value = /*labelWithSkin*/ ctx[28](/*emoji*/ ctx[64], /*currentSkinTone*/ ctx[8]));\n\t\t\tattr(button, \"title\", button_title_value = /*emoji*/ ctx[64].title);\n\n\t\t\tattr(button, \"class\", button_class_value = \"emoji \" + (/*searchMode*/ ctx[4] && /*i*/ ctx[66] === /*activeSearchItem*/ ctx[5]\n\t\t\t? 'active'\n\t\t\t: ''));\n\n\t\t\tattr(button, \"id\", button_id_value = \"emo-\" + /*emoji*/ ctx[64].id);\n\t\t\tthis.first = button;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, button, anchor);\n\t\t\tif_block.m(button, null);\n\t\t},\n\t\tp(new_ctx, dirty) {\n\t\t\tctx = new_ctx;\n\n\t\t\tif (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) {\n\t\t\t\tif_block.p(ctx, dirty);\n\t\t\t} else {\n\t\t\t\tif_block.d(1);\n\t\t\t\tif_block = current_block_type(ctx);\n\n\t\t\t\tif (if_block) {\n\t\t\t\t\tif_block.c();\n\t\t\t\t\tif_block.m(button, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode*/ 16 && button_role_value !== (button_role_value = /*searchMode*/ ctx[4] ? 'option' : 'menuitem')) {\n\t\t\t\tattr(button, \"role\", button_role_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode, currentEmojisWithCategories, activeSearchItem*/ 32816 && button_aria_selected_value !== (button_aria_selected_value = /*searchMode*/ ctx[4]\n\t\t\t? /*i*/ ctx[66] == /*activeSearchItem*/ ctx[5]\n\t\t\t: '')) {\n\t\t\t\tattr(button, \"aria-selected\", button_aria_selected_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*currentEmojisWithCategories, currentSkinTone*/ 33024 && button_aria_label_value !== (button_aria_label_value = /*labelWithSkin*/ ctx[28](/*emoji*/ ctx[64], /*currentSkinTone*/ ctx[8]))) {\n\t\t\t\tattr(button, \"aria-label\", button_aria_label_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*currentEmojisWithCategories*/ 32768 && button_title_value !== (button_title_value = /*emoji*/ ctx[64].title)) {\n\t\t\t\tattr(button, \"title\", button_title_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode, currentEmojisWithCategories, activeSearchItem*/ 32816 && button_class_value !== (button_class_value = \"emoji \" + (/*searchMode*/ ctx[4] && /*i*/ ctx[66] === /*activeSearchItem*/ ctx[5]\n\t\t\t? 'active'\n\t\t\t: ''))) {\n\t\t\t\tattr(button, \"class\", button_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*currentEmojisWithCategories*/ 32768 && button_id_value !== (button_id_value = \"emo-\" + /*emoji*/ ctx[64].id)) {\n\t\t\t\tattr(button, \"id\", button_id_value);\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(button);\n\t\t\tif_block.d();\n\t\t}\n\t};\n}\n\n// (76:36) {#each currentEmojisWithCategories as emojiWithCategory, i (emojiWithCategory.category)}\nfunction create_each_block_1(key_1, ctx) {\n\tlet div0;\n\n\tlet t_value = (/*searchMode*/ ctx[4]\n\t? /*i18n*/ ctx[0].searchResultsLabel\n\t: /*emojiWithCategory*/ ctx[67].category\n\t\t? /*emojiWithCategory*/ ctx[67].category\n\t\t: /*currentEmojisWithCategories*/ ctx[15].length > 1\n\t\t\t? /*i18n*/ ctx[0].categories.custom\n\t\t\t: /*i18n*/ ctx[0].categories[/*currentGroup*/ ctx[13].name]) + \"\";\n\n\tlet t;\n\tlet div0_id_value;\n\tlet div0_class_value;\n\tlet div1;\n\tlet each_blocks = [];\n\tlet each_1_lookup = new Map_1();\n\tlet div1_role_value;\n\tlet div1_aria_labelledby_value;\n\tlet div1_id_value;\n\tlet each_value_2 = /*emojiWithCategory*/ ctx[67].emojis;\n\tconst get_key = ctx => /*emoji*/ ctx[64].id;\n\n\tfor (let i = 0; i < each_value_2.length; i += 1) {\n\t\tlet child_ctx = get_each_context_2(ctx, each_value_2, i);\n\t\tlet key = get_key(child_ctx);\n\t\teach_1_lookup.set(key, each_blocks[i] = create_each_block_2(key, child_ctx));\n\t}\n\n\treturn {\n\t\tkey: key_1,\n\t\tfirst: null,\n\t\tc() {\n\t\t\tdiv0 = element(\"div\");\n\t\t\tt = text(t_value);\n\t\t\tdiv1 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\tattr(div0, \"id\", div0_id_value = \"menu-label-\" + /*i*/ ctx[66]);\n\n\t\t\tattr(div0, \"class\", div0_class_value = \"category \" + (/*currentEmojisWithCategories*/ ctx[15].length === 1 && /*currentEmojisWithCategories*/ ctx[15][0].category === ''\n\t\t\t? 'gone'\n\t\t\t: ''));\n\n\t\t\tattr(div0, \"aria-hidden\", \"true\");\n\t\t\tattr(div1, \"class\", \"emoji-menu\");\n\t\t\tattr(div1, \"role\", div1_role_value = /*searchMode*/ ctx[4] ? 'listbox' : 'menu');\n\t\t\tattr(div1, \"aria-labelledby\", div1_aria_labelledby_value = \"menu-label-\" + /*i*/ ctx[66]);\n\t\t\tattr(div1, \"id\", div1_id_value = /*searchMode*/ ctx[4] ? 'search-results' : '');\n\t\t\tthis.first = div0;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div0, anchor);\n\t\t\tappend(div0, t);\n\t\t\tinsert(target, div1, anchor);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(div1, null);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tp(new_ctx, dirty) {\n\t\t\tctx = new_ctx;\n\n\t\t\tif (dirty[0] & /*searchMode, i18n, currentEmojisWithCategories, currentGroup*/ 40977 && t_value !== (t_value = (/*searchMode*/ ctx[4]\n\t\t\t? /*i18n*/ ctx[0].searchResultsLabel\n\t\t\t: /*emojiWithCategory*/ ctx[67].category\n\t\t\t\t? /*emojiWithCategory*/ ctx[67].category\n\t\t\t\t: /*currentEmojisWithCategories*/ ctx[15].length > 1\n\t\t\t\t\t? /*i18n*/ ctx[0].categories.custom\n\t\t\t\t\t: /*i18n*/ ctx[0].categories[/*currentGroup*/ ctx[13].name]) + \"\")) set_data(t, t_value);\n\n\t\t\tif (dirty[0] & /*currentEmojisWithCategories*/ 32768 && div0_id_value !== (div0_id_value = \"menu-label-\" + /*i*/ ctx[66])) {\n\t\t\t\tattr(div0, \"id\", div0_id_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*currentEmojisWithCategories*/ 32768 && div0_class_value !== (div0_class_value = \"category \" + (/*currentEmojisWithCategories*/ ctx[15].length === 1 && /*currentEmojisWithCategories*/ ctx[15][0].category === ''\n\t\t\t? 'gone'\n\t\t\t: ''))) {\n\t\t\t\tattr(div0, \"class\", div0_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode, currentEmojisWithCategories, activeSearchItem, labelWithSkin, currentSkinTone, unicodeWithSkin*/ 402686256) {\n\t\t\t\teach_value_2 = /*emojiWithCategory*/ ctx[67].emojis;\n\t\t\t\teach_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value_2, each_1_lookup, div1, destroy_block, create_each_block_2, null, get_each_context_2);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode*/ 16 && div1_role_value !== (div1_role_value = /*searchMode*/ ctx[4] ? 'listbox' : 'menu')) {\n\t\t\t\tattr(div1, \"role\", div1_role_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*currentEmojisWithCategories*/ 32768 && div1_aria_labelledby_value !== (div1_aria_labelledby_value = \"menu-label-\" + /*i*/ ctx[66])) {\n\t\t\t\tattr(div1, \"aria-labelledby\", div1_aria_labelledby_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode*/ 16 && div1_id_value !== (div1_id_value = /*searchMode*/ ctx[4] ? 'search-results' : '')) {\n\t\t\t\tattr(div1, \"id\", div1_id_value);\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div0);\n\t\t\tif (detaching) detach(div1);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].d();\n\t\t\t}\n\t\t}\n\t};\n}\n\n// (109:94) {:else}\nfunction create_else_block(ctx) {\n\tlet img;\n\tlet img_src_value;\n\n\treturn {\n\t\tc() {\n\t\t\timg = element(\"img\");\n\t\t\tattr(img, \"class\", \"custom-emoji\");\n\t\t\tif (!src_url_equal(img.src, img_src_value = /*emoji*/ ctx[64].url)) attr(img, \"src\", img_src_value);\n\t\t\tattr(img, \"alt\", \"\");\n\t\t\tattr(img, \"loading\", \"lazy\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, img, anchor);\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty[0] & /*currentFavorites*/ 1024 && !src_url_equal(img.src, img_src_value = /*emoji*/ ctx[64].url)) {\n\t\t\t\tattr(img, \"src\", img_src_value);\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(img);\n\t\t}\n\t};\n}\n\n// (109:34) {#if emoji.unicode}\nfunction create_if_block(ctx) {\n\tlet t_value = /*unicodeWithSkin*/ ctx[27](/*emoji*/ ctx[64], /*currentSkinTone*/ ctx[8]) + \"\";\n\tlet t;\n\n\treturn {\n\t\tc() {\n\t\t\tt = text(t_value);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, t, anchor);\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty[0] & /*currentFavorites, currentSkinTone*/ 1280 && t_value !== (t_value = /*unicodeWithSkin*/ ctx[27](/*emoji*/ ctx[64], /*currentSkinTone*/ ctx[8]) + \"\")) set_data(t, t_value);\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(t);\n\t\t}\n\t};\n}\n\n// (105:102) {#each currentFavorites as emoji, i (emoji.id)}\nfunction create_each_block(key_1, ctx) {\n\tlet button;\n\tlet button_aria_label_value;\n\tlet button_title_value;\n\tlet button_id_value;\n\n\tfunction select_block_type_1(ctx, dirty) {\n\t\tif (/*emoji*/ ctx[64].unicode) return create_if_block;\n\t\treturn create_else_block;\n\t}\n\n\tlet current_block_type = select_block_type_1(ctx);\n\tlet if_block = current_block_type(ctx);\n\n\treturn {\n\t\tkey: key_1,\n\t\tfirst: null,\n\t\tc() {\n\t\t\tbutton = element(\"button\");\n\t\t\tif_block.c();\n\t\t\tattr(button, \"role\", \"menuitem\");\n\t\t\tattr(button, \"aria-label\", button_aria_label_value = /*labelWithSkin*/ ctx[28](/*emoji*/ ctx[64], /*currentSkinTone*/ ctx[8]));\n\t\t\tattr(button, \"title\", button_title_value = /*emoji*/ ctx[64].title);\n\t\t\tattr(button, \"class\", \"emoji\");\n\t\t\tattr(button, \"id\", button_id_value = \"fav-\" + /*emoji*/ ctx[64].id);\n\t\t\tthis.first = button;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, button, anchor);\n\t\t\tif_block.m(button, null);\n\t\t},\n\t\tp(new_ctx, dirty) {\n\t\t\tctx = new_ctx;\n\n\t\t\tif (current_block_type === (current_block_type = select_block_type_1(ctx)) && if_block) {\n\t\t\t\tif_block.p(ctx, dirty);\n\t\t\t} else {\n\t\t\t\tif_block.d(1);\n\t\t\t\tif_block = current_block_type(ctx);\n\n\t\t\t\tif (if_block) {\n\t\t\t\t\tif_block.c();\n\t\t\t\t\tif_block.m(button, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*currentFavorites, currentSkinTone*/ 1280 && button_aria_label_value !== (button_aria_label_value = /*labelWithSkin*/ ctx[28](/*emoji*/ ctx[64], /*currentSkinTone*/ ctx[8]))) {\n\t\t\t\tattr(button, \"aria-label\", button_aria_label_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*currentFavorites*/ 1024 && button_title_value !== (button_title_value = /*emoji*/ ctx[64].title)) {\n\t\t\t\tattr(button, \"title\", button_title_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*currentFavorites*/ 1024 && button_id_value !== (button_id_value = \"fav-\" + /*emoji*/ ctx[64].id)) {\n\t\t\t\tattr(button, \"id\", button_id_value);\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(button);\n\t\t\tif_block.d();\n\t\t}\n\t};\n}\n\nfunction create_fragment(ctx) {\n\tlet section;\n\tlet div0;\n\tlet div4;\n\tlet div1;\n\tlet input;\n\tlet input_placeholder_value;\n\tlet input_aria_expanded_value;\n\tlet input_aria_activedescendant_value;\n\tlet label;\n\tlet t0_value = /*i18n*/ ctx[0].searchLabel + \"\";\n\tlet t0;\n\tlet span0;\n\tlet t1_value = /*i18n*/ ctx[0].searchDescription + \"\";\n\tlet t1;\n\tlet div2;\n\tlet button0;\n\tlet t2;\n\tlet button0_class_value;\n\tlet div2_class_value;\n\tlet span1;\n\tlet t3_value = /*i18n*/ ctx[0].skinToneDescription + \"\";\n\tlet t3;\n\tlet div3;\n\tlet each_blocks_3 = [];\n\tlet each0_lookup = new Map_1();\n\tlet div3_class_value;\n\tlet div3_aria_label_value;\n\tlet div3_aria_activedescendant_value;\n\tlet div3_aria_hidden_value;\n\tlet div5;\n\tlet each_blocks_2 = [];\n\tlet each1_lookup = new Map_1();\n\tlet div5_aria_label_value;\n\tlet div7;\n\tlet div6;\n\tlet div8;\n\tlet t4;\n\tlet div8_class_value;\n\tlet div10;\n\tlet div9;\n\tlet each_blocks_1 = [];\n\tlet each2_lookup = new Map_1();\n\tlet div10_class_value;\n\tlet div10_role_value;\n\tlet div10_aria_label_value;\n\tlet div10_id_value;\n\tlet div11;\n\tlet each_blocks = [];\n\tlet each3_lookup = new Map_1();\n\tlet div11_class_value;\n\tlet div11_aria_label_value;\n\tlet button1;\n\tlet section_aria_label_value;\n\tlet mounted;\n\tlet dispose;\n\tlet each_value_4 = /*skinTones*/ ctx[9];\n\tconst get_key = ctx => /*skinTone*/ ctx[73];\n\n\tfor (let i = 0; i < each_value_4.length; i += 1) {\n\t\tlet child_ctx = get_each_context_4(ctx, each_value_4, i);\n\t\tlet key = get_key(child_ctx);\n\t\teach0_lookup.set(key, each_blocks_3[i] = create_each_block_4(key, child_ctx));\n\t}\n\n\tlet each_value_3 = /*groups*/ ctx[12];\n\tconst get_key_1 = ctx => /*group*/ ctx[70].id;\n\n\tfor (let i = 0; i < each_value_3.length; i += 1) {\n\t\tlet child_ctx = get_each_context_3(ctx, each_value_3, i);\n\t\tlet key = get_key_1(child_ctx);\n\t\teach1_lookup.set(key, each_blocks_2[i] = create_each_block_3(key, child_ctx));\n\t}\n\n\tlet each_value_1 = /*currentEmojisWithCategories*/ ctx[15];\n\tconst get_key_2 = ctx => /*emojiWithCategory*/ ctx[67].category;\n\n\tfor (let i = 0; i < each_value_1.length; i += 1) {\n\t\tlet child_ctx = get_each_context_1(ctx, each_value_1, i);\n\t\tlet key = get_key_2(child_ctx);\n\t\teach2_lookup.set(key, each_blocks_1[i] = create_each_block_1(key, child_ctx));\n\t}\n\n\tlet each_value = /*currentFavorites*/ ctx[10];\n\tconst get_key_3 = ctx => /*emoji*/ ctx[64].id;\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\tlet child_ctx = get_each_context(ctx, each_value, i);\n\t\tlet key = get_key_3(child_ctx);\n\t\teach3_lookup.set(key, each_blocks[i] = create_each_block(key, child_ctx));\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tsection = element(\"section\");\n\t\t\tdiv0 = element(\"div\");\n\t\t\tdiv4 = element(\"div\");\n\t\t\tdiv1 = element(\"div\");\n\t\t\tinput = element(\"input\");\n\t\t\tlabel = element(\"label\");\n\t\t\tt0 = text(t0_value);\n\t\t\tspan0 = element(\"span\");\n\t\t\tt1 = text(t1_value);\n\t\t\tdiv2 = element(\"div\");\n\t\t\tbutton0 = element(\"button\");\n\t\t\tt2 = text(/*skinToneButtonText*/ ctx[21]);\n\t\t\tspan1 = element(\"span\");\n\t\t\tt3 = text(t3_value);\n\t\t\tdiv3 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks_3.length; i += 1) {\n\t\t\t\teach_blocks_3[i].c();\n\t\t\t}\n\n\t\t\tdiv5 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks_2.length; i += 1) {\n\t\t\t\teach_blocks_2[i].c();\n\t\t\t}\n\n\t\t\tdiv7 = element(\"div\");\n\t\t\tdiv6 = element(\"div\");\n\t\t\tdiv8 = element(\"div\");\n\t\t\tt4 = text(/*message*/ ctx[18]);\n\t\t\tdiv10 = element(\"div\");\n\t\t\tdiv9 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks_1.length; i += 1) {\n\t\t\t\teach_blocks_1[i].c();\n\t\t\t}\n\n\t\t\tdiv11 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\tbutton1 = element(\"button\");\n\t\t\tbutton1.textContent = \"😀\";\n\t\t\tattr(div0, \"class\", \"pad-top\");\n\t\t\tattr(input, \"id\", \"search\");\n\t\t\tattr(input, \"class\", \"search\");\n\t\t\tattr(input, \"type\", \"search\");\n\t\t\tattr(input, \"role\", \"combobox\");\n\t\t\tattr(input, \"enterkeyhint\", \"search\");\n\t\t\tattr(input, \"placeholder\", input_placeholder_value = /*i18n*/ ctx[0].searchLabel);\n\t\t\tattr(input, \"autocapitalize\", \"none\");\n\t\t\tattr(input, \"autocomplete\", \"off\");\n\t\t\tattr(input, \"spellcheck\", \"true\");\n\t\t\tattr(input, \"aria-expanded\", input_aria_expanded_value = !!(/*searchMode*/ ctx[4] && /*currentEmojis*/ ctx[1].length));\n\t\t\tattr(input, \"aria-controls\", \"search-results\");\n\t\t\tattr(input, \"aria-describedby\", \"search-description\");\n\t\t\tattr(input, \"aria-autocomplete\", \"list\");\n\n\t\t\tattr(input, \"aria-activedescendant\", input_aria_activedescendant_value = /*activeSearchItemId*/ ctx[26]\n\t\t\t? `emo-${/*activeSearchItemId*/ ctx[26]}`\n\t\t\t: '');\n\n\t\t\tattr(label, \"class\", \"sr-only\");\n\t\t\tattr(label, \"for\", \"search\");\n\t\t\tattr(span0, \"id\", \"search-description\");\n\t\t\tattr(span0, \"class\", \"sr-only\");\n\t\t\tattr(div1, \"class\", \"search-wrapper\");\n\t\t\tattr(button0, \"id\", \"skintone-button\");\n\t\t\tattr(button0, \"class\", button0_class_value = \"emoji \" + (/*skinTonePickerExpanded*/ ctx[6] ? 'hide-focus' : ''));\n\t\t\tattr(button0, \"aria-label\", /*skinToneButtonLabel*/ ctx[23]);\n\t\t\tattr(button0, \"title\", /*skinToneButtonLabel*/ ctx[23]);\n\t\t\tattr(button0, \"aria-describedby\", \"skintone-description\");\n\t\t\tattr(button0, \"aria-haspopup\", \"listbox\");\n\t\t\tattr(button0, \"aria-expanded\", /*skinTonePickerExpanded*/ ctx[6]);\n\t\t\tattr(button0, \"aria-controls\", \"skintone-list\");\n\n\t\t\tattr(div2, \"class\", div2_class_value = \"skintone-button-wrapper \" + (/*skinTonePickerExpandedAfterAnimation*/ ctx[19]\n\t\t\t? 'expanded'\n\t\t\t: ''));\n\n\t\t\tattr(span1, \"id\", \"skintone-description\");\n\t\t\tattr(span1, \"class\", \"sr-only\");\n\t\t\tattr(div3, \"id\", \"skintone-list\");\n\n\t\t\tattr(div3, \"class\", div3_class_value = \"skintone-list hide-focus \" + (/*skinTonePickerExpanded*/ ctx[6]\n\t\t\t? ''\n\t\t\t: 'hidden no-animate'));\n\n\t\t\tset_style(div3, \"transform\", \"translateY(\" + (/*skinTonePickerExpanded*/ ctx[6]\n\t\t\t? 0\n\t\t\t: 'calc(-1 * var(--num-skintones) * var(--total-emoji-size))') + \")\");\n\n\t\t\tattr(div3, \"role\", \"listbox\");\n\t\t\tattr(div3, \"aria-label\", div3_aria_label_value = /*i18n*/ ctx[0].skinTonesLabel);\n\t\t\tattr(div3, \"aria-activedescendant\", div3_aria_activedescendant_value = \"skintone-\" + /*activeSkinTone*/ ctx[20]);\n\t\t\tattr(div3, \"aria-hidden\", div3_aria_hidden_value = !/*skinTonePickerExpanded*/ ctx[6]);\n\t\t\tattr(div3, \"tabindex\", \"-1\");\n\t\t\tattr(div4, \"class\", \"search-row\");\n\t\t\tattr(div5, \"class\", \"nav\");\n\t\t\tattr(div5, \"role\", \"tablist\");\n\t\t\tset_style(div5, \"grid-template-columns\", \"repeat(\" + /*groups*/ ctx[12].length + \", 1fr)\");\n\t\t\tattr(div5, \"aria-label\", div5_aria_label_value = /*i18n*/ ctx[0].categoriesLabel);\n\t\t\tattr(div6, \"class\", \"indicator\");\n\t\t\tset_style(div6, \"transform\", \"translateX(\" + (/*isRtl*/ ctx[24] ? -1 : 1) * /*currentGroupIndex*/ ctx[11] * 100 + \"%)\");\n\t\t\tattr(div7, \"class\", \"indicator-wrapper\");\n\t\t\tattr(div8, \"class\", div8_class_value = \"message \" + (/*message*/ ctx[18] ? '' : 'gone'));\n\t\t\tattr(div8, \"role\", \"alert\");\n\t\t\tattr(div8, \"aria-live\", \"polite\");\n\n\t\t\tattr(div10, \"class\", div10_class_value = \"tabpanel \" + (!/*databaseLoaded*/ ctx[14] || /*message*/ ctx[18]\n\t\t\t? 'gone'\n\t\t\t: ''));\n\n\t\t\tattr(div10, \"role\", div10_role_value = /*searchMode*/ ctx[4] ? 'region' : 'tabpanel');\n\n\t\t\tattr(div10, \"aria-label\", div10_aria_label_value = /*searchMode*/ ctx[4]\n\t\t\t? /*i18n*/ ctx[0].searchResultsLabel\n\t\t\t: /*i18n*/ ctx[0].categories[/*currentGroup*/ ctx[13].name]);\n\n\t\t\tattr(div10, \"id\", div10_id_value = /*searchMode*/ ctx[4]\n\t\t\t? ''\n\t\t\t: `tab-${/*currentGroup*/ ctx[13].id}`);\n\n\t\t\tattr(div10, \"tabindex\", \"0\");\n\t\t\tattr(div11, \"class\", div11_class_value = \"favorites emoji-menu \" + (/*message*/ ctx[18] ? 'gone' : ''));\n\t\t\tattr(div11, \"role\", \"menu\");\n\t\t\tattr(div11, \"aria-label\", div11_aria_label_value = /*i18n*/ ctx[0].favoritesLabel);\n\t\t\tset_style(div11, \"padding-inline-end\", /*scrollbarWidth*/ ctx[25] + \"px\");\n\t\t\tattr(button1, \"aria-hidden\", \"true\");\n\t\t\tattr(button1, \"tabindex\", \"-1\");\n\t\t\tattr(button1, \"class\", \"abs-pos hidden emoji\");\n\t\t\tattr(section, \"class\", \"picker\");\n\t\t\tattr(section, \"aria-label\", section_aria_label_value = /*i18n*/ ctx[0].regionLabel);\n\t\t\tattr(section, \"style\", /*pickerStyle*/ ctx[22]);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, section, anchor);\n\t\t\tappend(section, div0);\n\t\t\tappend(section, div4);\n\t\t\tappend(div4, div1);\n\t\t\tappend(div1, input);\n\t\t\tset_input_value(input, /*rawSearchText*/ ctx[2]);\n\t\t\tappend(div1, label);\n\t\t\tappend(label, t0);\n\t\t\tappend(div1, span0);\n\t\t\tappend(span0, t1);\n\t\t\tappend(div4, div2);\n\t\t\tappend(div2, button0);\n\t\t\tappend(button0, t2);\n\t\t\tappend(div4, span1);\n\t\t\tappend(span1, t3);\n\t\t\tappend(div4, div3);\n\n\t\t\tfor (let i = 0; i < each_blocks_3.length; i += 1) {\n\t\t\t\tif (each_blocks_3[i]) {\n\t\t\t\t\teach_blocks_3[i].m(div3, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*div3_binding*/ ctx[49](div3);\n\t\t\tappend(section, div5);\n\n\t\t\tfor (let i = 0; i < each_blocks_2.length; i += 1) {\n\t\t\t\tif (each_blocks_2[i]) {\n\t\t\t\t\teach_blocks_2[i].m(div5, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tappend(section, div7);\n\t\t\tappend(div7, div6);\n\t\t\tappend(section, div8);\n\t\t\tappend(div8, t4);\n\t\t\tappend(section, div10);\n\t\t\tappend(div10, div9);\n\n\t\t\tfor (let i = 0; i < each_blocks_1.length; i += 1) {\n\t\t\t\tif (each_blocks_1[i]) {\n\t\t\t\t\teach_blocks_1[i].m(div9, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*div10_binding*/ ctx[51](div10);\n\t\t\tappend(section, div11);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(div11, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tappend(section, button1);\n\t\t\t/*button1_binding*/ ctx[52](button1);\n\t\t\t/*section_binding*/ ctx[53](section);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = [\n\t\t\t\t\tlisten(input, \"input\", /*input_input_handler*/ ctx[48]),\n\t\t\t\t\tlisten(input, \"keydown\", /*onSearchKeydown*/ ctx[30]),\n\t\t\t\t\tlisten(button0, \"click\", /*onClickSkinToneButton*/ ctx[35]),\n\t\t\t\t\tlisten(div3, \"focusout\", /*onSkinToneOptionsFocusOut*/ ctx[38]),\n\t\t\t\t\tlisten(div3, \"click\", /*onSkinToneOptionsClick*/ ctx[34]),\n\t\t\t\t\tlisten(div3, \"keydown\", /*onSkinToneOptionsKeydown*/ ctx[36]),\n\t\t\t\t\tlisten(div3, \"keyup\", /*onSkinToneOptionsKeyup*/ ctx[37]),\n\t\t\t\t\tlisten(div5, \"keydown\", /*onNavKeydown*/ ctx[32]),\n\t\t\t\t\taction_destroyer(/*calculateEmojiGridStyle*/ ctx[29].call(null, div9)),\n\t\t\t\t\tlisten(div10, \"click\", /*onEmojiClick*/ ctx[33]),\n\t\t\t\t\tlisten(div11, \"click\", /*onEmojiClick*/ ctx[33])\n\t\t\t\t];\n\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty[0] & /*i18n*/ 1 && input_placeholder_value !== (input_placeholder_value = /*i18n*/ ctx[0].searchLabel)) {\n\t\t\t\tattr(input, \"placeholder\", input_placeholder_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode, currentEmojis*/ 18 && input_aria_expanded_value !== (input_aria_expanded_value = !!(/*searchMode*/ ctx[4] && /*currentEmojis*/ ctx[1].length))) {\n\t\t\t\tattr(input, \"aria-expanded\", input_aria_expanded_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*activeSearchItemId*/ 67108864 && input_aria_activedescendant_value !== (input_aria_activedescendant_value = /*activeSearchItemId*/ ctx[26]\n\t\t\t? `emo-${/*activeSearchItemId*/ ctx[26]}`\n\t\t\t: '')) {\n\t\t\t\tattr(input, \"aria-activedescendant\", input_aria_activedescendant_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*rawSearchText*/ 4 && input.value !== /*rawSearchText*/ ctx[2]) {\n\t\t\t\tset_input_value(input, /*rawSearchText*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n*/ 1 && t0_value !== (t0_value = /*i18n*/ ctx[0].searchLabel + \"\")) set_data(t0, t0_value);\n\t\t\tif (dirty[0] & /*i18n*/ 1 && t1_value !== (t1_value = /*i18n*/ ctx[0].searchDescription + \"\")) set_data(t1, t1_value);\n\t\t\tif (dirty[0] & /*skinToneButtonText*/ 2097152) set_data(t2, /*skinToneButtonText*/ ctx[21]);\n\n\t\t\tif (dirty[0] & /*skinTonePickerExpanded*/ 64 && button0_class_value !== (button0_class_value = \"emoji \" + (/*skinTonePickerExpanded*/ ctx[6] ? 'hide-focus' : ''))) {\n\t\t\t\tattr(button0, \"class\", button0_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinToneButtonLabel*/ 8388608) {\n\t\t\t\tattr(button0, \"aria-label\", /*skinToneButtonLabel*/ ctx[23]);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinToneButtonLabel*/ 8388608) {\n\t\t\t\tattr(button0, \"title\", /*skinToneButtonLabel*/ ctx[23]);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinTonePickerExpanded*/ 64) {\n\t\t\t\tattr(button0, \"aria-expanded\", /*skinTonePickerExpanded*/ ctx[6]);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinTonePickerExpandedAfterAnimation*/ 524288 && div2_class_value !== (div2_class_value = \"skintone-button-wrapper \" + (/*skinTonePickerExpandedAfterAnimation*/ ctx[19]\n\t\t\t? 'expanded'\n\t\t\t: ''))) {\n\t\t\t\tattr(div2, \"class\", div2_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n*/ 1 && t3_value !== (t3_value = /*i18n*/ ctx[0].skinToneDescription + \"\")) set_data(t3, t3_value);\n\n\t\t\tif (dirty[0] & /*skinTones, activeSkinTone, i18n*/ 1049089) {\n\t\t\t\teach_value_4 = /*skinTones*/ ctx[9];\n\t\t\t\teach_blocks_3 = update_keyed_each(each_blocks_3, dirty, get_key, 1, ctx, each_value_4, each0_lookup, div3, destroy_block, create_each_block_4, null, get_each_context_4);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinTonePickerExpanded*/ 64 && div3_class_value !== (div3_class_value = \"skintone-list hide-focus \" + (/*skinTonePickerExpanded*/ ctx[6]\n\t\t\t? ''\n\t\t\t: 'hidden no-animate'))) {\n\t\t\t\tattr(div3, \"class\", div3_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinTonePickerExpanded*/ 64) {\n\t\t\t\tset_style(div3, \"transform\", \"translateY(\" + (/*skinTonePickerExpanded*/ ctx[6]\n\t\t\t\t? 0\n\t\t\t\t: 'calc(-1 * var(--num-skintones) * var(--total-emoji-size))') + \")\");\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n*/ 1 && div3_aria_label_value !== (div3_aria_label_value = /*i18n*/ ctx[0].skinTonesLabel)) {\n\t\t\t\tattr(div3, \"aria-label\", div3_aria_label_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*activeSkinTone*/ 1048576 && div3_aria_activedescendant_value !== (div3_aria_activedescendant_value = \"skintone-\" + /*activeSkinTone*/ ctx[20])) {\n\t\t\t\tattr(div3, \"aria-activedescendant\", div3_aria_activedescendant_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*skinTonePickerExpanded*/ 64 && div3_aria_hidden_value !== (div3_aria_hidden_value = !/*skinTonePickerExpanded*/ ctx[6])) {\n\t\t\t\tattr(div3, \"aria-hidden\", div3_aria_hidden_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*groups, i18n, searchMode, currentGroup*/ 12305 | dirty[1] & /*onNavClick*/ 1) {\n\t\t\t\teach_value_3 = /*groups*/ ctx[12];\n\t\t\t\teach_blocks_2 = update_keyed_each(each_blocks_2, dirty, get_key_1, 1, ctx, each_value_3, each1_lookup, div5, destroy_block, create_each_block_3, null, get_each_context_3);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*groups*/ 4096) {\n\t\t\t\tset_style(div5, \"grid-template-columns\", \"repeat(\" + /*groups*/ ctx[12].length + \", 1fr)\");\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n*/ 1 && div5_aria_label_value !== (div5_aria_label_value = /*i18n*/ ctx[0].categoriesLabel)) {\n\t\t\t\tattr(div5, \"aria-label\", div5_aria_label_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*isRtl, currentGroupIndex*/ 16779264) {\n\t\t\t\tset_style(div6, \"transform\", \"translateX(\" + (/*isRtl*/ ctx[24] ? -1 : 1) * /*currentGroupIndex*/ ctx[11] * 100 + \"%)\");\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*message*/ 262144) set_data(t4, /*message*/ ctx[18]);\n\n\t\t\tif (dirty[0] & /*message*/ 262144 && div8_class_value !== (div8_class_value = \"message \" + (/*message*/ ctx[18] ? '' : 'gone'))) {\n\t\t\t\tattr(div8, \"class\", div8_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode, currentEmojisWithCategories, activeSearchItem, labelWithSkin, currentSkinTone, unicodeWithSkin, i18n, currentGroup*/ 402694449) {\n\t\t\t\teach_value_1 = /*currentEmojisWithCategories*/ ctx[15];\n\t\t\t\teach_blocks_1 = update_keyed_each(each_blocks_1, dirty, get_key_2, 1, ctx, each_value_1, each2_lookup, div9, destroy_block, create_each_block_1, null, get_each_context_1);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*databaseLoaded, message*/ 278528 && div10_class_value !== (div10_class_value = \"tabpanel \" + (!/*databaseLoaded*/ ctx[14] || /*message*/ ctx[18]\n\t\t\t? 'gone'\n\t\t\t: ''))) {\n\t\t\t\tattr(div10, \"class\", div10_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode*/ 16 && div10_role_value !== (div10_role_value = /*searchMode*/ ctx[4] ? 'region' : 'tabpanel')) {\n\t\t\t\tattr(div10, \"role\", div10_role_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode, i18n, currentGroup*/ 8209 && div10_aria_label_value !== (div10_aria_label_value = /*searchMode*/ ctx[4]\n\t\t\t? /*i18n*/ ctx[0].searchResultsLabel\n\t\t\t: /*i18n*/ ctx[0].categories[/*currentGroup*/ ctx[13].name])) {\n\t\t\t\tattr(div10, \"aria-label\", div10_aria_label_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*searchMode, currentGroup*/ 8208 && div10_id_value !== (div10_id_value = /*searchMode*/ ctx[4]\n\t\t\t? ''\n\t\t\t: `tab-${/*currentGroup*/ ctx[13].id}`)) {\n\t\t\t\tattr(div10, \"id\", div10_id_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*labelWithSkin, currentFavorites, currentSkinTone, unicodeWithSkin*/ 402654464) {\n\t\t\t\teach_value = /*currentFavorites*/ ctx[10];\n\t\t\t\teach_blocks = update_keyed_each(each_blocks, dirty, get_key_3, 1, ctx, each_value, each3_lookup, div11, destroy_block, create_each_block, null, get_each_context);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*message*/ 262144 && div11_class_value !== (div11_class_value = \"favorites emoji-menu \" + (/*message*/ ctx[18] ? 'gone' : ''))) {\n\t\t\t\tattr(div11, \"class\", div11_class_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n*/ 1 && div11_aria_label_value !== (div11_aria_label_value = /*i18n*/ ctx[0].favoritesLabel)) {\n\t\t\t\tattr(div11, \"aria-label\", div11_aria_label_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*scrollbarWidth*/ 33554432) {\n\t\t\t\tset_style(div11, \"padding-inline-end\", /*scrollbarWidth*/ ctx[25] + \"px\");\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*i18n*/ 1 && section_aria_label_value !== (section_aria_label_value = /*i18n*/ ctx[0].regionLabel)) {\n\t\t\t\tattr(section, \"aria-label\", section_aria_label_value);\n\t\t\t}\n\n\t\t\tif (dirty[0] & /*pickerStyle*/ 4194304) {\n\t\t\t\tattr(section, \"style\", /*pickerStyle*/ ctx[22]);\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(section);\n\n\t\t\tfor (let i = 0; i < each_blocks_3.length; i += 1) {\n\t\t\t\teach_blocks_3[i].d();\n\t\t\t}\n\n\t\t\t/*div3_binding*/ ctx[49](null);\n\n\t\t\tfor (let i = 0; i < each_blocks_2.length; i += 1) {\n\t\t\t\teach_blocks_2[i].d();\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < each_blocks_1.length; i += 1) {\n\t\t\t\teach_blocks_1[i].d();\n\t\t\t}\n\n\t\t\t/*div10_binding*/ ctx[51](null);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].d();\n\t\t\t}\n\n\t\t\t/*button1_binding*/ ctx[52](null);\n\t\t\t/*section_binding*/ ctx[53](null);\n\t\t\tmounted = false;\n\t\t\trun_all(dispose);\n\t\t}\n\t};\n}\n\nfunction instance($$self, $$props, $$invalidate) {\n\tlet { skinToneEmoji } = $$props;\n\tlet { i18n } = $$props;\n\tlet { database } = $$props;\n\tlet { customEmoji } = $$props;\n\tlet { customCategorySorting } = $$props;\n\tlet { emojiVersion } = $$props;\n\n\t// private\n\tlet initialLoad = true;\n\n\tlet currentEmojis = [];\n\tlet currentEmojisWithCategories = []; // eslint-disable-line no-unused-vars\n\tlet rawSearchText = '';\n\tlet searchText = '';\n\tlet rootElement;\n\tlet baselineEmoji;\n\tlet tabpanelElement;\n\tlet searchMode = false; // eslint-disable-line no-unused-vars\n\tlet activeSearchItem = -1;\n\tlet message; // eslint-disable-line no-unused-vars\n\tlet skinTonePickerExpanded = false;\n\tlet skinTonePickerExpandedAfterAnimation = false; // eslint-disable-line no-unused-vars\n\tlet skinToneDropdown;\n\tlet currentSkinTone = 0;\n\tlet activeSkinTone = 0;\n\tlet skinToneButtonText; // eslint-disable-line no-unused-vars\n\tlet pickerStyle; // eslint-disable-line no-unused-vars\n\tlet skinToneButtonLabel = ''; // eslint-disable-line no-unused-vars\n\tlet skinTones = [];\n\tlet currentFavorites = []; // eslint-disable-line no-unused-vars\n\tlet defaultFavoriteEmojis;\n\tlet numColumns = DEFAULT_NUM_COLUMNS;\n\tlet isRtl = false; // eslint-disable-line no-unused-vars\n\tlet scrollbarWidth = 0; // eslint-disable-line no-unused-vars\n\tlet currentGroupIndex = 0;\n\tlet groups$1 = groups;\n\tlet currentGroup;\n\tlet databaseLoaded = false; // eslint-disable-line no-unused-vars\n\tlet activeSearchItemId; // eslint-disable-line no-unused-vars\n\n\t//\n\t// Utils/helpers\n\t//\n\tconst focus = id => {\n\t\trootElement.getRootNode().getElementById(id).focus();\n\t};\n\n\t// fire a custom event that crosses the shadow boundary\n\tconst fireEvent = (name, detail) => {\n\t\trootElement.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));\n\t};\n\n\t// eslint-disable-next-line no-unused-vars\n\tconst unicodeWithSkin = (emoji, currentSkinTone) => currentSkinTone && emoji.skins && emoji.skins[currentSkinTone] || emoji.unicode;\n\n\t// eslint-disable-next-line no-unused-vars\n\tconst labelWithSkin = (emoji, currentSkinTone) => uniq([\n\t\temoji.name || unicodeWithSkin(emoji, currentSkinTone),\n\t\t...emoji.shortcodes || []\n\t]).join(', ');\n\n\t//\n\t// Determine the emoji support level (in requestIdleCallback)\n\t//\n\tonMount(() => {\n\t\tif (!emojiVersion) {\n\t\t\tdetectEmojiSupportLevel().then(level => {\n\t\t\t\t// Can't actually test emoji support in Jest/JSDom, emoji never render in color in Cairo\n\t\t\t\t/* istanbul ignore next */\n\t\t\t\tif (!level) {\n\t\t\t\t\t$$invalidate(18, message = i18n.emojiUnsupportedMessage);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\t//\n\t// Calculate the width of the emoji grid. This serves two purposes:\n\t// 1) Re-calculate the --num-columns var because it may have changed\n\t// 2) Re-calculate the scrollbar width because it may have changed\n\t// (i.e. because the number of items changed)\n\t// 3) Re-calculate whether we're in RTL mode or not.\n\t//\n\t// The benefit of doing this in one place is to align with rAF/ResizeObserver\n\t// and do all the calculations in one go. RTL vs LTR is not strictly width-related,\n\t// but since we're already reading the style here, and since it's already aligned with\n\t// the rAF loop, this is the most appropriate place to do it perf-wise.\n\t//\n\t// eslint-disable-next-line no-unused-vars\n\tfunction calculateEmojiGridStyle(node) {\n\t\treturn calculateWidth(node, width => {\n\t\t\t/* istanbul ignore next */\n\t\t\tif (\"production\" !== 'test') {\n\t\t\t\t// jsdom throws errors for this kind of fancy stuff\n\t\t\t\t// read all the style/layout calculations we need to make\n\t\t\t\tconst style = getComputedStyle(rootElement);\n\n\t\t\t\tconst newNumColumns = parseInt(style.getPropertyValue('--num-columns'), 10);\n\t\t\t\tconst newIsRtl = style.getPropertyValue('direction') === 'rtl';\n\t\t\t\tconst parentWidth = node.parentElement.getBoundingClientRect().width;\n\t\t\t\tconst newScrollbarWidth = parentWidth - width;\n\n\t\t\t\t// write to Svelte variables\n\t\t\t\t$$invalidate(47, numColumns = newNumColumns);\n\n\t\t\t\t$$invalidate(25, scrollbarWidth = newScrollbarWidth); // eslint-disable-line no-unused-vars\n\t\t\t\t$$invalidate(24, isRtl = newIsRtl); // eslint-disable-line no-unused-vars\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction checkZwjSupportAndUpdate(zwjEmojisToCheck) {\n\t\tconst rootNode = rootElement.getRootNode();\n\t\tconst emojiToDomNode = emoji => rootNode.getElementById(`emo-${emoji.id}`);\n\t\tcheckZwjSupport(zwjEmojisToCheck, baselineEmoji, emojiToDomNode);\n\n\t\t// force update\n\t\t$$invalidate(1, currentEmojis = currentEmojis); // eslint-disable-line no-self-assign\n\t}\n\n\tfunction isZwjSupported(emoji) {\n\t\treturn !emoji.unicode || !hasZwj(emoji) || supportedZwjEmojis.get(emoji.unicode);\n\t}\n\n\tasync function filterEmojisByVersion(emojis) {\n\t\tconst emojiSupportLevel = emojiVersion || await detectEmojiSupportLevel();\n\n\t\t// !version corresponds to custom emoji\n\t\treturn emojis.filter(({ version }) => !version || version <= emojiSupportLevel);\n\t}\n\n\tasync function summarizeEmojis(emojis) {\n\t\treturn summarizeEmojisForUI(emojis, emojiVersion || await detectEmojiSupportLevel());\n\t}\n\n\tasync function getEmojisByGroup(group) {\n\n\t\t// -1 is custom emoji\n\t\tconst emoji = group === -1\n\t\t? customEmoji\n\t\t: await database.getEmojiByGroup(group);\n\n\t\treturn summarizeEmojis(await filterEmojisByVersion(emoji));\n\t}\n\n\tasync function getEmojisBySearchQuery(query) {\n\t\treturn summarizeEmojis(await filterEmojisByVersion(await database.getEmojiBySearchQuery(query)));\n\t}\n\n\t// eslint-disable-next-line no-unused-vars\n\tfunction onSearchKeydown(event) {\n\t\tif (!searchMode || !currentEmojis.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst goToNextOrPrevious = previous => {\n\t\t\thalt(event);\n\t\t\t$$invalidate(5, activeSearchItem = incrementOrDecrement(previous, activeSearchItem, currentEmojis));\n\t\t};\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowDown':\n\t\t\t\treturn goToNextOrPrevious(false);\n\t\t\tcase 'ArrowUp':\n\t\t\t\treturn goToNextOrPrevious(true);\n\t\t\tcase 'Enter':\n\t\t\t\tif (activeSearchItem !== -1) {\n\t\t\t\t\thalt(event);\n\t\t\t\t\treturn clickEmoji(currentEmojis[activeSearchItem].id);\n\t\t\t\t} else if (currentEmojis.length) {\n\t\t\t\t\t$$invalidate(5, activeSearchItem = 0);\n\t\t\t\t}\n\t\t}\n\t}\n\n\t//\n\t// Handle user input on nav\n\t//\n\t// eslint-disable-next-line no-unused-vars\n\tfunction onNavClick(group) {\n\t\t$$invalidate(2, rawSearchText = '');\n\t\t$$invalidate(45, searchText = '');\n\t\t$$invalidate(5, activeSearchItem = -1);\n\t\t$$invalidate(11, currentGroupIndex = groups$1.findIndex(_ => _.id === group.id));\n\t}\n\n\t// eslint-disable-next-line no-unused-vars\n\tfunction onNavKeydown(event) {\n\t\tconst { target, key } = event;\n\n\t\tconst doFocus = el => {\n\t\t\tif (el) {\n\t\t\t\thalt(event);\n\t\t\t\tel.focus();\n\t\t\t}\n\t\t};\n\n\t\tswitch (key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\treturn doFocus(target.previousSibling);\n\t\t\tcase 'ArrowRight':\n\t\t\t\treturn doFocus(target.nextSibling);\n\t\t\tcase 'Home':\n\t\t\t\treturn doFocus(target.parentElement.firstChild);\n\t\t\tcase 'End':\n\t\t\t\treturn doFocus(target.parentElement.lastChild);\n\t\t}\n\t}\n\n\t//\n\t// Handle user input on an emoji\n\t//\n\tasync function clickEmoji(unicodeOrName) {\n\t\tconst emoji = await database.getEmojiByUnicodeOrName(unicodeOrName);\n\t\tconst emojiSummary = [...currentEmojis, ...currentFavorites].find(_ => _.id === unicodeOrName);\n\t\tconst skinTonedUnicode = emojiSummary.unicode && unicodeWithSkin(emojiSummary, currentSkinTone);\n\t\tawait database.incrementFavoriteEmojiCount(unicodeOrName);\n\n\t\tfireEvent('emoji-click', {\n\t\t\temoji,\n\t\t\tskinTone: currentSkinTone,\n\t\t\t...skinTonedUnicode && { unicode: skinTonedUnicode },\n\t\t\t...emojiSummary.name && { name: emojiSummary.name }\n\t\t});\n\t}\n\n\t// eslint-disable-next-line no-unused-vars\n\tasync function onEmojiClick(event) {\n\t\tconst { target } = event;\n\n\t\tif (!target.classList.contains('emoji')) {\n\t\t\treturn;\n\t\t}\n\n\t\thalt(event);\n\t\tconst id = target.id.substring(4); // replace 'emo-' or 'fav-' prefix\n\n\t\t/* no await */\n\t\tclickEmoji(id);\n\t}\n\n\t//\n\t// Handle user input on the skintone picker\n\t//\n\t// eslint-disable-next-line no-unused-vars\n\tfunction changeSkinTone(skinTone) {\n\t\t$$invalidate(8, currentSkinTone = skinTone);\n\t\t$$invalidate(6, skinTonePickerExpanded = false);\n\t\tfocus('skintone-button');\n\t\tfireEvent('skin-tone-change', { skinTone });\n\n\t\t/* no await */\n\t\tdatabase.setPreferredSkinTone(skinTone);\n\t}\n\n\t// eslint-disable-next-line no-unused-vars\n\tfunction onSkinToneOptionsClick(event) {\n\t\tconst { target: { id } } = event;\n\t\tconst match = id && id.match(/^skintone-(\\d)/); // skintone option format\n\n\t\tif (!match) {\n\t\t\t// not a skintone option\n\t\t\treturn;\n\t\t}\n\n\t\thalt(event);\n\t\tconst skinTone = parseInt(match[1], 10); // remove 'skintone-' prefix\n\t\tchangeSkinTone(skinTone);\n\t}\n\n\t// eslint-disable-next-line no-unused-vars\n\tfunction onClickSkinToneButton(event) {\n\t\t$$invalidate(6, skinTonePickerExpanded = !skinTonePickerExpanded);\n\t\t$$invalidate(20, activeSkinTone = currentSkinTone);\n\n\t\tif (skinTonePickerExpanded) {\n\t\t\thalt(event);\n\t\t\trAF(() => focus('skintone-list'));\n\t\t}\n\t}\n\n\t// eslint-disable-next-line no-unused-vars\n\tfunction onSkinToneOptionsKeydown(event) {\n\t\tif (!skinTonePickerExpanded) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst changeActiveSkinTone = async nextSkinTone => {\n\t\t\thalt(event);\n\t\t\t$$invalidate(20, activeSkinTone = nextSkinTone);\n\t\t};\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowUp':\n\t\t\t\treturn changeActiveSkinTone(incrementOrDecrement(true, activeSkinTone, skinTones));\n\t\t\tcase 'ArrowDown':\n\t\t\t\treturn changeActiveSkinTone(incrementOrDecrement(false, activeSkinTone, skinTones));\n\t\t\tcase 'Home':\n\t\t\t\treturn changeActiveSkinTone(0);\n\t\t\tcase 'End':\n\t\t\t\treturn changeActiveSkinTone(skinTones.length - 1);\n\t\t\tcase 'Enter':\n\t\t\t\t// enter on keydown, space on keyup. this is just how browsers work for buttons\n\t\t\t\t// https://lists.w3.org/Archives/Public/w3c-wai-ig/2019JanMar/0086.html\n\t\t\t\thalt(event);\n\t\t\t\treturn changeSkinTone(activeSkinTone);\n\t\t\tcase 'Escape':\n\t\t\t\thalt(event);\n\t\t\t\t$$invalidate(6, skinTonePickerExpanded = false);\n\t\t\t\treturn focus('skintone-button');\n\t\t}\n\t}\n\n\t// eslint-disable-next-line no-unused-vars\n\tfunction onSkinToneOptionsKeyup(event) {\n\t\tif (!skinTonePickerExpanded) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (event.key) {\n\t\t\tcase ' ':\n\t\t\t\t// enter on keydown, space on keyup. this is just how browsers work for buttons\n\t\t\t\t// https://lists.w3.org/Archives/Public/w3c-wai-ig/2019JanMar/0086.html\n\t\t\t\thalt(event);\n\t\t\t\treturn changeSkinTone(activeSkinTone);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line no-unused-vars\n\tasync function onSkinToneOptionsFocusOut(event) {\n\t\t// On blur outside of the skintone listbox, collapse the skintone picker.\n\t\tconst { relatedTarget } = event;\n\n\t\tif (!relatedTarget || relatedTarget.id !== 'skintone-list') {\n\t\t\t$$invalidate(6, skinTonePickerExpanded = false);\n\t\t}\n\t}\n\n\tfunction input_input_handler() {\n\t\trawSearchText = this.value;\n\t\t$$invalidate(2, rawSearchText);\n\t}\n\n\tfunction div3_binding($$value) {\n\t\tbinding_callbacks[$$value ? 'unshift' : 'push'](() => {\n\t\t\tskinToneDropdown = $$value;\n\t\t\t$$invalidate(7, skinToneDropdown);\n\t\t});\n\t}\n\n\tconst click_handler = group => onNavClick(group);\n\n\tfunction div10_binding($$value) {\n\t\tbinding_callbacks[$$value ? 'unshift' : 'push'](() => {\n\t\t\ttabpanelElement = $$value;\n\t\t\t$$invalidate(3, tabpanelElement);\n\t\t});\n\t}\n\n\tfunction button1_binding($$value) {\n\t\tbinding_callbacks[$$value ? 'unshift' : 'push'](() => {\n\t\t\tbaselineEmoji = $$value;\n\t\t\t$$invalidate(17, baselineEmoji);\n\t\t});\n\t}\n\n\tfunction section_binding($$value) {\n\t\tbinding_callbacks[$$value ? 'unshift' : 'push'](() => {\n\t\t\trootElement = $$value;\n\t\t\t$$invalidate(16, rootElement);\n\t\t});\n\t}\n\n\t$$self.$$set = $$props => {\n\t\tif ('skinToneEmoji' in $$props) $$invalidate(40, skinToneEmoji = $$props.skinToneEmoji);\n\t\tif ('i18n' in $$props) $$invalidate(0, i18n = $$props.i18n);\n\t\tif ('database' in $$props) $$invalidate(39, database = $$props.database);\n\t\tif ('customEmoji' in $$props) $$invalidate(41, customEmoji = $$props.customEmoji);\n\t\tif ('customCategorySorting' in $$props) $$invalidate(42, customCategorySorting = $$props.customCategorySorting);\n\t\tif ('emojiVersion' in $$props) $$invalidate(43, emojiVersion = $$props.emojiVersion);\n\t};\n\n\t$$self.$$.update = () => {\n\t\tif ($$self.$$.dirty[1] & /*customEmoji, database*/ 1280) {\n\t\t\t/* eslint-enable no-unused-vars */\n\t\t\t//\n\t\t\t// Set or update the customEmoji\n\t\t\t//\n\t\t\t{\n\t\t\t\tif (customEmoji && database) {\n\t\t\t\t\t$$invalidate(39, database.customEmoji = customEmoji, database);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*i18n*/ 1 | $$self.$$.dirty[1] & /*database*/ 256) {\n\t\t\t//\n\t\t\t// Set or update the database object\n\t\t\t//\n\t\t\t{\n\t\t\t\t// show a Loading message if it takes a long time, or show an error if there's a network/IDB error\n\t\t\t\tasync function handleDatabaseLoading() {\n\t\t\t\t\tlet showingLoadingMessage = false;\n\n\t\t\t\t\tconst timeoutHandle = setTimeout(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tshowingLoadingMessage = true;\n\t\t\t\t\t\t\t$$invalidate(18, message = i18n.loadingMessage);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTIMEOUT_BEFORE_LOADING_MESSAGE\n\t\t\t\t\t);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait database.ready();\n\t\t\t\t\t\t$$invalidate(14, databaseLoaded = true); // eslint-disable-line no-unused-vars\n\t\t\t\t\t} catch(err) {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t$$invalidate(18, message = i18n.networkErrorMessage);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tclearTimeout(timeoutHandle);\n\n\t\t\t\t\t\tif (showingLoadingMessage) {\n\t\t\t\t\t\t\t// Seems safer than checking the i18n string, which may change\n\t\t\t\t\t\t\tshowingLoadingMessage = false;\n\n\t\t\t\t\t\t\t$$invalidate(18, message = ''); // eslint-disable-line no-unused-vars\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (database) {\n\t\t\t\t\t/* no await */\n\t\t\t\t\thandleDatabaseLoading();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*groups, currentGroupIndex*/ 6144 | $$self.$$.dirty[1] & /*customEmoji*/ 1024) {\n\t\t\t{\n\t\t\t\tif (customEmoji && customEmoji.length) {\n\t\t\t\t\t$$invalidate(12, groups$1 = [customGroup, ...groups]);\n\t\t\t\t} else if (groups$1 !== groups) {\n\t\t\t\t\tif (currentGroupIndex) {\n\t\t\t\t\t\t// If the current group is anything other than \"custom\" (which is first), decrement.\n\t\t\t\t\t\t// This fixes the odd case where you set customEmoji, then pick a category, then unset customEmoji\n\t\t\t\t\t\t$$invalidate(11, currentGroupIndex--, currentGroupIndex);\n\t\t\t\t\t}\n\n\t\t\t\t\t$$invalidate(12, groups$1 = groups);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*rawSearchText*/ 4) {\n\t\t\t/* eslint-enable no-unused-vars */\n\t\t\t//\n\t\t\t// Handle user input on the search input\n\t\t\t//\n\t\t\t{\n\t\t\t\trIC(() => {\n\t\t\t\t\t$$invalidate(45, searchText = (rawSearchText || '').trim()); // defer to avoid input delays, plus we can trim here\n\t\t\t\t\t$$invalidate(5, activeSearchItem = -1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*groups, currentGroupIndex*/ 6144) {\n\t\t\t//\n\t\t\t// Update the current group based on the currentGroupIndex\n\t\t\t//\n\t\t\t$$invalidate(13, currentGroup = groups$1[currentGroupIndex]);\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*databaseLoaded, currentGroup*/ 24576 | $$self.$$.dirty[1] & /*searchText*/ 16384) {\n\t\t\t//\n\t\t\t// Set or update the currentEmojis. Check for invalid ZWJ renderings\n\t\t\t// (i.e. double emoji).\n\t\t\t//\n\t\t\t{\n\t\t\t\tasync function updateEmojis() {\n\n\t\t\t\t\tif (!databaseLoaded) {\n\t\t\t\t\t\t$$invalidate(1, currentEmojis = []);\n\t\t\t\t\t\t$$invalidate(4, searchMode = false);\n\t\t\t\t\t} else if (searchText.length >= MIN_SEARCH_TEXT_LENGTH) {\n\t\t\t\t\t\tconst currentSearchText = searchText;\n\t\t\t\t\t\tconst newEmojis = await getEmojisBySearchQuery(currentSearchText);\n\n\t\t\t\t\t\tif (currentSearchText === searchText) {\n\t\t\t\t\t\t\t// if the situation changes asynchronously, do not update\n\t\t\t\t\t\t\t$$invalidate(1, currentEmojis = newEmojis);\n\n\t\t\t\t\t\t\t$$invalidate(4, searchMode = true);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (currentGroup) {\n\t\t\t\t\t\tconst currentGroupId = currentGroup.id;\n\t\t\t\t\t\tconst newEmojis = await getEmojisByGroup(currentGroupId);\n\n\t\t\t\t\t\tif (currentGroupId === currentGroup.id) {\n\t\t\t\t\t\t\t// if the situation changes asynchronously, do not update\n\t\t\t\t\t\t\t$$invalidate(1, currentEmojis = newEmojis);\n\n\t\t\t\t\t\t\t$$invalidate(4, searchMode = false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* no await */\n\t\t\t\tupdateEmojis();\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*groups, searchMode*/ 4112) {\n\t\t\t//\n\t\t\t// Global styles for the entire picker\n\t\t\t//\n\t\t\t/* eslint-disable no-unused-vars */\n\t\t\t$$invalidate(22, pickerStyle = `\n --num-groups: ${groups$1.length}; \n --indicator-opacity: ${searchMode ? 0 : 1}; \n --num-skintones: ${NUM_SKIN_TONES};`);\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*databaseLoaded*/ 16384 | $$self.$$.dirty[1] & /*database*/ 256) {\n\t\t\t//\n\t\t\t// Set or update the preferred skin tone\n\t\t\t//\n\t\t\t{\n\t\t\t\tasync function updatePreferredSkinTone() {\n\t\t\t\t\tif (databaseLoaded) {\n\t\t\t\t\t\t$$invalidate(8, currentSkinTone = await database.getPreferredSkinTone());\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* no await */\n\t\t\t\tupdatePreferredSkinTone();\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[1] & /*skinToneEmoji*/ 512) {\n\t\t\t$$invalidate(9, skinTones = Array(NUM_SKIN_TONES).fill().map((_, i) => applySkinTone(skinToneEmoji, i)));\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*skinTones, currentSkinTone*/ 768) {\n\t\t\t/* eslint-disable no-unused-vars */\n\t\t\t$$invalidate(21, skinToneButtonText = skinTones[currentSkinTone]);\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*i18n, currentSkinTone*/ 257) {\n\t\t\t$$invalidate(23, skinToneButtonLabel = i18n.skinToneLabel.replace('{skinTone}', i18n.skinTones[currentSkinTone]));\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*databaseLoaded*/ 16384 | $$self.$$.dirty[1] & /*database*/ 256) {\n\t\t\t/* eslint-enable no-unused-vars */\n\t\t\t//\n\t\t\t// Set or update the favorites emojis\n\t\t\t//\n\t\t\t{\n\t\t\t\tasync function updateDefaultFavoriteEmojis() {\n\t\t\t\t\t$$invalidate(46, defaultFavoriteEmojis = (await Promise.all(MOST_COMMONLY_USED_EMOJI.map(unicode => database.getEmojiByUnicodeOrName(unicode)))).filter(Boolean)); // filter because in Jest tests we don't have all the emoji in the DB\n\t\t\t\t}\n\n\t\t\t\tif (databaseLoaded) {\n\t\t\t\t\t/* no await */\n\t\t\t\t\tupdateDefaultFavoriteEmojis();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*databaseLoaded*/ 16384 | $$self.$$.dirty[1] & /*database, numColumns, defaultFavoriteEmojis*/ 98560) {\n\t\t\t{\n\t\t\t\tasync function updateFavorites() {\n\t\t\t\t\tconst dbFavorites = await database.getTopFavoriteEmoji(numColumns);\n\t\t\t\t\tconst favorites = await summarizeEmojis(uniqBy([...dbFavorites, ...defaultFavoriteEmojis], _ => _.unicode || _.name).slice(0, numColumns));\n\t\t\t\t\t$$invalidate(10, currentFavorites = favorites);\n\t\t\t\t}\n\n\t\t\t\tif (databaseLoaded && defaultFavoriteEmojis) {\n\t\t\t\t\t/* no await */\n\t\t\t\t\tupdateFavorites();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*currentEmojis, tabpanelElement*/ 10 | $$self.$$.dirty[1] & /*emojiVersion*/ 4096) {\n\t\t\t// Some emojis have their ligatures rendered as two or more consecutive emojis\n\t\t\t// We want to treat these the same as unsupported emojis, so we compare their\n\t\t\t// widths against the baseline widths and remove them as necessary\n\t\t\t{\n\t\t\t\tconst zwjEmojisToCheck = currentEmojis.filter(emoji => emoji.unicode).filter(emoji => hasZwj(emoji) && !supportedZwjEmojis.has(emoji.unicode)); // filter custom emoji\n\n\t\t\t\tif (!emojiVersion && zwjEmojisToCheck.length) {\n\t\t\t\t\t// render now, check their length later\n\t\t\t\t\trAF(() => checkZwjSupportAndUpdate(zwjEmojisToCheck));\n\t\t\t\t} else {\n\t\t\t\t\t$$invalidate(1, currentEmojis = emojiVersion\n\t\t\t\t\t? currentEmojis\n\t\t\t\t\t: currentEmojis.filter(isZwjSupported));\n\n\t\t\t\t\t// Reset scroll top to 0 when emojis change\n\t\t\t\t\trAF(() => resetScrollTopIfPossible(tabpanelElement));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*currentEmojis, currentFavorites*/ 1026 | $$self.$$.dirty[1] & /*initialLoad*/ 8192) {\n\t\t\t{\n\t\t\t\t// consider initialLoad to be complete when the first tabpanel and favorites are rendered\n\t\t\t\t/* istanbul ignore next */\n\t\t\t\tif (\"production\" !== 'production' || false) {\n\t\t\t\t\tif (currentEmojis.length && currentFavorites.length && initialLoad) {\n\t\t\t\t\t\t$$invalidate(44, initialLoad = false);\n\t\t\t\t\t\trequestPostAnimationFrame(() => (void 0));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*searchMode, currentEmojis*/ 18 | $$self.$$.dirty[1] & /*customCategorySorting*/ 2048) {\n\t\t\t//\n\t\t\t// Derive currentEmojisWithCategories from currentEmojis. This is always done even if there\n\t\t\t// are no categories, because it's just easier to code the HTML this way.\n\t\t\t//\n\t\t\t{\n\t\t\t\tfunction calculateCurrentEmojisWithCategories() {\n\t\t\t\t\tif (searchMode) {\n\t\t\t\t\t\treturn [{ category: '', emojis: currentEmojis }];\n\t\t\t\t\t}\n\n\t\t\t\t\tconst categoriesToEmoji = new Map();\n\n\t\t\t\t\tfor (const emoji of currentEmojis) {\n\t\t\t\t\t\tconst category = emoji.category || '';\n\t\t\t\t\t\tlet emojis = categoriesToEmoji.get(category);\n\n\t\t\t\t\t\tif (!emojis) {\n\t\t\t\t\t\t\temojis = [];\n\t\t\t\t\t\t\tcategoriesToEmoji.set(category, emojis);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\temojis.push(emoji);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [...categoriesToEmoji.entries()].map(([category, emojis]) => ({ category, emojis })).sort((a, b) => customCategorySorting(a.category, b.category));\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t$$invalidate(15, currentEmojisWithCategories = calculateCurrentEmojisWithCategories());\n\t\t\t}\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*activeSearchItem, currentEmojis*/ 34) {\n\t\t\t//\n\t\t\t// Handle active search item (i.e. pressing up or down while searching)\n\t\t\t//\n\t\t\t/* eslint-disable no-unused-vars */\n\t\t\t$$invalidate(26, activeSearchItemId = activeSearchItem !== -1 && currentEmojis[activeSearchItem].id);\n\t\t}\n\n\t\tif ($$self.$$.dirty[0] & /*skinTonePickerExpanded, skinToneDropdown*/ 192) {\n\t\t\t// To make the animation nicer, change the z-index of the skintone picker button\n\t\t\t// *after* the animation has played. This makes it appear that the picker box\n\t\t\t// is expanding \"below\" the button\n\t\t\t{\n\t\t\t\tif (skinTonePickerExpanded) {\n\t\t\t\t\tskinToneDropdown.addEventListener(\n\t\t\t\t\t\t'transitionend',\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t$$invalidate(19, skinTonePickerExpandedAfterAnimation = true); // eslint-disable-line no-unused-vars\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t$$invalidate(19, skinTonePickerExpandedAfterAnimation = false); // eslint-disable-line no-unused-vars\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\treturn [\n\t\ti18n,\n\t\tcurrentEmojis,\n\t\trawSearchText,\n\t\ttabpanelElement,\n\t\tsearchMode,\n\t\tactiveSearchItem,\n\t\tskinTonePickerExpanded,\n\t\tskinToneDropdown,\n\t\tcurrentSkinTone,\n\t\tskinTones,\n\t\tcurrentFavorites,\n\t\tcurrentGroupIndex,\n\t\tgroups$1,\n\t\tcurrentGroup,\n\t\tdatabaseLoaded,\n\t\tcurrentEmojisWithCategories,\n\t\trootElement,\n\t\tbaselineEmoji,\n\t\tmessage,\n\t\tskinTonePickerExpandedAfterAnimation,\n\t\tactiveSkinTone,\n\t\tskinToneButtonText,\n\t\tpickerStyle,\n\t\tskinToneButtonLabel,\n\t\tisRtl,\n\t\tscrollbarWidth,\n\t\tactiveSearchItemId,\n\t\tunicodeWithSkin,\n\t\tlabelWithSkin,\n\t\tcalculateEmojiGridStyle,\n\t\tonSearchKeydown,\n\t\tonNavClick,\n\t\tonNavKeydown,\n\t\tonEmojiClick,\n\t\tonSkinToneOptionsClick,\n\t\tonClickSkinToneButton,\n\t\tonSkinToneOptionsKeydown,\n\t\tonSkinToneOptionsKeyup,\n\t\tonSkinToneOptionsFocusOut,\n\t\tdatabase,\n\t\tskinToneEmoji,\n\t\tcustomEmoji,\n\t\tcustomCategorySorting,\n\t\temojiVersion,\n\t\tinitialLoad,\n\t\tsearchText,\n\t\tdefaultFavoriteEmojis,\n\t\tnumColumns,\n\t\tinput_input_handler,\n\t\tdiv3_binding,\n\t\tclick_handler,\n\t\tdiv10_binding,\n\t\tbutton1_binding,\n\t\tsection_binding\n\t];\n}\n\nclass Picker extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\n\t\tinit(\n\t\t\tthis,\n\t\t\toptions,\n\t\t\tinstance,\n\t\t\tcreate_fragment,\n\t\t\tsafe_not_equal,\n\t\t\t{\n\t\t\t\tskinToneEmoji: 40,\n\t\t\t\ti18n: 0,\n\t\t\t\tdatabase: 39,\n\t\t\t\tcustomEmoji: 41,\n\t\t\t\tcustomCategorySorting: 42,\n\t\t\t\temojiVersion: 43\n\t\t\t},\n\t\t\tnull,\n\t\t\t[-1, -1, -1]\n\t\t);\n\t}\n}\n\nconst DEFAULT_DATA_SOURCE = 'https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json';\nconst DEFAULT_LOCALE = 'en';\n\nvar enI18n = {\n categoriesLabel: 'Categories',\n emojiUnsupportedMessage: 'Your browser does not support color emoji.',\n favoritesLabel: 'Favorites',\n loadingMessage: 'Loading…',\n networkErrorMessage: 'Could not load emoji.',\n regionLabel: 'Emoji picker',\n searchDescription: 'When search results are available, press up or down to select and enter to choose.',\n searchLabel: 'Search',\n searchResultsLabel: 'Search results',\n skinToneDescription: 'When expanded, press up or down to select and enter to choose.',\n skinToneLabel: 'Choose a skin tone (currently {skinTone})',\n skinTonesLabel: 'Skin tones',\n skinTones: [\n 'Default',\n 'Light',\n 'Medium-Light',\n 'Medium',\n 'Medium-Dark',\n 'Dark'\n ],\n categories: {\n custom: 'Custom',\n 'smileys-emotion': 'Smileys and emoticons',\n 'people-body': 'People and body',\n 'animals-nature': 'Animals and nature',\n 'food-drink': 'Food and drink',\n 'travel-places': 'Travel and places',\n activities: 'Activities',\n objects: 'Objects',\n symbols: 'Symbols',\n flags: 'Flags'\n }\n};\n\nconst PROPS = [\n 'customEmoji',\n 'customCategorySorting',\n 'database',\n 'dataSource',\n 'i18n',\n 'locale',\n 'skinToneEmoji',\n 'emojiVersion'\n];\n\n// Styles injected ourselves, so we can declare the FONT_FAMILY variable in one place\nconst EXTRA_STYLES = `:host{--emoji-font-family:${FONT_FAMILY}}`;\n\nclass PickerElement extends HTMLElement {\n constructor (props) {\n super();\n this.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = \":host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.custom-emoji,.emoji,button.emoji{height:var(--total-emoji-size);width:var(--total-emoji-size)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.custom-emoji{padding:var(--emoji-padding);object-fit:contain;pointer-events:none;background-repeat:no-repeat;background-position:center center;background-size:var(--emoji-size) var(--emoji-size)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}\" + EXTRA_STYLES;\n this.shadowRoot.appendChild(style);\n this._ctx = {\n // Set defaults\n locale: DEFAULT_LOCALE,\n dataSource: DEFAULT_DATA_SOURCE,\n skinToneEmoji: DEFAULT_SKIN_TONE_EMOJI,\n customCategorySorting: DEFAULT_CATEGORY_SORTING,\n customEmoji: null,\n i18n: enI18n,\n emojiVersion: null,\n ...props\n };\n // Handle properties set before the element was upgraded\n for (const prop of PROPS) {\n if (prop !== 'database' && Object.prototype.hasOwnProperty.call(this, prop)) {\n this._ctx[prop] = this[prop];\n delete this[prop];\n }\n }\n this._dbFlush(); // wait for a flush before creating the db, in case the user calls e.g. a setter or setAttribute\n }\n\n connectedCallback () {\n // The _cmp may be defined if the component was immediately disconnected and then reconnected. In that case,\n // do nothing (preserve the state)\n if (!this._cmp) {\n this._cmp = new Picker({\n target: this.shadowRoot,\n props: this._ctx\n });\n }\n }\n\n disconnectedCallback () {\n // Check in a microtask if the element is still connected. If so, treat this as a \"move\" rather than a disconnect\n // Inspired by Vue: https://vuejs.org/guide/extras/web-components.html#building-custom-elements-with-vue\n Promise.resolve().then(() => {\n // this._cmp may be defined if connect-disconnect-connect-disconnect occurs synchronously\n if (!this.isConnected && this._cmp) {\n this._cmp.$destroy();\n this._cmp = undefined;\n\n const { database } = this._ctx;\n database.close()\n // only happens if the database failed to load in the first place, so we don't care\n .catch(err => console.error(err));\n }\n });\n }\n\n static get observedAttributes () {\n return ['locale', 'data-source', 'skin-tone-emoji', 'emoji-version'] // complex objects aren't supported, also use kebab-case\n }\n\n attributeChangedCallback (attrName, oldValue, newValue) {\n this._set(\n // convert from kebab-case to camelcase\n // see https://github.com/sveltejs/svelte/issues/3852#issuecomment-665037015\n attrName.replace(/-([a-z])/g, (_, up) => up.toUpperCase()),\n // convert string attribute to float if necessary\n attrName === 'emoji-version' ? parseFloat(newValue) : newValue\n );\n }\n\n _set (prop, newValue) {\n this._ctx[prop] = newValue;\n if (this._cmp) {\n this._cmp.$set({ [prop]: newValue });\n }\n if (['locale', 'dataSource'].includes(prop)) {\n this._dbFlush();\n }\n }\n\n _dbCreate () {\n const { locale, dataSource, database } = this._ctx;\n // only create a new database if we really need to\n if (!database || database.locale !== locale || database.dataSource !== dataSource) {\n this._set('database', new Database({ locale, dataSource }));\n }\n }\n\n // Update the Database in one microtask if the locale/dataSource change. We do one microtask\n // so we don't create two Databases if e.g. both the locale and the dataSource change\n _dbFlush () {\n Promise.resolve().then(() => (\n this._dbCreate()\n ));\n }\n}\n\nconst definitions = {};\n\nfor (const prop of PROPS) {\n definitions[prop] = {\n get () {\n if (prop === 'database') {\n // in rare cases, the microtask may not be flushed yet, so we need to instantiate the DB\n // now if the user is asking for it\n this._dbCreate();\n }\n return this._ctx[prop]\n },\n set (val) {\n if (prop === 'database') {\n throw new Error('database is read-only')\n }\n this._set(prop, val);\n }\n };\n}\n\nObject.defineProperties(PickerElement.prototype, definitions);\n\n/* istanbul ignore else */\nif (!customElements.get('emoji-picker')) { // if already defined, do nothing (e.g. same script imported twice)\n customElements.define('emoji-picker', PickerElement);\n}\n\nexport { PickerElement as default };\n","\n\n\n\n\n","import { render } from \"./AllTreatment.vue?vue&type=template&id=098a0f2d&scoped=true\"\nimport script from \"./AllTreatment.vue?vue&type=script&lang=js\"\nexport * from \"./AllTreatment.vue?vue&type=script&lang=js\"\n\nimport \"./AllTreatment.vue?vue&type=style&index=0&id=098a0f2d&scoped=true&lang=css\"\nimport \"./AllTreatment.vue?vue&type=style&index=1&id=098a0f2d&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\HP\\\\Downloads\\\\better-doctor-customer-portal-main\\\\better-doctor-customer-portal-main\\\\client\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-098a0f2d\"]])\n\nexport default __exports__","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SingleGroupChat.vue?vue&type=style&index=0&id=3a78353c&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AllTreatment.vue?vue&type=style&index=0&id=098a0f2d&scoped=true&lang=css\"","function assertNonEmptyString (str) {\n if (typeof str !== 'string' || !str) {\n throw new Error('expected a non-empty string, got: ' + str)\n }\n}\n\nfunction assertNumber (number) {\n if (typeof number !== 'number') {\n throw new Error('expected a number, got: ' + number)\n }\n}\n\nconst DB_VERSION_CURRENT = 1;\nconst DB_VERSION_INITIAL = 1;\nconst STORE_EMOJI = 'emoji';\nconst STORE_KEYVALUE = 'keyvalue';\nconst STORE_FAVORITES = 'favorites';\nconst FIELD_TOKENS = 'tokens';\nconst INDEX_TOKENS = 'tokens';\nconst FIELD_UNICODE = 'unicode';\nconst INDEX_COUNT = 'count';\nconst FIELD_GROUP = 'group';\nconst FIELD_ORDER = 'order';\nconst INDEX_GROUP_AND_ORDER = 'group-order';\nconst KEY_ETAG = 'eTag';\nconst KEY_URL = 'url';\nconst KEY_PREFERRED_SKINTONE = 'skinTone';\nconst MODE_READONLY = 'readonly';\nconst MODE_READWRITE = 'readwrite';\nconst INDEX_SKIN_UNICODE = 'skinUnicodes';\nconst FIELD_SKIN_UNICODE = 'skinUnicodes';\n\nconst DEFAULT_DATA_SOURCE = 'https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json';\nconst DEFAULT_LOCALE = 'en';\n\n// like lodash's uniqBy but much smaller\nfunction uniqBy (arr, func) {\n const set = new Set();\n const res = [];\n for (const item of arr) {\n const key = func(item);\n if (!set.has(key)) {\n set.add(key);\n res.push(item);\n }\n }\n return res\n}\n\nfunction uniqEmoji (emojis) {\n return uniqBy(emojis, _ => _.unicode)\n}\n\nfunction initialMigration (db) {\n function createObjectStore (name, keyPath, indexes) {\n const store = keyPath\n ? db.createObjectStore(name, { keyPath })\n : db.createObjectStore(name);\n if (indexes) {\n for (const [indexName, [keyPath, multiEntry]] of Object.entries(indexes)) {\n store.createIndex(indexName, keyPath, { multiEntry });\n }\n }\n return store\n }\n\n createObjectStore(STORE_KEYVALUE);\n createObjectStore(STORE_EMOJI, /* keyPath */ FIELD_UNICODE, {\n [INDEX_TOKENS]: [FIELD_TOKENS, /* multiEntry */ true],\n [INDEX_GROUP_AND_ORDER]: [[FIELD_GROUP, FIELD_ORDER]],\n [INDEX_SKIN_UNICODE]: [FIELD_SKIN_UNICODE, /* multiEntry */ true]\n });\n createObjectStore(STORE_FAVORITES, undefined, {\n [INDEX_COUNT]: ['']\n });\n}\n\nconst openIndexedDBRequests = {};\nconst databaseCache = {};\nconst onCloseListeners = {};\n\nfunction handleOpenOrDeleteReq (resolve, reject, req) {\n // These things are almost impossible to test with fakeIndexedDB sadly\n /* istanbul ignore next */\n req.onerror = () => reject(req.error);\n /* istanbul ignore next */\n req.onblocked = () => reject(new Error('IDB blocked'));\n req.onsuccess = () => resolve(req.result);\n}\n\nasync function createDatabase (dbName) {\n const db = await new Promise((resolve, reject) => {\n const req = indexedDB.open(dbName, DB_VERSION_CURRENT);\n openIndexedDBRequests[dbName] = req;\n req.onupgradeneeded = e => {\n // Technically there is only one version, so we don't need this `if` check\n // But if an old version of the JS is in another browser tab\n // and it gets upgraded in the future and we have a new DB version, well...\n // better safe than sorry.\n /* istanbul ignore else */\n if (e.oldVersion < DB_VERSION_INITIAL) {\n initialMigration(req.result);\n }\n };\n handleOpenOrDeleteReq(resolve, reject, req);\n });\n // Handle abnormal closes, e.g. \"delete database\" in chrome dev tools.\n // No need for removeEventListener, because once the DB can no longer\n // fire \"close\" events, it will auto-GC.\n // Unfortunately cannot test in fakeIndexedDB: https://github.com/dumbmatter/fakeIndexedDB/issues/50\n /* istanbul ignore next */\n db.onclose = () => closeDatabase(dbName);\n return db\n}\n\nfunction openDatabase (dbName) {\n if (!databaseCache[dbName]) {\n databaseCache[dbName] = createDatabase(dbName);\n }\n return databaseCache[dbName]\n}\n\nfunction dbPromise (db, storeName, readOnlyOrReadWrite, cb) {\n return new Promise((resolve, reject) => {\n // Use relaxed durability because neither the emoji data nor the favorites/preferred skin tone\n // are really irreplaceable data. IndexedDB is just a cache in this case.\n const txn = db.transaction(storeName, readOnlyOrReadWrite, { durability: 'relaxed' });\n const store = typeof storeName === 'string'\n ? txn.objectStore(storeName)\n : storeName.map(name => txn.objectStore(name));\n let res;\n cb(store, txn, (result) => {\n res = result;\n });\n\n txn.oncomplete = () => resolve(res);\n /* istanbul ignore next */\n txn.onerror = () => reject(txn.error);\n })\n}\n\nfunction closeDatabase (dbName) {\n // close any open requests\n const req = openIndexedDBRequests[dbName];\n const db = req && req.result;\n if (db) {\n db.close();\n const listeners = onCloseListeners[dbName];\n /* istanbul ignore else */\n if (listeners) {\n for (const listener of listeners) {\n listener();\n }\n }\n }\n delete openIndexedDBRequests[dbName];\n delete databaseCache[dbName];\n delete onCloseListeners[dbName];\n}\n\nfunction deleteDatabase (dbName) {\n return new Promise((resolve, reject) => {\n // close any open requests\n closeDatabase(dbName);\n const req = indexedDB.deleteDatabase(dbName);\n handleOpenOrDeleteReq(resolve, reject, req);\n })\n}\n\n// The \"close\" event occurs during an abnormal shutdown, e.g. a user clearing their browser data.\n// However, it doesn't occur with the normal \"close\" event, so we handle that separately.\n// https://www.w3.org/TR/IndexedDB/#close-a-database-connection\nfunction addOnCloseListener (dbName, listener) {\n let listeners = onCloseListeners[dbName];\n if (!listeners) {\n listeners = onCloseListeners[dbName] = [];\n }\n listeners.push(listener);\n}\n\n// list of emoticons that don't match a simple \\W+ regex\n// extracted using:\n// require('emoji-picker-element-data/en/emojibase/data.json').map(_ => _.emoticon).filter(Boolean).filter(_ => !/^\\W+$/.test(_))\nconst irregularEmoticons = new Set([\n ':D', 'XD', \":'D\", 'O:)',\n ':X', ':P', ';P', 'XP',\n ':L', ':Z', ':j', '8D',\n 'XO', '8)', ':B', ':O',\n ':S', \":'o\", 'Dx', 'X(',\n 'D:', ':C', '>0)', ':3',\n ' {\n if (!word.match(/\\w/) || irregularEmoticons.has(word)) {\n // for pure emoticons like :) or :-), just leave them as-is\n return word.toLowerCase()\n }\n\n return word\n .replace(/[)(:,]/g, '')\n .replace(/’/g, \"'\")\n .toLowerCase()\n }).filter(Boolean)\n}\n\nconst MIN_SEARCH_TEXT_LENGTH = 2;\n\n// This is an extra step in addition to extractTokens(). The difference here is that we expect\n// the input to have already been run through extractTokens(). This is useful for cases like\n// emoticons, where we don't want to do any tokenization (because it makes no sense to split up\n// \">:)\" by the colon) but we do want to lowercase it to have consistent search results, so that\n// the user can type ':P' or ':p' and still get the same result.\nfunction normalizeTokens (str) {\n return str\n .filter(Boolean)\n .map(_ => _.toLowerCase())\n .filter(_ => _.length >= MIN_SEARCH_TEXT_LENGTH)\n}\n\n// Transform emoji data for storage in IDB\nfunction transformEmojiData (emojiData) {\n const res = emojiData.map(({ annotation, emoticon, group, order, shortcodes, skins, tags, emoji, version }) => {\n const tokens = [...new Set(\n normalizeTokens([\n ...(shortcodes || []).map(extractTokens).flat(),\n ...tags.map(extractTokens).flat(),\n ...extractTokens(annotation),\n emoticon\n ])\n )].sort();\n const res = {\n annotation,\n group,\n order,\n tags,\n tokens,\n unicode: emoji,\n version\n };\n if (emoticon) {\n res.emoticon = emoticon;\n }\n if (shortcodes) {\n res.shortcodes = shortcodes;\n }\n if (skins) {\n res.skinTones = [];\n res.skinUnicodes = [];\n res.skinVersions = [];\n for (const { tone, emoji, version } of skins) {\n res.skinTones.push(tone);\n res.skinUnicodes.push(emoji);\n res.skinVersions.push(version);\n }\n }\n return res\n });\n return res\n}\n\n// helper functions that help compress the code better\n\nfunction callStore (store, method, key, cb) {\n store[method](key).onsuccess = e => (cb && cb(e.target.result));\n}\n\nfunction getIDB (store, key, cb) {\n callStore(store, 'get', key, cb);\n}\n\nfunction getAllIDB (store, key, cb) {\n callStore(store, 'getAll', key, cb);\n}\n\nfunction commit (txn) {\n /* istanbul ignore else */\n if (txn.commit) {\n txn.commit();\n }\n}\n\n// like lodash's minBy\nfunction minBy (array, func) {\n let minItem = array[0];\n for (let i = 1; i < array.length; i++) {\n const item = array[i];\n if (func(minItem) > func(item)) {\n minItem = item;\n }\n }\n return minItem\n}\n\n// return an array of results representing all items that are found in each one of the arrays\n//\n\nfunction findCommonMembers (arrays, uniqByFunc) {\n const shortestArray = minBy(arrays, _ => _.length);\n const results = [];\n for (const item of shortestArray) {\n // if this item is included in every array in the intermediate results, add it to the final results\n if (!arrays.some(array => array.findIndex(_ => uniqByFunc(_) === uniqByFunc(item)) === -1)) {\n results.push(item);\n }\n }\n return results\n}\n\nasync function isEmpty (db) {\n return !(await get(db, STORE_KEYVALUE, KEY_URL))\n}\n\nasync function hasData (db, url, eTag) {\n const [oldETag, oldUrl] = await Promise.all([KEY_ETAG, KEY_URL]\n .map(key => get(db, STORE_KEYVALUE, key)));\n return (oldETag === eTag && oldUrl === url)\n}\n\nasync function doFullDatabaseScanForSingleResult (db, predicate) {\n // This batching algorithm is just a perf improvement over a basic\n // cursor. The BATCH_SIZE is an estimate of what would give the best\n // perf for doing a full DB scan (worst case).\n //\n // Mini-benchmark for determining the best batch size:\n //\n // PERF=1 yarn build:rollup && yarn test:adhoc\n //\n // (async () => {\n // performance.mark('start')\n // await $('emoji-picker').database.getEmojiByShortcode('doesnotexist')\n // performance.measure('total', 'start')\n // console.log(performance.getEntriesByName('total').slice(-1)[0].duration)\n // })()\n const BATCH_SIZE = 50; // Typically around 150ms for 6x slowdown in Chrome for above benchmark\n return dbPromise(db, STORE_EMOJI, MODE_READONLY, (emojiStore, txn, cb) => {\n let lastKey;\n\n const processNextBatch = () => {\n emojiStore.getAll(lastKey && IDBKeyRange.lowerBound(lastKey, true), BATCH_SIZE).onsuccess = e => {\n const results = e.target.result;\n for (const result of results) {\n lastKey = result.unicode;\n if (predicate(result)) {\n return cb(result)\n }\n }\n if (results.length < BATCH_SIZE) {\n return cb()\n }\n processNextBatch();\n };\n };\n processNextBatch();\n })\n}\n\nasync function loadData (db, emojiData, url, eTag) {\n try {\n const transformedData = transformEmojiData(emojiData);\n await dbPromise(db, [STORE_EMOJI, STORE_KEYVALUE], MODE_READWRITE, ([emojiStore, metaStore], txn) => {\n let oldETag;\n let oldUrl;\n let todo = 0;\n\n function checkFetched () {\n if (++todo === 2) { // 2 requests made\n onFetched();\n }\n }\n\n function onFetched () {\n if (oldETag === eTag && oldUrl === url) {\n // check again within the transaction to guard against concurrency, e.g. multiple browser tabs\n return\n }\n // delete old data\n emojiStore.clear();\n // insert new data\n for (const data of transformedData) {\n emojiStore.put(data);\n }\n metaStore.put(eTag, KEY_ETAG);\n metaStore.put(url, KEY_URL);\n commit(txn);\n }\n\n getIDB(metaStore, KEY_ETAG, result => {\n oldETag = result;\n checkFetched();\n });\n\n getIDB(metaStore, KEY_URL, result => {\n oldUrl = result;\n checkFetched();\n });\n });\n } finally {\n }\n}\n\nasync function getEmojiByGroup (db, group) {\n return dbPromise(db, STORE_EMOJI, MODE_READONLY, (emojiStore, txn, cb) => {\n const range = IDBKeyRange.bound([group, 0], [group + 1, 0], false, true);\n getAllIDB(emojiStore.index(INDEX_GROUP_AND_ORDER), range, cb);\n })\n}\n\nasync function getEmojiBySearchQuery (db, query) {\n const tokens = normalizeTokens(extractTokens(query));\n\n if (!tokens.length) {\n return []\n }\n\n return dbPromise(db, STORE_EMOJI, MODE_READONLY, (emojiStore, txn, cb) => {\n // get all results that contain all tokens (i.e. an AND query)\n const intermediateResults = [];\n\n const checkDone = () => {\n if (intermediateResults.length === tokens.length) {\n onDone();\n }\n };\n\n const onDone = () => {\n const results = findCommonMembers(intermediateResults, _ => _.unicode);\n cb(results.sort((a, b) => a.order < b.order ? -1 : 1));\n };\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const range = i === tokens.length - 1\n ? IDBKeyRange.bound(token, token + '\\uffff', false, true) // treat last token as a prefix search\n : IDBKeyRange.only(token); // treat all other tokens as an exact match\n getAllIDB(emojiStore.index(INDEX_TOKENS), range, result => {\n intermediateResults.push(result);\n checkDone();\n });\n }\n })\n}\n\n// This could have been implemented as an IDB index on shortcodes, but it seemed wasteful to do that\n// when we can already query by tokens and this will give us what we're looking for 99.9% of the time\nasync function getEmojiByShortcode (db, shortcode) {\n const emojis = await getEmojiBySearchQuery(db, shortcode);\n\n // In very rare cases (e.g. the shortcode \"v\" as in \"v for victory\"), we cannot search because\n // there are no usable tokens (too short in this case). In that case, we have to do an inefficient\n // full-database scan, which I believe is an acceptable tradeoff for not having to have an extra\n // index on shortcodes.\n\n if (!emojis.length) {\n const predicate = _ => ((_.shortcodes || []).includes(shortcode.toLowerCase()));\n return (await doFullDatabaseScanForSingleResult(db, predicate)) || null\n }\n\n return emojis.filter(_ => {\n const lowerShortcodes = (_.shortcodes || []).map(_ => _.toLowerCase());\n return lowerShortcodes.includes(shortcode.toLowerCase())\n })[0] || null\n}\n\nasync function getEmojiByUnicode (db, unicode) {\n return dbPromise(db, STORE_EMOJI, MODE_READONLY, (emojiStore, txn, cb) => (\n getIDB(emojiStore, unicode, result => {\n if (result) {\n return cb(result)\n }\n getIDB(emojiStore.index(INDEX_SKIN_UNICODE), unicode, result => cb(result || null));\n })\n ))\n}\n\nfunction get (db, storeName, key) {\n return dbPromise(db, storeName, MODE_READONLY, (store, txn, cb) => (\n getIDB(store, key, cb)\n ))\n}\n\nfunction set (db, storeName, key, value) {\n return dbPromise(db, storeName, MODE_READWRITE, (store, txn) => {\n store.put(value, key);\n commit(txn);\n })\n}\n\nfunction incrementFavoriteEmojiCount (db, unicode) {\n return dbPromise(db, STORE_FAVORITES, MODE_READWRITE, (store, txn) => (\n getIDB(store, unicode, result => {\n store.put((result || 0) + 1, unicode);\n commit(txn);\n })\n ))\n}\n\nfunction getTopFavoriteEmoji (db, customEmojiIndex, limit) {\n if (limit === 0) {\n return []\n }\n return dbPromise(db, [STORE_FAVORITES, STORE_EMOJI], MODE_READONLY, ([favoritesStore, emojiStore], txn, cb) => {\n const results = [];\n favoritesStore.index(INDEX_COUNT).openCursor(undefined, 'prev').onsuccess = e => {\n const cursor = e.target.result;\n if (!cursor) { // no more results\n return cb(results)\n }\n\n function addResult (result) {\n results.push(result);\n if (results.length === limit) {\n return cb(results) // done, reached the limit\n }\n cursor.continue();\n }\n\n const unicodeOrName = cursor.primaryKey;\n const custom = customEmojiIndex.byName(unicodeOrName);\n if (custom) {\n return addResult(custom)\n }\n // This could be done in parallel (i.e. make the cursor and the get()s parallelized),\n // but my testing suggests it's not actually faster.\n getIDB(emojiStore, unicodeOrName, emoji => {\n if (emoji) {\n return addResult(emoji)\n }\n // emoji not found somehow, ignore (may happen if custom emoji change)\n cursor.continue();\n });\n };\n })\n}\n\n// trie data structure for prefix searches\n// loosely based on https://github.com/nolanlawson/substring-trie\n\nconst CODA_MARKER = ''; // marks the end of the string\n\nfunction trie (arr, itemToTokens) {\n const map = new Map();\n for (const item of arr) {\n const tokens = itemToTokens(item);\n for (const token of tokens) {\n let currentMap = map;\n for (let i = 0; i < token.length; i++) {\n const char = token.charAt(i);\n let nextMap = currentMap.get(char);\n if (!nextMap) {\n nextMap = new Map();\n currentMap.set(char, nextMap);\n }\n currentMap = nextMap;\n }\n let valuesAtCoda = currentMap.get(CODA_MARKER);\n if (!valuesAtCoda) {\n valuesAtCoda = [];\n currentMap.set(CODA_MARKER, valuesAtCoda);\n }\n valuesAtCoda.push(item);\n }\n }\n\n const search = (query, exact) => {\n let currentMap = map;\n for (let i = 0; i < query.length; i++) {\n const char = query.charAt(i);\n const nextMap = currentMap.get(char);\n if (nextMap) {\n currentMap = nextMap;\n } else {\n return []\n }\n }\n\n if (exact) {\n const results = currentMap.get(CODA_MARKER);\n return results || []\n }\n\n const results = [];\n // traverse\n const queue = [currentMap];\n while (queue.length) {\n const currentMap = queue.shift();\n const entriesSortedByKey = [...currentMap.entries()].sort((a, b) => a[0] < b[0] ? -1 : 1);\n for (const [key, value] of entriesSortedByKey) {\n if (key === CODA_MARKER) { // CODA_MARKER always comes first; it's the empty string\n results.push(...value);\n } else {\n queue.push(value);\n }\n }\n }\n return results\n };\n\n return search\n}\n\nconst requiredKeys$1 = [\n 'name',\n 'url'\n];\n\nfunction assertCustomEmojis (customEmojis) {\n const isArray = customEmojis && Array.isArray(customEmojis);\n const firstItemIsFaulty = isArray &&\n customEmojis.length &&\n (!customEmojis[0] || requiredKeys$1.some(key => !(key in customEmojis[0])));\n if (!isArray || firstItemIsFaulty) {\n throw new Error('Custom emojis are in the wrong format')\n }\n}\n\nfunction customEmojiIndex (customEmojis) {\n assertCustomEmojis(customEmojis);\n\n const sortByName = (a, b) => a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1;\n\n //\n // all()\n //\n const all = customEmojis.sort(sortByName);\n\n //\n // search()\n //\n const emojiToTokens = emoji => (\n [...new Set((emoji.shortcodes || []).map(shortcode => extractTokens(shortcode)).flat())]\n );\n const searchTrie = trie(customEmojis, emojiToTokens);\n const searchByExactMatch = _ => searchTrie(_, true);\n const searchByPrefix = _ => searchTrie(_, false);\n\n // Search by query for custom emoji. Similar to how we do this in IDB, the last token\n // is treated as a prefix search, but every other one is treated as an exact match.\n // Then we AND the results together\n const search = query => {\n const tokens = extractTokens(query);\n const intermediateResults = tokens.map((token, i) => (\n (i < tokens.length - 1 ? searchByExactMatch : searchByPrefix)(token)\n ));\n return findCommonMembers(intermediateResults, _ => _.name).sort(sortByName)\n };\n\n //\n // byShortcode, byName\n //\n const shortcodeToEmoji = new Map();\n const nameToEmoji = new Map();\n for (const customEmoji of customEmojis) {\n nameToEmoji.set(customEmoji.name.toLowerCase(), customEmoji);\n for (const shortcode of (customEmoji.shortcodes || [])) {\n shortcodeToEmoji.set(shortcode.toLowerCase(), customEmoji);\n }\n }\n\n const byShortcode = shortcode => shortcodeToEmoji.get(shortcode.toLowerCase());\n const byName = name => nameToEmoji.get(name.toLowerCase());\n\n return {\n all,\n search,\n byShortcode,\n byName\n }\n}\n\nconst isFirefoxContentScript = typeof wrappedJSObject !== 'undefined';\n\n// remove some internal implementation details, i.e. the \"tokens\" array on the emoji object\n// essentially, convert the emoji from the version stored in IDB to the version used in-memory\nfunction cleanEmoji (emoji) {\n if (!emoji) {\n return emoji\n }\n // if inside a Firefox content script, need to clone the emoji object to prevent Firefox from complaining about\n // cross-origin object. See: https://github.com/nolanlawson/emoji-picker-element/issues/356\n /* istanbul ignore if */\n if (isFirefoxContentScript) {\n emoji = structuredClone(emoji);\n }\n delete emoji.tokens;\n if (emoji.skinTones) {\n const len = emoji.skinTones.length;\n emoji.skins = Array(len);\n for (let i = 0; i < len; i++) {\n emoji.skins[i] = {\n tone: emoji.skinTones[i],\n unicode: emoji.skinUnicodes[i],\n version: emoji.skinVersions[i]\n };\n }\n delete emoji.skinTones;\n delete emoji.skinUnicodes;\n delete emoji.skinVersions;\n }\n return emoji\n}\n\nfunction warnETag (eTag) {\n if (!eTag) {\n console.warn('emoji-picker-element is more efficient if the dataSource server exposes an ETag header.');\n }\n}\n\nconst requiredKeys = [\n 'annotation',\n 'emoji',\n 'group',\n 'order',\n 'tags',\n 'version'\n];\n\nfunction assertEmojiData (emojiData) {\n if (!emojiData ||\n !Array.isArray(emojiData) ||\n !emojiData[0] ||\n (typeof emojiData[0] !== 'object') ||\n requiredKeys.some(key => (!(key in emojiData[0])))) {\n throw new Error('Emoji data is in the wrong format')\n }\n}\n\nfunction assertStatus (response, dataSource) {\n if (Math.floor(response.status / 100) !== 2) {\n throw new Error('Failed to fetch: ' + dataSource + ': ' + response.status)\n }\n}\n\nasync function getETag (dataSource) {\n const response = await fetch(dataSource, { method: 'HEAD' });\n assertStatus(response, dataSource);\n const eTag = response.headers.get('etag');\n warnETag(eTag);\n return eTag\n}\n\nasync function getETagAndData (dataSource) {\n const response = await fetch(dataSource);\n assertStatus(response, dataSource);\n const eTag = response.headers.get('etag');\n warnETag(eTag);\n const emojiData = await response.json();\n assertEmojiData(emojiData);\n return [eTag, emojiData]\n}\n\n// TODO: including these in blob-util.ts causes typedoc to generate docs for them,\n// even with --excludePrivate ¯\\_(ツ)_/¯\n/** @private */\n/**\n * Convert an `ArrayBuffer` to a binary string.\n *\n * Example:\n *\n * ```js\n * var myString = blobUtil.arrayBufferToBinaryString(arrayBuff)\n * ```\n *\n * @param buffer - array buffer\n * @returns binary string\n */\nfunction arrayBufferToBinaryString(buffer) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var length = bytes.byteLength;\n var i = -1;\n while (++i < length) {\n binary += String.fromCharCode(bytes[i]);\n }\n return binary;\n}\n/**\n * Convert a binary string to an `ArrayBuffer`.\n *\n * ```js\n * var myBuffer = blobUtil.binaryStringToArrayBuffer(binaryString)\n * ```\n *\n * @param binary - binary string\n * @returns array buffer\n */\nfunction binaryStringToArrayBuffer(binary) {\n var length = binary.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n var i = -1;\n while (++i < length) {\n arr[i] = binary.charCodeAt(i);\n }\n return buf;\n}\n\n// generate a checksum based on the stringified JSON\nasync function jsonChecksum (object) {\n const inString = JSON.stringify(object);\n const inBuffer = binaryStringToArrayBuffer(inString);\n // this does not need to be cryptographically secure, SHA-1 is fine\n const outBuffer = await crypto.subtle.digest('SHA-1', inBuffer);\n const outBinString = arrayBufferToBinaryString(outBuffer);\n const res = btoa(outBinString);\n return res\n}\n\nasync function checkForUpdates (db, dataSource) {\n // just do a simple HEAD request first to see if the eTags match\n let emojiData;\n let eTag = await getETag(dataSource);\n if (!eTag) { // work around lack of ETag/Access-Control-Expose-Headers\n const eTagAndData = await getETagAndData(dataSource);\n eTag = eTagAndData[0];\n emojiData = eTagAndData[1];\n if (!eTag) {\n eTag = await jsonChecksum(emojiData);\n }\n }\n if (await hasData(db, dataSource, eTag)) ; else {\n if (!emojiData) {\n const eTagAndData = await getETagAndData(dataSource);\n emojiData = eTagAndData[1];\n }\n await loadData(db, emojiData, dataSource, eTag);\n }\n}\n\nasync function loadDataForFirstTime (db, dataSource) {\n let [eTag, emojiData] = await getETagAndData(dataSource);\n if (!eTag) {\n // Handle lack of support for ETag or Access-Control-Expose-Headers\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers#Browser_compatibility\n eTag = await jsonChecksum(emojiData);\n }\n\n await loadData(db, emojiData, dataSource, eTag);\n}\n\nclass Database {\n constructor ({ dataSource = DEFAULT_DATA_SOURCE, locale = DEFAULT_LOCALE, customEmoji = [] } = {}) {\n this.dataSource = dataSource;\n this.locale = locale;\n this._dbName = `emoji-picker-element-${this.locale}`;\n this._db = undefined;\n this._lazyUpdate = undefined;\n this._custom = customEmojiIndex(customEmoji);\n\n this._clear = this._clear.bind(this);\n this._ready = this._init();\n }\n\n async _init () {\n const db = this._db = await openDatabase(this._dbName);\n\n addOnCloseListener(this._dbName, this._clear);\n const dataSource = this.dataSource;\n const empty = await isEmpty(db);\n\n if (empty) {\n await loadDataForFirstTime(db, dataSource);\n } else { // offline-first - do an update asynchronously\n this._lazyUpdate = checkForUpdates(db, dataSource);\n }\n }\n\n async ready () {\n const checkReady = async () => {\n if (!this._ready) {\n this._ready = this._init();\n }\n return this._ready\n };\n await checkReady();\n // There's a possibility of a race condition where the element gets added, removed, and then added again\n // with a particular timing, which would set the _db to undefined.\n // We *could* do a while loop here, but that seems excessive and could lead to an infinite loop.\n if (!this._db) {\n await checkReady();\n }\n }\n\n async getEmojiByGroup (group) {\n assertNumber(group);\n await this.ready();\n return uniqEmoji(await getEmojiByGroup(this._db, group)).map(cleanEmoji)\n }\n\n async getEmojiBySearchQuery (query) {\n assertNonEmptyString(query);\n await this.ready();\n const customs = this._custom.search(query);\n const natives = uniqEmoji(await getEmojiBySearchQuery(this._db, query)).map(cleanEmoji);\n return [\n ...customs,\n ...natives\n ]\n }\n\n async getEmojiByShortcode (shortcode) {\n assertNonEmptyString(shortcode);\n await this.ready();\n const custom = this._custom.byShortcode(shortcode);\n if (custom) {\n return custom\n }\n return cleanEmoji(await getEmojiByShortcode(this._db, shortcode))\n }\n\n async getEmojiByUnicodeOrName (unicodeOrName) {\n assertNonEmptyString(unicodeOrName);\n await this.ready();\n const custom = this._custom.byName(unicodeOrName);\n if (custom) {\n return custom\n }\n return cleanEmoji(await getEmojiByUnicode(this._db, unicodeOrName))\n }\n\n async getPreferredSkinTone () {\n await this.ready();\n return (await get(this._db, STORE_KEYVALUE, KEY_PREFERRED_SKINTONE)) || 0\n }\n\n async setPreferredSkinTone (skinTone) {\n assertNumber(skinTone);\n await this.ready();\n return set(this._db, STORE_KEYVALUE, KEY_PREFERRED_SKINTONE, skinTone)\n }\n\n async incrementFavoriteEmojiCount (unicodeOrName) {\n assertNonEmptyString(unicodeOrName);\n await this.ready();\n return incrementFavoriteEmojiCount(this._db, unicodeOrName)\n }\n\n async getTopFavoriteEmoji (limit) {\n assertNumber(limit);\n await this.ready();\n return (await getTopFavoriteEmoji(this._db, this._custom, limit)).map(cleanEmoji)\n }\n\n set customEmoji (customEmojis) {\n this._custom = customEmojiIndex(customEmojis);\n }\n\n get customEmoji () {\n return this._custom.all\n }\n\n async _shutdown () {\n await this.ready(); // reopen if we've already been closed/deleted\n try {\n await this._lazyUpdate; // allow any lazy updates to process before closing/deleting\n } catch (err) { /* ignore network errors (offline-first) */ }\n }\n\n // clear references to IDB, e.g. during a close event\n _clear () {\n // We don't need to call removeEventListener or remove the manual \"close\" listeners.\n // The memory leak tests prove this is unnecessary. It's because:\n // 1) IDBDatabases that can no longer fire \"close\" automatically have listeners GCed\n // 2) we clear the manual close listeners in databaseLifecycle.js.\n this._db = this._ready = this._lazyUpdate = undefined;\n }\n\n async close () {\n await this._shutdown();\n await closeDatabase(this._dbName);\n }\n\n async delete () {\n await this._shutdown();\n await deleteDatabase(this._dbName);\n }\n}\n\nexport { Database as default };\n","module.exports = __webpack_public_path__ + \"img/chat-auth.80dc20d8.png\";"],"sourceRoot":""}