{"version":3,"sources":["webpack:///./src/mixins/chat.js","webpack:///./src/assets/avatar-male.png","webpack:///./src/pages/Message/Room/Room.vue?d84b","webpack:///./node_modules/emoji-picker-element/picker.js","webpack:///./node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./src/pages/Message/Room/Room.vue?6464","webpack:///./node_modules/@vue/composition-api/dist/vue-composition-api.esm.js","webpack:///./node_modules/vuemoji-picker/node_modules/vue-demi/lib/index.mjs","webpack:///./node_modules/vuemoji-picker/dist/vuemoji-picker.esm.js","webpack:///./src/pages/Message/Room/room.js","webpack:///./src/pages/Message/Room/room.js?2af5","webpack:///./src/pages/Message/Room/Room.vue","webpack:///./src/assets/people-group-white.png","webpack:///./node_modules/v-click-outside/dist/v-click-outside.umd.js","webpack:///./node_modules/emoji-picker-element/database.js","webpack:///./src/assets/house-heart-white.png"],"names":["methods","isScriptTag","text","regex","match","detectUrlString","str","urlRegex","RegExp","module","exports","noop","run","fn","blank_object","Object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","src_url_equal_anchor","current_component","src_url_equal","element_src","url","document","createElement","href","is_empty","obj","keys","length","action_destroyer","action_result","destroy","append","target","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","element","name","data","createTextNode","listen","event","handler","options","addEventListener","removeEventListener","attr","attribute","value","removeAttribute","getAttribute","setAttribute","set_data","wholeText","set_input_value","input","set_style","key","important","style","setProperty","set_current_component","component","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","schedule_update","then","flush","tick","add_render_callback","push","flushing","seen_callbacks","Set","i","update","$$","pop","callback","has","add","clear","fragment","before_update","dirty","p","ctx","after_update","outroing","transition_in","block","local","delete","globals","window","globalThis","global","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","child_ctx","get","c","set","Math","abs","will_move","did_move","m","first","new_block","old_block","new_key","old_key","mount_component","customElement","on_mount","on_destroy","new_on_destroy","map","filter","destroy_component","detaching","make_dirty","fill","init","instance","create_fragment","not_equal","props","append_styles","parent_component","bound","on_disconnect","context","callbacks","skip_bound","root","ready","ret","rest","intro","SvelteComponent","this","$destroy","type","index","indexOf","splice","$$props","$$set","allGroups","id","emoji","groups","slice","customGroup","MIN_SEARCH_TEXT_LENGTH","NUM_SKIN_TONES","rIC","requestIdleCallback","setTimeout","hasZwj","unicode","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","width","height","getContext","textBaseline","font","fillStyle","scale","fillText","getImageData","compareFeatures","feature1","feature2","feature1Str","join","feature2Str","startsWith","testColorEmojiSupported","determineEmojiSupportLevel","entries","version","e","emojiSupportLevelPromise","supportedZwjEmojis","VARIATION_SELECTOR","SKINTONE_MODIFIER","ZWJ","LIGHT_SKIN_TONE","LIGHT_SKIN_TONE_MODIFIER","applySkinTone","skinTone","zwjIndex","substring","String","fromCodePoint","endsWith","halt","preventDefault","stopPropagation","incrementOrDecrement","decrement","val","arr","uniqBy","func","res","item","summarizeEmojisForUI","emojis","emojiSupportLevel","toSimpleSkinsMap","skins","skin","tone","shortcodes","category","title","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","_","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","img_src_value","src","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","message","skinToneDropdown","skinToneButtonText","pickerStyle","defaultFavoriteEmojis","currentGroup","activeSearchItemId","skinToneEmoji","i18n","database","customEmoji","customCategorySorting","initialLoad","currentEmojis","currentEmojisWithCategories","rawSearchText","searchText","searchMode","activeSearchItem","skinTonePickerExpanded","skinTonePickerExpandedAfterAnimation","currentSkinTone","activeSkinTone","skinToneButtonLabel","currentFavorites","numColumns","isRtl","scrollbarWidth","currentGroupIndex","groups$1","databaseLoaded","focus","getRootNode","getElementById","fireEvent","detail","dispatchEvent","CustomEvent","bubbles","composed","unicodeWithSkin","labelWithSkin","isSkinToneOption","test","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","onEmojiClick","classList","contains","onSkinToneOptionsClick","setPreferredSkinTone","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","console","error","networkErrorMessage","clearTimeout","trim","updateEmojis","currentSearchText","newEmojis","currentGroupId","updatePreferredSkinTone","getPreferredSkinTone","Array","skinToneLabel","replace","updateDefaultFavoriteEmojis","all","Boolean","updateFavorites","dbFavorites","getTopFavoriteEmoji","favorites","scrollTop","calculateCurrentEmojisWithCategories","categoriesToEmoji","sort","once","Picker","super","DEFAULT_DATA_SOURCE","DEFAULT_LOCALE","enI18n","activities","objects","symbols","flags","PROPS","PickerElement","HTMLElement","attachShadow","mode","shadowRoot","_ctx","locale","dataSource","prop","prototype","hasOwnProperty","_dbFlush","_cmp","undefined","close","catch","attrName","oldValue","newValue","_set","up","toUpperCase","$set","_dbCreate","definitions","Error","defineProperties","customElements","define","$export","$at","P","codePointAt","pos","render","_vm","_h","$createElement","_c","_self","staticClass","staticStyle","class","isAgency","attrs","_v","_s","roomTitle","directives","rawName","modifiers","chatContent","always","expression","ref","chatBoxHeight","on","$event","resetModal","apply","arguments","_l","content","refInFor","displayTime","loadingChatDetail","_f","_e","numberUnreadMessage","indexUnreadMessage","$t","showOptionIndex","deleted","showConfirmPopup","onClickUnreadIcon","showReactBox","getSentTime","sentAt","file","filePath","preview","domProps","reactions","react","showReactList","currentReactMsgHover","checkIsPending","status","chatMsgStatus","DELETE_FOR_ALL","border","marginBottom","background","padding","userInfo","isShowAgencyBanner","previewImgs","removePreviewImg","$refs","uploadFile","click","agencyPhone","sendMsg","onReadMessage","onFocusSendMessageInput","handleEnter","onchangeMessage","model","$$v","_uploadFile","showEmojiBox","selectEmoji","openEmojiBox","isShowReactBox","reactMsg","isShowMarkUnreadBox","onMarkUnread","scopedSlots","_u","proxy","picture","getDefaultImg","formatPersonName","$bvModal","hide","alert","confirmPopup","onConfirmPopup","submitBtn","hideModal","closeBtn","staticRenderFns","extendStatics","setPrototypeOf","__proto__","__extends","TypeError","__","constructor","activeEffectScope","__values","s","Symbol","iterator","done","__read","r","ar","__spreadArray","to","from","pack","l","concat","effectScopeStack","EffectScopeImpl","vm","active","effects","cleanups","off","stop","cleanup","_super","EffectScope","detached","_this","withCurrentInstanceTrackingDisabled","defineComponentInstance","getVueConstructor","recordEffectScope","effect","scope","_a","getCurrentInstance","$on","bindCurrentScopeToVM","scope_1","vueDependency","requiredVue","isVue","default","vueConstructor","currentInstance","currentInstanceTracking","PluginInstalledFlag","isFunction","isVueRegistered","Vue","hasOwn","getRegisteredVueOrDefault","setVueConstructor","defineProperty","configurable","writable","prev","setCurrentInstance","instanceMapCache","WeakMap","toVue3ComponentInstance","$forceUpdate","$options","uid","_uid","emit","$emit","bind","parent","instanceProps","_isMounted","_isDestroyed","_inactive","_events","$parent","$root","x","toString","isNative","Ctor","hasSymbol","Reflect","ownKeys","noopFn","enumerable","def","isArray","MAX_VALID_ARRAY_LENGTH","isValidArrayIndex","parseFloat","floor","isFinite","isObject","isPlainObject","getCurrentInstanceForFn","hook","silent","config","isComponentInstance","createSlotProxy","slotName","args","_i","$scopedSlots","resolveSlots","slots","normalSlots","_normalized","createSymbol","for","RefKey","accessModifiedSet","readonlySet","set$1","util","defineReactive","warn","ob","__ob__","ssrMockReactivity","mockReactivityDeep","max","dep","notify","_isVue","vmCount","defineAccessControl","RefImpl","createRef","isReadonly","isComputed","sealed","seal","raw","isRef","reactive","v","toRefs","toRef","object","SKIPFLAG","isRaw","isReactive","setupAccessControl","getter","setter","property","getOwnPropertyDescriptor","newVal","observed","observable","$$state","_data","seen","e_1","isExtensible","mockObserver","_b","e_1_1","return","depend","addSub","removeSub","createObserver","genName","createLifeCycle","lifeCyclehook","injectHookOption","mergeFn","optionMergeStrategies","wrappedHook","wrapHookCall","fallbackCreateElement","state","__composition_api_state__","vmStateManager","asVmProperty","propName","propValue","updateTemplateRef","rawBindings","refs","oldRefKeys","setupValue","newKeys","validNewKeys","afterRender","stack","_vnode","vnode","children","updateVmAttrs","attrBindings","observedData","source","$attrs","_loop_1","resolveScopedSlots","slotsProxy","parentVNode","_parentVnode","prevSlots","curSlots","$slots","slotNames","activateCurrentInstance","onError","preVm","mixin","functionApiInit","setup","initSetup","$props","binding","createSetupContext","setupContext","bindingFunc_1","bindingObj_1","bindingValue","copy_1","ele","hasReactiveArrayChild","customReactive","k","visited","some","propsPlain","methodReturnVoid","srcKey","beforeCreate","beforeUpdate","updated","mergeData","toVal","fromVal","install","child","Plugin","defineComponent","_vue","use","isVue2","Vue2","__rest","getOwnPropertySymbols","propertyIsEnumerable","adaptOnsV3","ons","reduce","charAt","assign","h","chidren","extraOptions","params","isDarkMode","matchMedia","matches","toDashes","toLowerCase","ignoredElements","VuemojiPicker","isDark","required","Function","emits","picker","toggle","updatePickerStyle","updatePickerProps","handleClick","handleSkinToneChange","watch","deep","useDatabase","moment","require","rootRef","FIREBASE_ROOT_REF","refMessage","mixins","chat","Utils","vClickOutside","isFocusSendMessageInput","arrayUnreadMessageIndex","isUserStayThanDurationTime","isFirstNewMessage","currentMsg","currentMsgIndex","currentMarkUnreadKey","currentAction","reactArr","lastMessageKey","components","info","immediate","oldVal","isFirstOpenRoomchat","scrollToBottom","updateUnreadMessage","unreadConversation","unreadMessageArray","isScrollTop","isChangeMessage","currentUnreadMessageKey","unreadMessageIndex","scrollToElement","isSelectedRoomchat","isOpenRoomChat","numberInterval","chatSettings","durationUnread","inputMessage","getMyAgency","destroyed","computed","mapGetters","ROOM_TYPE","AGENCY","defaultHeight","description","mainName","agencyName","participants","members","member","firebasePath","idFirebase","infoContent","pendingMsgs","userIdFirebase","mess","msgIndex","isMine","roomId","userId","JSON","parse","localStorage","getItem","pkAdv","userCrfId","pkCrf","CHAT_MSG_STATUS","reactEmojis","emojiArr","getEmojiByShortcode","created","getChatSettings","handleScroll","messagesBar","agencyService","getAgence","agency","Date","day","getUTCDay","timeOpenAgency","horairesAgence","tel","checkDisplayAgencyBanner","start","end","hour","getHours","minute","getMinutes","currentDate","onClickOutsideUnread","position","screenWidth","innerWidth","offsetX","round","transform","y","currentUnreadIndex","logReactBody","idConversation","idUser","typeAction","LOG_ACTIVITY_TYPE","UNREAD_MESSAGE","dtCreateMessage","chatService","logChatActivity","success","displayLogChatErrorMessage","code","callToaster","onClickOutside","firstName","lastName","$store","dispatch","contentReadAt","valueOf","Number","mapActions","scrollHeight","animate","scrollIntoView","READ_MESSAGE","urlify","files","size","IMAGE_MIME_TYPES","totalMaxImages","reader","onload","result","readAsDataURL","FILE_ERROR","MAX_SIZE","INVALID_MIME","selectMessage","action","show","removeAMessage","firebase","logDeleteBody","DELETE_MESSAGE","date","setHours","getDisplayTime","dateBefore","time","getDateBefore","getTime","format","userStatus","MEMBER_STATUS","BLOCKED","memberInfo","rawText","sentBy","replyMessage","memberId","conversationId","addPendingMsg","msg","path","isDisconnected","sendPendingMsgs","sendMsgToFirebase","newData","formatTime","dayNumber","currDate","isEnter","which","isShiftEnter","shiftKey","reactObj","filters","personName","currentReact","formatEmoji","deleteIndex","nbMessages","nbReacts","REACT","navigator","msMaxTouchPoints","middleware","events","isActive","detectIframe","capture","u","srcTarget","documentElement","composedPath","activeElement","tagName","stringify","unbind","directive","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","openReqs","databaseCache","onCloseListeners","handleOpenOrDeleteReq","reject","req","onerror","onblocked","onsuccess","createDatabase","dbName","indexedDB","open","onupgradeneeded","oldVersion","onclose","closeDatabase","openDatabase","dbPromise","storeName","readOnlyOrReadWrite","cb","txn","transaction","durability","objectStore","oncomplete","listeners","listener","deleteDatabase","addOnCloseListener","irregularEmoticons","extractTokens","split","word","normalizeTokens","transformEmojiData","emojiData","annotation","emoticon","order","tags","tokens","flat","skinUnicodes","skinVersions","callStore","method","getIDB","getAllIDB","commit","minBy","array","minItem","findCommonMembers","arrays","uniqByFunc","shortestArray","results","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","shortcode","lowerShortcodes","getEmojiByUnicode","customEmojiIndex","limit","favoritesStore","openCursor","cursor","addResult","continue","primaryKey","byName","CODA_MARKER","trie","itemToTokens","currentMap","char","nextMap","valuesAtCoda","search","exact","queue","shift","entriesSortedByKey","requiredKeys$1","assertCustomEmojis","customEmojis","firstItemIsFaulty","sortByName","emojiToTokens","searchTrie","searchByExactMatch","searchByPrefix","shortcodeToEmoji","nameToEmoji","byShortcode","cleanEmoji","len","warnETag","requiredKeys","assertEmojiData","assertStatus","response","getETag","fetch","headers","getETagAndData","json","arrayBufferToBinaryString","buffer","binary","bytes","Uint8Array","byteLength","fromCharCode","binaryStringToArrayBuffer","buf","ArrayBuffer","charCodeAt","jsonChecksum","inString","inBuffer","outBuffer","crypto","subtle","digest","outBinString","btoa","checkForUpdates","eTagAndData","loadDataForFirstTime","Database","_dbName","_db","_lazyUpdate","_custom","_clear","_ready","_init","empty","checkReady","customs","natives","_shutdown"],"mappings":"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","file":"js/chunk-0f8247fa.9e016930.js","sourcesContent":["export default {\n methods: {\n isScriptTag(text) {\n const regex = /]*>[\\s\\S]*?<\\/script\\b[^>]*>/g;\n return text && text.match(regex) ? true : false;\n },\n detectUrlString(str) {\n var urlRegex= new RegExp(\"([a-zA-Z0-9]+://)?([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?([a-zA-Z0-9.-]+\\\\.[A-Za-z]{2,4})(:[0-9]+)?([^ ])+\");\n return str && str.match(urlRegex) ? true : false;\n },\n },\n};\n","module.exports = __webpack_public_path__ + \"img/avatar-male.06b86b5f.png\";","import mod from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Room.vue?vue&type=style&index=0&id=fc79d66a&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Room.vue?vue&type=style&index=0&id=fc79d66a&lang=scss&scoped=true&\"","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}\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 node.parentNode.removeChild(node);\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.wholeText !== data)\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 node.style.setProperty(key, value, important ? 'important' : '');\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\n\nconst dirty_components = [];\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = 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 tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n if (flushing)\n return;\n flushing = true;\n do {\n // first, call beforeUpdate functions\n // and update components\n for (let i = 0; i < dirty_components.length; i += 1) {\n const component = dirty_components[i];\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 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 flushing = false;\n seen_callbacks.clear();\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}\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\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\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 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 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 return new_blocks;\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, 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 = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n 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 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: null,\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 : options.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 if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\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 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 '🫠': 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\nconst FONT_FAMILY = '\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",' +\n '\"Twemoji Mozilla\",\"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\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\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\nconst emojiSupportLevelPromise = new Promise(resolve => (\n rIC(() => (\n resolve(determineEmojiSupportLevel()) // delay so ideally this can run while IDB is first populating\n ))\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\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\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/* src/picker/components/Picker/Picker.svelte generated by Svelte v3.40.2 */\n\nconst { Map: Map_1 } = globals;\n\nfunction get_each_context(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[63] = list[i];\n\tchild_ctx[65] = i;\n\treturn child_ctx;\n}\n\nfunction get_each_context_1(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[66] = list[i];\n\tchild_ctx[65] = i;\n\treturn child_ctx;\n}\n\nfunction get_each_context_2(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[63] = list[i];\n\tchild_ctx[65] = i;\n\treturn child_ctx;\n}\n\nfunction get_each_context_3(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[69] = 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[72] = list[i];\n\tchild_ctx[65] = i;\n\treturn child_ctx;\n}\n\n// (44:38) {#each skinTones as skinTone, i (skinTone)}\nfunction create_each_block_4(key_1, ctx) {\n\tlet div;\n\tlet t_value = /*skinTone*/ ctx[72] + \"\";\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[65]);\n\n\t\t\tattr(div, \"class\", div_class_value = \"emoji hide-focus \" + (/*i*/ ctx[65] === /*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[65] === /*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[65]]);\n\t\t\tattr(div, \"tabindex\", \"-1\");\n\t\t\tattr(div, \"aria-label\", div_aria_label_value = /*i18n*/ ctx[0].skinTones[/*i*/ ctx[65]]);\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[72] + \"\")) set_data(t, t_value);\n\n\t\t\tif (dirty[0] & /*skinTones*/ 512 && div_id_value !== (div_id_value = \"skintone-\" + /*i*/ ctx[65])) {\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 hide-focus \" + (/*i*/ ctx[65] === /*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[65] === /*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[65]])) {\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[65]])) {\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// (54: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[69].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[49](/*group*/ ctx[69]);\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[69].id);\n\t\t\tattr(button, \"aria-label\", button_aria_label_value = /*i18n*/ ctx[0].categories[/*group*/ ctx[69].name]);\n\t\t\tattr(button, \"aria-selected\", button_aria_selected_value = !/*searchMode*/ ctx[4] && /*currentGroup*/ ctx[13].id === /*group*/ ctx[69].id);\n\t\t\tattr(button, \"title\", button_title_value = /*i18n*/ ctx[0].categories[/*group*/ ctx[69].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[69].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[69].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[69].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[69].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[69].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// (94: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[63].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[63].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// (94:40) {#if emoji.unicode}\nfunction create_if_block_1(ctx) {\n\tlet t_value = /*unicodeWithSkin*/ ctx[27](/*emoji*/ ctx[63], /*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[63], /*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// (89: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[63].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[65] == /*activeSearchItem*/ ctx[5]\n\t\t\t: '');\n\n\t\t\tattr(button, \"aria-label\", button_aria_label_value = /*labelWithSkin*/ ctx[28](/*emoji*/ ctx[63], /*currentSkinTone*/ ctx[8]));\n\t\t\tattr(button, \"title\", button_title_value = /*emoji*/ ctx[63].title);\n\n\t\t\tattr(button, \"class\", button_class_value = \"emoji \" + (/*searchMode*/ ctx[4] && /*i*/ ctx[65] === /*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[63].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[65] == /*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[63], /*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[63].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[65] === /*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[63].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// (70: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[66].category\n\t\t? /*emojiWithCategory*/ ctx[66].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[66].emojis;\n\tconst get_key = ctx => /*emoji*/ ctx[63].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[65]);\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[65]);\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\teach_blocks[i].m(div1, null);\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[66].category\n\t\t\t\t? /*emojiWithCategory*/ ctx[66].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[65])) {\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[66].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[65])) {\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// (104: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[63].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[63].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// (104:34) {#if emoji.unicode}\nfunction create_if_block(ctx) {\n\tlet t_value = /*unicodeWithSkin*/ ctx[27](/*emoji*/ ctx[63], /*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[63], /*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// (100: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[63].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[63], /*currentSkinTone*/ ctx[8]));\n\t\t\tattr(button, \"title\", button_title_value = /*emoji*/ ctx[63].title);\n\t\t\tattr(button, \"class\", \"emoji\");\n\t\t\tattr(button, \"id\", button_id_value = \"fav-\" + /*emoji*/ ctx[63].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[63], /*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[63].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[63].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[72];\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[69].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[66].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[63].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-owns\", \"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 \" + (/*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(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\teach_blocks_3[i].m(div3, null);\n\t\t\t}\n\n\t\t\t/*div3_binding*/ ctx[48](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\teach_blocks_2[i].m(div5, null);\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\teach_blocks_1[i].m(div9, null);\n\t\t\t}\n\n\t\t\t/*div10_binding*/ ctx[50](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\teach_blocks[i].m(div11, null);\n\t\t\t}\n\n\t\t\tappend(section, button1);\n\t\t\t/*button1_binding*/ ctx[51](button1);\n\t\t\t/*section_binding*/ ctx[52](section);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = [\n\t\t\t\t\tlisten(input, \"input\", /*input_input_handler*/ ctx[47]),\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) {\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 \" + (/*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[48](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[50](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[51](null);\n\t\t\t/*section_binding*/ ctx[52](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\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;\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// Detect a skintone option button\n\tconst isSkinToneOption = element => (/^skintone-/).test(element.id);\n\n\t//\n\t// Determine the emoji support level (in requestIdleCallback)\n\t//\n\temojiSupportLevelPromise.then(level => {\n\t\t// Can't actually test emoji support in Jest/JSDom, emoji never render in color in Cairo\n\t\t/* istanbul ignore next */\n\t\tif (!level) {\n\t\t\t$$invalidate(18, message = i18n.emojiUnsupportedMessage);\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(46, 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 = await emojiSupportLevelPromise;\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, await emojiSupportLevelPromise);\n\t}\n\n\tasync function getEmojisByGroup(group) {\n\n\t\tif (typeof group === 'undefined') {\n\t\t\treturn [];\n\t\t}\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(44, 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\tasync function onSkinToneOptionsClick(event) {\n\t\tconst { target } = event;\n\n\t\tif (!isSkinToneOption(target)) {\n\t\t\treturn;\n\t\t}\n\n\t\thalt(event);\n\t\tconst skinTone = parseInt(target.id.slice(9), 10); // remove 'skintone-' prefix\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\tasync function 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-${activeSkinTone}`));\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\tawait tick();\n\t\t\tfocus(`skintone-${activeSkinTone}`);\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\treturn onSkinToneOptionsClick(event);\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\treturn onSkinToneOptionsClick(event);\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 options, collapse the skintone picker.\n\t\t// Except if focus is just moving to another skintone option, e.g. pressing up/down to change focus\n\t\tconst { relatedTarget } = event;\n\n\t\tif (!relatedTarget || !isSkinToneOption(relatedTarget)) {\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};\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*/ 4096 | $$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\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(44, 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*/ 8192) {\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 --font-family: ${FONT_FAMILY};\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(45, 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*/ 49408) {\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) {\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 (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 = currentEmojis.filter(isZwjSupported));\n\n\t\t\t\t\trAF(() => {\n\t\t\t\t\t\t// Avoid Svelte doing an invalidation on the \"setter\" here.\n\t\t\t\t\t\t// At best the invalidation is useless, at worst it can cause infinite loops:\n\t\t\t\t\t\t// https://github.com/nolanlawson/emoji-picker-element/pull/180\n\t\t\t\t\t\t// https://github.com/sveltejs/svelte/issues/6521\n\t\t\t\t\t\t// Also note tabpanelElement can be null if the element is disconnected\n\t\t\t\t\t\t// immediately after connected, hence `|| {}`\n\t\t\t\t\t\t(tabpanelElement || {}).scrollTop = 0; // reset scroll top to 0 when emojis change\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] & /*currentEmojis, currentFavorites*/ 1026 | $$self.$$.dirty[1] & /*initialLoad*/ 4096) {\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(43, 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\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},\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];\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){--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){--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{--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(--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)}\";\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 ...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 this._cmp = new Picker({\n target: this.shadowRoot,\n props: this._ctx\n });\n }\n\n disconnectedCallback () {\n this._cmp.$destroy();\n this._cmp = undefined;\n\n const { database } = this._ctx;\n if (database) {\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 static get observedAttributes () {\n return ['locale', 'data-source', 'skin-tone-emoji'] // complex objects aren't supported, also use kebab-case\n }\n\n attributeChangedCallback (attrName, oldValue, newValue) {\n // convert from kebab-case to camelcase\n // see https://github.com/sveltejs/svelte/issues/3852#issuecomment-665037015\n this._set(\n attrName.replace(/-([a-z])/g, (_, up) => up.toUpperCase()),\n 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 default PickerElement;\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-row',{staticClass:\"room-container\"},[_c('div',{staticClass:\"room-info\"},[_c('div',{staticStyle:{\"display\":\"flex\"}},[_c('div',{class:!_vm.isAgency? 'people-image' : 'agency-image'},[_c('b-img',{staticClass:\"mb-2 mt-2\",attrs:{\"src\":!_vm.isAgency ? require('@/assets/people-group-white.png') : require('@/assets/house-heart-white.png'),\"width\":\"30\",\"height\":\"30\"}})],1),_c('div',{staticClass:\"room-title\"},[_c('span',{staticClass:\"fz-18\"},[_vm._v(\"\\n \"+_vm._s(_vm.roomTitle)+\"\\n \")])])]),_c('div',{staticStyle:{\"display\":\"flex\",\"justify-content\":\"flex-end\",\"margin-right\":\"20px\",\"cursor\":\"pointer\"}},[_c('b-icon',{directives:[{name:\"b-modal\",rawName:\"v-b-modal.participants\",modifiers:{\"participants\":true}}],staticStyle:{\"width\":\"20px\",\"height\":\"20px\",\"cursor\":\"pointer\"},attrs:{\"icon\":\"info-circle\"}})],1)]),_c('div',{staticClass:\"c-title\"}),(_vm.chatContent.length)?_c('div',{directives:[{name:\"chat-scroll\",rawName:\"v-chat-scroll\",value:({ always: false }),expression:\"{ always: false }\"}],ref:\"messagesBar\",staticClass:\"w-100 chat-content scroll-bar pt-5 mt-2\",style:((\"height: calc(100vh - \" + (_vm.chatBoxHeight+40) + \"px)\")),attrs:{\"id\":\"chatBox\"},on:{\"&scroll\":function($event){return _vm.resetModal.apply(null, arguments)}}},_vm._l((_vm.chatContent),function(content,i){return _c('div',{key:i,ref:'messagesChild'+i,refInFor:true,staticClass:\"w-100\",class:(\"index-\" + i),attrs:{\"id\":(\"index-\" + i)}},[(_vm.displayTime(i))?_c('div',{staticClass:\"time-group\",style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_c('hr'),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm._f(\"capitalize\")(_vm.displayTime(i))))])]):_vm._e(),(_vm.numberUnreadMessage>0 && i ==_vm.indexUnreadMessage)?_c('div',{staticClass:\"time-group unread-group\",style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_c('hr'),_c('div',{staticClass:\"time unread-message\"},[_vm._v(\" \"+_vm._s(_vm.numberUnreadMessage > 1 ? (_vm.numberUnreadMessage+ ' '+ _vm.$t('many-messages-unread-label')) : (_vm.numberUnreadMessage+ ' '+ _vm.$t('one-message-unread-label'))))])]):_vm._e(),(content)?_c('div',{on:{\"mouseover\":function($event){_vm.showOptionIndex = i},\"mouseleave\":function($event){_vm.showOptionIndex = null}}},[(content.isMine)?_c('div',{staticClass:\"d-flex justify-content-end align-items-center mgt-10\"},[(!_vm.loadingChatDetail)?_c('div',{staticClass:\"mine-toolbar\"},[(_vm.showOptionIndex === i && !content.deleted)?_c('div',{staticClass:\"select-option d-flex justify-content-end\"},[_c('span',{attrs:{\"title\":_vm.$t('remove-title'),\"role\":\"button\"},on:{\"click\":function($event){return _vm.showConfirmPopup(content, 'remove')}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]),_c('span',{staticClass:\"mark-unread-icon\",attrs:{\"role\":\"button\"}},[_c('i',{ref:(\"mark-unread-\" + i),refInFor:true,staticClass:\"fas fa-ellipsis-v\",attrs:{\"id\":'popover-mark-unread-'+i},on:{\"click\":function($event){return _vm.onClickUnreadIcon(i)}}})]),_c('span',{attrs:{\"title\":_vm.$t('react-label'),\"role\":\"button\"}},[_c('i',{ref:(\"reactBtn-\" + i),refInFor:true,staticClass:\"far fa-smile\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.showReactBox(i)}}})])]):_vm._e()]):_vm._e(),_c('div',{staticClass:\"is-mine mr-2\"},[_c('b-media',{staticClass:\"content-container\"},[(content.deleted)?_c('div',{staticClass:\"d-flex content-box-container deleted-container\",class:{'chat-text-small loading': _vm.loadingChatDetail}},[_c('div',{staticClass:\"deleted-msg my-content\",style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_c('em',[_vm._v(_vm._s(_vm.$t('removed-message')))])]),_c('div',{staticStyle:{\"display\":\"flex\",\"white-space\":\"nowrap\",\"justify-content\":\"flex-end\",\"font-size\":\"12px\"},style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_vm._v(\"\\n \\n \"+_vm._s(_vm.getSentTime(content.sentAt))+\"\\n \")])]):_c('div',{staticClass:\"d-flex content-box-container\",class:{'chat-text-small loading': _vm.loadingChatDetail}},[_c('div',{staticClass:\"content-box my-content\",style:({'background': _vm.loadingChatDetail ? '#E2E2E2' : '#EC5F71'})},[_c('div',{staticClass:\"content-img-slide d-flex flex-wrap\"},_vm._l((content.files),function(file,i){return _c('div',{key:i,staticClass:\"mr-2 mb-2 content-img position-relative\"},[_c('expandable-image',{attrs:{\"src\":file.filePath || file.preview}}),(!file.filePath)?_c('div',{staticClass:\"position-absolute pending-img\"}):_vm._e(),(!file.filePath)?_c('b-spinner',{staticClass:\"m-2 position-absolute image-spinner\",attrs:{\"variant\":\"primary\",\"small\":\"\"}}):_vm._e()],1)}),0),(_vm.detectUrlString(content.text) && !_vm.isScriptTag(content.text))?_c('div',{staticClass:\"content-text\",style:({'opacity': _vm.loadingChatDetail ? 0 : 1}),domProps:{\"innerHTML\":_vm._s(content.text)}}):_c('div',{staticClass:\"content-text\",style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_vm._v(_vm._s(content.text))]),_c('div',{staticStyle:{\"display\":\"flex\",\"white-space\":\"nowrap\",\"justify-content\":\"flex-end\",\"font-size\":\"12px\",\"margin-top\":\"5px\"},style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_vm._v(\"\\n \\n \"+_vm._s(_vm.getSentTime(content.sentAt))+\"\\n \")]),(content.reactions && !_vm.loadingChatDetail)?_c('div',{staticClass:\"react-group d-flex justify-content-end\"},_vm._l((content.reactions),function(react,emoji){return _c('div',{key:content.sentAt + emoji,ref:'emoji-' + content.sentAt + emoji,refInFor:true,staticClass:\"react-item\",attrs:{\"role\":\"button\"},on:{\"mouseover\":function($event){return _vm.showReactList(content, emoji)},\"mouseout\":function($event){_vm.currentReactMsgHover = null}}},[_vm._v(_vm._s(emoji)),(react.length > 1)?_c('span',[_vm._v(\" \"+_vm._s(react.length))]):_vm._e()])}),0):_vm._e()]),(_vm.checkIsPending(content))?_c('b-spinner',{staticClass:\"m-2\",attrs:{\"variant\":\"primary\",\"small\":\"\"}}):_vm._e()],1)])],1)]):_c('div',{staticClass:\"not-mine\"},[_c('b-media',{staticClass:\"content-container\",staticStyle:{\"margin-left\":\"40px\"},on:{\"mouseover\":function($event){_vm.showOptionIndex = i},\"mouseleave\":function($event){_vm.showOptionIndex = null}}},[(content.deleted || content.status === _vm.chatMsgStatus.DELETE_FOR_ALL)?_c('div',{staticClass:\"d-flex content-box-container deleted-container\",class:{'chat-text-small loading': _vm.loadingChatDetail, border:_vm.loadingChatDetail ?'unset' : '1px solid #a0a0a0'}},[_c('div',{staticClass:\"deleted-msg my-content\",style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_c('em',[_vm._v(_vm._s(_vm.$t('removed-message')))])]),_c('div',{staticStyle:{\"display\":\"flex\",\"white-space\":\"nowrap\",\"justify-content\":\"flex-end\",\"font-size\":\"12px\"},style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_vm._v(\"\\n \\n \"+_vm._s(_vm.getSentTime(content.sentAt))+\"\\n \")])]):_c('div',{staticClass:\"d-flex content-box-container\",class:{'chat-text-small loading content-box other-content': _vm.loadingChatDetail}},[_c('div',{staticClass:\" content-box other-content position-relative\",style:({marginBottom: ((content.reactions ? 15 : 0) + \"px\"), background: _vm.loadingChatDetail ? 'unset' : '#ebebeb', padding: _vm.loadingChatDetail ? 'unset' : '10px' })},[_c('div',{staticStyle:{\"display\":\"flex\",\"white-space\":\"nowrap\",\"font-weight\":\"bold\"},style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_vm._v(\"\\n \"+_vm._s(_vm._f(\"personName\")(content.userInfo))+\"\\n \\n \")]),_c('div',{staticClass:\"content-img-slide d-flex flex-wrap\"},_vm._l((content.files),function(file,i){return _c('div',{key:i,staticClass:\"mr-2 mb-2 content-img position-relative\"},[_c('expandable-image',{attrs:{\"src\":file.filePath || file.preview}}),(!file.filePath)?_c('div',{staticClass:\"position-absolute pending-img\"}):_vm._e(),(!file.filePath)?_c('b-spinner',{staticClass:\"m-2 position-absolute image-spinner\",attrs:{\"variant\":\"primary\",\"small\":\"\"}}):_vm._e()],1)}),0),(_vm.detectUrlString(content.text) && !_vm.isScriptTag(content.text))?_c('div',{staticClass:\"content-text\",style:({'opacity': _vm.loadingChatDetail ? 0 : 1}),domProps:{\"innerHTML\":_vm._s(content.text)}}):_c('div',{staticClass:\"content-text\",style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_vm._v(_vm._s(content.text))]),_c('div',{staticStyle:{\"display\":\"flex\",\"white-space\":\"nowrap\",\"justify-content\":\"flex-end\",\"font-size\":\"12px\"},style:({'opacity': _vm.loadingChatDetail ? 0 : 1})},[_vm._v(\"\\n \\n \"+_vm._s(_vm.getSentTime(content.sentAt))+\"\\n \")]),(content.reactions && !_vm.loadingChatDetail)?_c('div',{staticClass:\"react-group d-flex justify-content-end\"},_vm._l((content.reactions),function(react,emoji){return _c('div',{key:content.sentAt + emoji,ref:'emoji-' + content.sentAt + emoji,refInFor:true,staticClass:\"react-item\",attrs:{\"role\":\"button\"},on:{\"mouseover\":function($event){return _vm.showReactList(content, emoji)},\"mouseout\":function($event){_vm.currentReactMsgHover = null}}},[_vm._v(_vm._s(emoji)),(react.length > 1)?_c('span',[_vm._v(\" \"+_vm._s(react.length))]):_vm._e()])}),0):_vm._e()]),(_vm.showOptionIndex === i && !content.deleted && !_vm.loadingChatDetail)?_c('div',{staticClass:\"not-mine-toolbar position-relative\"},[_c('div',{staticClass:\"d-flex flex-row\"},[_c('span',{staticClass:\"mark-unread-icon is-not-mine\",attrs:{\"role\":\"button\"}},[_c('i',{ref:(\"mark-unread-\" + i),refInFor:true,staticClass:\"fas fa-ellipsis-v\",attrs:{\"id\":'popover-mark-unread-'+i},on:{\"click\":function($event){return _vm.onClickUnreadIcon(i)}}})]),_c('span',{attrs:{\"title\":_vm.$t('react-label'),\"role\":\"button\"}},[_c('i',{ref:(\"reactBtn-\" + i),refInFor:true,staticClass:\"far fa-smile\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.showReactBox(i)}}})])])]):_vm._e()])])],1)]):_vm._e()])}),0):_vm._e(),_c('div',{staticClass:\"message-box\",style:({'padding-top': _vm.isShowAgencyBanner ? '0px': '15px'})},[(_vm.previewImgs.length)?_c('div',{staticClass:\"preview-slide\"},[_vm._l((_vm.previewImgs),function(item,i){return _c('div',{key:i,staticClass:\"preview-item mb-3 mr-3\"},[_c('i',{staticClass:\"far fa-times-circle close-btn\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.removePreviewImg(i)}}}),_c('b-img',{staticClass:\"preview-photo w-100\",attrs:{\"thumbnail\":\"\",\"fluid\":\"\",\"src\":item.preview}})],1)}),_c('div',{staticClass:\"add-more-file-btn\",on:{\"click\":function($event){return _vm.$refs.uploadFile.click()}}},[_c('i',{staticClass:\"fas fa-plus\"})])],2):_vm._e(),(_vm.isShowAgencyBanner)?_c('div',{staticClass:\"agency-close-banner \"},[_vm._v(_vm._s(_vm.$t('agency-close-banner-message', {agencyPhone: _vm.agencyPhone})))]):_vm._e(),_c('b-form',{on:{\"submit\":_vm.sendMsg}},[_c('b-input-group',[_c('b-form-textarea',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.onClickOutside),expression:\"onClickOutside\"}],staticClass:\" scroll-bar\",attrs:{\"rows\":\"1\",\"id\":\"sendMsgInput\",\"max-rows\":\"1\",\"no-resize\":\"\",\"maxlength\":\"2000\",\"placeholder\":_vm.$t('discussion-box-placeholder')},on:{\"click\":_vm.onReadMessage,\"focus\":_vm.onFocusSendMessageInput,\"keydown\":_vm.handleEnter,\"input\":_vm.onchangeMessage},model:{value:(_vm.message),callback:function ($$v) {_vm.message=$$v},expression:\"message\"}}),_c('div',{staticClass:\"msg-box-toolbar\"},[_c('i',{staticClass:\"fas fa-link\",attrs:{\"role\":\"button\",\"title\":_vm.$t('upload-img-title')},on:{\"click\":function($event){return _vm.$refs.uploadFile.click()}}}),_c('input',{ref:\"uploadFile\",attrs:{\"type\":\"file\",\"accept\":\"image/*\",\"multiple\":\"\",\"hidden\":\"\"},on:{\"change\":_vm._uploadFile}}),(_vm.showEmojiBox)?_c('VuemojiPicker',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(function () {if (_vm.showEmojiBox) { _vm.showEmojiBox = false }}),expression:\"() => {if (showEmojiBox) showEmojiBox = false}\"}],staticClass:\"emoji-box\",on:{\"emojiClick\":_vm.selectEmoji}}):_vm._e(),_c('i',{staticClass:\"far fa-smile \",attrs:{\"role\":\"button\"},on:{\"click\":_vm.openEmojiBox}})],1),_c('b-input-group-append',[_c('b-button',{attrs:{\"variant\":\"primary\",\"type\":\"submit\"}},[_vm._v(_vm._s(_vm.$t(\"discussion-send-btn\")))])],1)],1)],1)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isShowReactBox && !_vm.loadingChatDetail),expression:\"isShowReactBox && !loadingChatDetail\"},{name:\"click-outside\",rawName:\"v-click-outside\",value:(function () {if (_vm.isShowReactBox) { _vm.isShowReactBox = false }}),expression:\"() => {if (isShowReactBox) isShowReactBox = false}\"}],ref:\"react-emoji-box\",staticClass:\"react-emoji-box\"},[_c('b-row',_vm._l((_vm.reactEmojis),function(emoji,i){return _c('div',{key:i,staticClass:\"emoji\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.reactMsg(emoji.unicode)}}},[_vm._v(\"\\n \"+_vm._s(emoji.unicode)+\"\\n \")])}),0)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentReactMsgHover),expression:\"currentReactMsgHover\"}],ref:\"react-msg-box\",staticClass:\"react-msg-box\"},_vm._l((_vm.currentReactMsgHover),function(item,i){return _c('div',{key:i,staticClass:\"emoji\",attrs:{\"role\":\"button\"}},[_vm._v(\"\\n \"+_vm._s(item.name)+\"\\n \")])}),0),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isShowMarkUnreadBox && !_vm.loadingChatDetail),expression:\"isShowMarkUnreadBox && !loadingChatDetail\"},{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.onClickOutsideUnread),expression:\"onClickOutsideUnread\"}],ref:\"mark-unread-box\",staticClass:\"mark-unread-box\",on:{\"click\":function($event){return _vm.onMarkUnread()}}},[_c('span',[_vm._v(_vm._s(_vm.$t('chat-message-mark-unread')))])]),_c('b-modal',{staticClass:\"participants\",attrs:{\"id\":\"participants\",\"hide-footer\":\"\"},scopedSlots:_vm._u([{key:\"modal-title\",fn:function(){return [_vm._v(\"\\n \"+_vm._s(_vm.$t(\"discussion-participants\"))+\"\\n \")]},proxy:true}])},[_vm._l((_vm.participants),function(item,i){return _c('b-media',{key:i,staticClass:\"mt-2 participants\",scopedSlots:_vm._u([{key:\"aside\",fn:function(){return [_c('b-img',{staticClass:\"purple-bg mr-3\",attrs:{\"rounded\":\"circle\",\"width\":\"40\",\"height\":\"40\",\"src\":item.picture || _vm.getDefaultImg()}})]},proxy:true}],null,true)},[_c('div',{attrs:{\"vertical-align\":\"center\"}},[_vm._v(\"\\n \"+_vm._s(_vm.formatPersonName(item))+\"\\n \")])])}),_c('b-button',{staticClass:\"mt-3\",attrs:{\"variant\":\"primary\",\"block\":\"\"},on:{\"click\":function($event){return _vm.$bvModal.hide('participants')}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"cancel-btn\"))+\"\\n \")])],2),_c('b-modal',{ref:\"alertPopup\",attrs:{\"ok-only\":\"\"}},[_c('p',[_vm._v(_vm._s(_vm.alert.message))])]),_c('b-modal',{ref:\"confirmModal\",staticClass:\"modal-box\",attrs:{\"size\":\"sm\",\"id\":\"confirmModal\",\"hide-header\":\"\",\"hide-footer\":\"\",\"centered\":\"\"}},[_c('div',{staticClass:\"confirm-content\",domProps:{\"innerHTML\":_vm._s(_vm.confirmPopup.message)}}),_c('div',{staticClass:\"mt-3 text-center\"},[_c('b-button',{staticClass:\"mr-4\",on:{\"click\":function($event){return _vm.onConfirmPopup()}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.confirmPopup.submitBtn)+\"\\n\\t\\t\\t\\t\")]),_c('b-button',{attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.hideModal}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.confirmPopup.closeBtn)+\"\\n\\t\\t\\t\\t\")])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\n/**\r\n * Displays a warning message (using console.error) with a stack trace if the\r\n * function is called inside of active component.\r\n *\r\n * @param message warning message to be displayed\r\n */\r\nfunction warn$1(message) {\r\n var _a;\r\n warn(message, (_a = getCurrentInstance()) === null || _a === void 0 ? void 0 : _a.proxy);\r\n}\n\nvar activeEffectScope;\r\nvar effectScopeStack = [];\r\nvar EffectScopeImpl = /** @class */ (function () {\r\n function EffectScopeImpl(vm) {\r\n this.active = true;\r\n this.effects = [];\r\n this.cleanups = [];\r\n this.vm = vm;\r\n }\r\n EffectScopeImpl.prototype.run = function (fn) {\r\n if (this.active) {\r\n try {\r\n this.on();\r\n return fn();\r\n }\r\n finally {\r\n this.off();\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn$1(\"cannot run an inactive effect scope.\");\r\n }\r\n return;\r\n };\r\n EffectScopeImpl.prototype.on = function () {\r\n if (this.active) {\r\n effectScopeStack.push(this);\r\n activeEffectScope = this;\r\n }\r\n };\r\n EffectScopeImpl.prototype.off = function () {\r\n if (this.active) {\r\n effectScopeStack.pop();\r\n activeEffectScope = effectScopeStack[effectScopeStack.length - 1];\r\n }\r\n };\r\n EffectScopeImpl.prototype.stop = function () {\r\n if (this.active) {\r\n this.vm.$destroy();\r\n this.effects.forEach(function (e) { return e.stop(); });\r\n this.cleanups.forEach(function (cleanup) { return cleanup(); });\r\n this.active = false;\r\n }\r\n };\r\n return EffectScopeImpl;\r\n}());\r\nvar EffectScope = /** @class */ (function (_super) {\r\n __extends(EffectScope, _super);\r\n function EffectScope(detached) {\r\n if (detached === void 0) { detached = false; }\r\n var _this = this;\r\n var vm = undefined;\r\n withCurrentInstanceTrackingDisabled(function () {\r\n vm = defineComponentInstance(getVueConstructor());\r\n });\r\n _this = _super.call(this, vm) || this;\r\n if (!detached) {\r\n recordEffectScope(_this);\r\n }\r\n return _this;\r\n }\r\n return EffectScope;\r\n}(EffectScopeImpl));\r\nfunction recordEffectScope(effect, scope) {\r\n var _a;\r\n scope = scope || activeEffectScope;\r\n if (scope && scope.active) {\r\n scope.effects.push(effect);\r\n return;\r\n }\r\n // destory on parent component unmounted\r\n var vm = (_a = getCurrentInstance()) === null || _a === void 0 ? void 0 : _a.proxy;\r\n vm && vm.$on('hook:destroyed', function () { return effect.stop(); });\r\n}\r\nfunction effectScope(detached) {\r\n return new EffectScope(detached);\r\n}\r\nfunction getCurrentScope() {\r\n return activeEffectScope;\r\n}\r\nfunction onScopeDispose(fn) {\r\n if (activeEffectScope) {\r\n activeEffectScope.cleanups.push(fn);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn$1(\"onScopeDispose() is called when there is no active effect scope\" +\r\n \" to be associated with.\");\r\n }\r\n}\r\n/**\r\n * @internal\r\n **/\r\nfunction getCurrentScopeVM() {\r\n var _a, _b;\r\n return ((_a = getCurrentScope()) === null || _a === void 0 ? void 0 : _a.vm) || ((_b = getCurrentInstance()) === null || _b === void 0 ? void 0 : _b.proxy);\r\n}\r\n/**\r\n * @internal\r\n **/\r\nfunction bindCurrentScopeToVM(vm) {\r\n if (!vm.scope) {\r\n var scope_1 = new EffectScopeImpl(vm.proxy);\r\n vm.scope = scope_1;\r\n vm.proxy.$on('hook:destroyed', function () { return scope_1.stop(); });\r\n }\r\n return vm.scope;\r\n}\n\nvar vueDependency = undefined;\r\ntry {\r\n var requiredVue = require('vue');\r\n if (requiredVue && isVue(requiredVue)) {\r\n vueDependency = requiredVue;\r\n }\r\n else if (requiredVue &&\r\n 'default' in requiredVue &&\r\n isVue(requiredVue.default)) {\r\n vueDependency = requiredVue.default;\r\n }\r\n}\r\ncatch (_a) {\r\n // not available\r\n}\r\nvar vueConstructor = null;\r\nvar currentInstance = null;\r\nvar currentInstanceTracking = true;\r\nvar PluginInstalledFlag = '__composition_api_installed__';\r\nfunction isVue(obj) {\r\n return obj && isFunction(obj) && obj.name === 'Vue';\r\n}\r\nfunction isVueRegistered(Vue) {\r\n // resolve issue: https://github.com/vuejs/composition-api/issues/876#issue-1087619365\r\n return vueConstructor && hasOwn(Vue, PluginInstalledFlag);\r\n}\r\nfunction getVueConstructor() {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n assert(vueConstructor, \"must call Vue.use(VueCompositionAPI) before using any function.\");\r\n }\r\n return vueConstructor;\r\n}\r\n// returns registered vue or `vue` dependency\r\nfunction getRegisteredVueOrDefault() {\r\n var constructor = vueConstructor || vueDependency;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n assert(constructor, \"No vue dependency found.\");\r\n }\r\n return constructor;\r\n}\r\nfunction setVueConstructor(Vue) {\r\n // @ts-ignore\r\n if ((process.env.NODE_ENV !== 'production') && vueConstructor && Vue.__proto__ !== vueConstructor.__proto__) {\r\n warn('[vue-composition-api] another instance of Vue installed');\r\n }\r\n vueConstructor = Vue;\r\n Object.defineProperty(Vue, PluginInstalledFlag, {\r\n configurable: true,\r\n writable: true,\r\n value: true,\r\n });\r\n}\r\n/**\r\n * For `effectScope` to create instance without populate the current instance\r\n * @internal\r\n **/\r\nfunction withCurrentInstanceTrackingDisabled(fn) {\r\n var prev = currentInstanceTracking;\r\n currentInstanceTracking = false;\r\n try {\r\n fn();\r\n }\r\n finally {\r\n currentInstanceTracking = prev;\r\n }\r\n}\r\nfunction setCurrentInstance(instance) {\r\n if (!currentInstanceTracking)\r\n return;\r\n var prev = currentInstance;\r\n prev === null || prev === void 0 ? void 0 : prev.scope.off();\r\n currentInstance = instance;\r\n currentInstance === null || currentInstance === void 0 ? void 0 : currentInstance.scope.on();\r\n}\r\nfunction getCurrentInstance() {\r\n return currentInstance;\r\n}\r\nvar instanceMapCache = new WeakMap();\r\nfunction toVue3ComponentInstance(vm) {\r\n if (instanceMapCache.has(vm)) {\r\n return instanceMapCache.get(vm);\r\n }\r\n var instance = {\r\n proxy: vm,\r\n update: vm.$forceUpdate,\r\n type: vm.$options,\r\n uid: vm._uid,\r\n // $emit is defined on prototype and it expected to be bound\r\n emit: vm.$emit.bind(vm),\r\n parent: null,\r\n root: null, // to be immediately set\r\n };\r\n bindCurrentScopeToVM(instance);\r\n // map vm.$props =\r\n var instanceProps = [\r\n 'data',\r\n 'props',\r\n 'attrs',\r\n 'refs',\r\n 'vnode',\r\n 'slots',\r\n ];\r\n instanceProps.forEach(function (prop) {\r\n proxy(instance, prop, {\r\n get: function () {\r\n return vm[\"$\".concat(prop)];\r\n },\r\n });\r\n });\r\n proxy(instance, 'isMounted', {\r\n get: function () {\r\n // @ts-expect-error private api\r\n return vm._isMounted;\r\n },\r\n });\r\n proxy(instance, 'isUnmounted', {\r\n get: function () {\r\n // @ts-expect-error private api\r\n return vm._isDestroyed;\r\n },\r\n });\r\n proxy(instance, 'isDeactivated', {\r\n get: function () {\r\n // @ts-expect-error private api\r\n return vm._inactive;\r\n },\r\n });\r\n proxy(instance, 'emitted', {\r\n get: function () {\r\n // @ts-expect-error private api\r\n return vm._events;\r\n },\r\n });\r\n instanceMapCache.set(vm, instance);\r\n if (vm.$parent) {\r\n instance.parent = toVue3ComponentInstance(vm.$parent);\r\n }\r\n if (vm.$root) {\r\n instance.root = toVue3ComponentInstance(vm.$root);\r\n }\r\n return instance;\r\n}\n\nvar toString = function (x) { return Object.prototype.toString.call(x); };\r\nfunction isNative(Ctor) {\r\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\r\n}\r\nvar hasSymbol = typeof Symbol !== 'undefined' &&\r\n isNative(Symbol) &&\r\n typeof Reflect !== 'undefined' &&\r\n isNative(Reflect.ownKeys);\r\nvar noopFn = function (_) { return _; };\r\nfunction proxy(target, key, _a) {\r\n var get = _a.get, set = _a.set;\r\n Object.defineProperty(target, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: get || noopFn,\r\n set: set || noopFn,\r\n });\r\n}\r\nfunction def(obj, key, val, enumerable) {\r\n Object.defineProperty(obj, key, {\r\n value: val,\r\n enumerable: !!enumerable,\r\n writable: true,\r\n configurable: true,\r\n });\r\n}\r\nfunction hasOwn(obj, key) {\r\n return Object.hasOwnProperty.call(obj, key);\r\n}\r\nfunction assert(condition, msg) {\r\n if (!condition) {\r\n throw new Error(\"[vue-composition-api] \".concat(msg));\r\n }\r\n}\r\nfunction isPrimitive(value) {\r\n return (typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n // $flow-disable-line\r\n typeof value === 'symbol' ||\r\n typeof value === 'boolean');\r\n}\r\nfunction isArray(x) {\r\n return Array.isArray(x);\r\n}\r\nvar objectToString = Object.prototype.toString;\r\nvar toTypeString = function (value) {\r\n return objectToString.call(value);\r\n};\r\nvar isMap = function (val) {\r\n return toTypeString(val) === '[object Map]';\r\n};\r\nvar isSet = function (val) {\r\n return toTypeString(val) === '[object Set]';\r\n};\r\nvar MAX_VALID_ARRAY_LENGTH = 4294967295; // Math.pow(2, 32) - 1\r\nfunction isValidArrayIndex(val) {\r\n var n = parseFloat(String(val));\r\n return (n >= 0 &&\r\n Math.floor(n) === n &&\r\n isFinite(val) &&\r\n n <= MAX_VALID_ARRAY_LENGTH);\r\n}\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\nfunction isPlainObject(x) {\r\n return toString(x) === '[object Object]';\r\n}\r\nfunction isFunction(x) {\r\n return typeof x === 'function';\r\n}\r\nfunction isUndef(v) {\r\n return v === undefined || v === null;\r\n}\r\nfunction warn(msg, vm) {\r\n var Vue = getRegisteredVueOrDefault();\r\n if (!Vue || !Vue.util)\r\n console.warn(\"[vue-composition-api] \".concat(msg));\r\n else\r\n Vue.util.warn(msg, vm);\r\n}\r\nfunction logError(err, vm, info) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(\"Error in \".concat(info, \": \\\"\").concat(err.toString(), \"\\\"\"), vm);\r\n }\r\n if (typeof window !== 'undefined' && typeof console !== 'undefined') {\r\n console.error(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n}\r\n/**\r\n * Object.is polyfill\r\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\r\n * */\r\nfunction isSame(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2;\r\n }\r\n else {\r\n return value1 !== value1 && value2 !== value2;\r\n }\r\n}\n\nfunction getCurrentInstanceForFn(hook, target) {\r\n target = target || getCurrentInstance();\r\n if ((process.env.NODE_ENV !== 'production') && !target) {\r\n warn(\"\".concat(hook, \" is called when there is no active component instance to be \") +\r\n \"associated with. \" +\r\n \"Lifecycle injection APIs can only be used during execution of setup().\");\r\n }\r\n return target;\r\n}\r\nfunction defineComponentInstance(Ctor, options) {\r\n if (options === void 0) { options = {}; }\r\n var silent = Ctor.config.silent;\r\n Ctor.config.silent = true;\r\n var vm = new Ctor(options);\r\n Ctor.config.silent = silent;\r\n return vm;\r\n}\r\nfunction isComponentInstance(obj) {\r\n var Vue = getVueConstructor();\r\n return Vue && obj instanceof Vue;\r\n}\r\nfunction createSlotProxy(vm, slotName) {\r\n return (function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (!vm.$scopedSlots[slotName]) {\r\n if ((process.env.NODE_ENV !== 'production'))\r\n return warn(\"slots.\".concat(slotName, \"() got called outside of the \\\"render()\\\" scope\"), vm);\r\n return;\r\n }\r\n return vm.$scopedSlots[slotName].apply(vm, args);\r\n });\r\n}\r\nfunction resolveSlots(slots, normalSlots) {\r\n var res;\r\n if (!slots) {\r\n res = {};\r\n }\r\n else if (slots._normalized) {\r\n // fast path 1: child component re-render only, parent did not change\r\n return slots._normalized;\r\n }\r\n else {\r\n res = {};\r\n for (var key in slots) {\r\n if (slots[key] && key[0] !== '$') {\r\n res[key] = true;\r\n }\r\n }\r\n }\r\n // expose normal slots on scopedSlots\r\n for (var key in normalSlots) {\r\n if (!(key in res)) {\r\n res[key] = true;\r\n }\r\n }\r\n return res;\r\n}\r\nvar vueInternalClasses;\r\nvar getVueInternalClasses = function () {\r\n if (!vueInternalClasses) {\r\n var vm = defineComponentInstance(getVueConstructor(), {\r\n computed: {\r\n value: function () {\r\n return 0;\r\n },\r\n },\r\n });\r\n // to get Watcher class\r\n var Watcher = vm._computedWatchers.value.constructor;\r\n // to get Dep class\r\n var Dep = vm._data.__ob__.dep.constructor;\r\n vueInternalClasses = {\r\n Watcher: Watcher,\r\n Dep: Dep,\r\n };\r\n vm.$destroy();\r\n }\r\n return vueInternalClasses;\r\n};\n\nfunction createSymbol(name) {\r\n return hasSymbol ? Symbol.for(name) : name;\r\n}\r\nvar WatcherPreFlushQueueKey = createSymbol('composition-api.preFlushQueue');\r\nvar WatcherPostFlushQueueKey = createSymbol('composition-api.postFlushQueue');\r\n// must be a string, symbol key is ignored in reactive\r\nvar RefKey = 'composition-api.refKey';\n\nvar accessModifiedSet = new WeakMap();\r\nvar rawSet = new WeakMap();\r\nvar readonlySet = new WeakMap();\n\n/**\r\n * Set a property on an object. Adds the new property, triggers change\r\n * notification and intercept it's subsequent access if the property doesn't\r\n * already exist.\r\n */\r\nfunction set$1(target, key, val) {\r\n var Vue = getVueConstructor();\r\n // @ts-expect-error https://github.com/vuejs/vue/pull/12132\r\n var _a = Vue.util, warn = _a.warn, defineReactive = _a.defineReactive;\r\n if ((process.env.NODE_ENV !== 'production') && (isUndef(target) || isPrimitive(target))) {\r\n warn(\"Cannot set reactive property on undefined, null, or primitive value: \".concat(target));\r\n }\r\n var ob = target.__ob__;\r\n function ssrMockReactivity() {\r\n // in SSR, there is no __ob__. Mock for reactivity check\r\n if (ob && isObject(val) && !hasOwn(val, '__ob__')) {\r\n mockReactivityDeep(val);\r\n }\r\n }\r\n if (isArray(target)) {\r\n if (isValidArrayIndex(key)) {\r\n target.length = Math.max(target.length, key);\r\n target.splice(key, 1, val);\r\n ssrMockReactivity();\r\n return val;\r\n }\r\n else if (key === 'length' && val !== target.length) {\r\n target.length = val;\r\n ob === null || ob === void 0 ? void 0 : ob.dep.notify();\r\n return val;\r\n }\r\n }\r\n if (key in target && !(key in Object.prototype)) {\r\n target[key] = val;\r\n ssrMockReactivity();\r\n return val;\r\n }\r\n if (target._isVue || (ob && ob.vmCount)) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('Avoid adding reactive properties to a Vue instance or its root $data ' +\r\n 'at runtime - declare it upfront in the data option.');\r\n return val;\r\n }\r\n if (!ob) {\r\n target[key] = val;\r\n return val;\r\n }\r\n defineReactive(ob.value, key, val);\r\n // IMPORTANT: define access control before trigger watcher\r\n defineAccessControl(target, key, val);\r\n ssrMockReactivity();\r\n ob.dep.notify();\r\n return val;\r\n}\n\nvar _isForceTrigger = false;\r\nfunction isForceTrigger() {\r\n return _isForceTrigger;\r\n}\r\nfunction setForceTrigger(v) {\r\n _isForceTrigger = v;\r\n}\n\nvar RefImpl = /** @class */ (function () {\r\n function RefImpl(_a) {\r\n var get = _a.get, set = _a.set;\r\n proxy(this, 'value', {\r\n get: get,\r\n set: set,\r\n });\r\n }\r\n return RefImpl;\r\n}());\r\nfunction createRef(options, isReadonly, isComputed) {\r\n if (isReadonly === void 0) { isReadonly = false; }\r\n if (isComputed === void 0) { isComputed = false; }\r\n var r = new RefImpl(options);\r\n // add effect to differentiate refs from computed\r\n if (isComputed)\r\n r.effect = true;\r\n // seal the ref, this could prevent ref from being observed\r\n // It's safe to seal the ref, since we really shouldn't extend it.\r\n // related issues: #79\r\n var sealed = Object.seal(r);\r\n if (isReadonly)\r\n readonlySet.set(sealed, true);\r\n return sealed;\r\n}\r\nfunction ref(raw) {\r\n var _a;\r\n if (isRef(raw)) {\r\n return raw;\r\n }\r\n var value = reactive((_a = {}, _a[RefKey] = raw, _a));\r\n return createRef({\r\n get: function () { return value[RefKey]; },\r\n set: function (v) { return (value[RefKey] = v); },\r\n });\r\n}\r\nfunction isRef(value) {\r\n return value instanceof RefImpl;\r\n}\r\nfunction unref(ref) {\r\n return isRef(ref) ? ref.value : ref;\r\n}\r\nfunction toRefs(obj) {\r\n if ((process.env.NODE_ENV !== 'production') && !isReactive(obj)) {\r\n warn(\"toRefs() expects a reactive object but received a plain one.\");\r\n }\r\n if (!isPlainObject(obj))\r\n return obj;\r\n var ret = {};\r\n for (var key in obj) {\r\n ret[key] = toRef(obj, key);\r\n }\r\n return ret;\r\n}\r\nfunction customRef(factory) {\r\n var version = ref(0);\r\n return createRef(factory(function () { return void version.value; }, function () {\r\n ++version.value;\r\n }));\r\n}\r\nfunction toRef(object, key) {\r\n if (!(key in object))\r\n set$1(object, key, undefined);\r\n var v = object[key];\r\n if (isRef(v))\r\n return v;\r\n return createRef({\r\n get: function () { return object[key]; },\r\n set: function (v) { return (object[key] = v); },\r\n });\r\n}\r\nfunction shallowRef(raw) {\r\n var _a;\r\n if (isRef(raw)) {\r\n return raw;\r\n }\r\n var value = shallowReactive((_a = {}, _a[RefKey] = raw, _a));\r\n return createRef({\r\n get: function () { return value[RefKey]; },\r\n set: function (v) { return (value[RefKey] = v); },\r\n });\r\n}\r\nfunction triggerRef(value) {\r\n if (!isRef(value))\r\n return;\r\n setForceTrigger(true);\r\n value.value = value.value;\r\n setForceTrigger(false);\r\n}\r\nfunction proxyRefs(objectWithRefs) {\r\n var _a, e_1, _b;\r\n if (isReactive(objectWithRefs)) {\r\n return objectWithRefs;\r\n }\r\n var value = reactive((_a = {}, _a[RefKey] = objectWithRefs, _a));\r\n def(value, RefKey, value[RefKey], false);\r\n var _loop_1 = function (key) {\r\n proxy(value, key, {\r\n get: function () {\r\n if (isRef(value[RefKey][key])) {\r\n return value[RefKey][key].value;\r\n }\r\n return value[RefKey][key];\r\n },\r\n set: function (v) {\r\n if (isRef(value[RefKey][key])) {\r\n return (value[RefKey][key].value = unref(v));\r\n }\r\n value[RefKey][key] = unref(v);\r\n },\r\n });\r\n };\r\n try {\r\n for (var _c = __values(Object.keys(objectWithRefs)), _d = _c.next(); !_d.done; _d = _c.next()) {\r\n var key = _d.value;\r\n _loop_1(key);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n return value;\r\n}\n\nvar SKIPFLAG = '__v_skip';\r\nfunction isRaw(obj) {\r\n var _a;\r\n return Boolean(obj &&\r\n hasOwn(obj, '__ob__') &&\r\n typeof obj.__ob__ === 'object' &&\r\n ((_a = obj.__ob__) === null || _a === void 0 ? void 0 : _a[SKIPFLAG]));\r\n}\r\nfunction isReactive(obj) {\r\n var _a;\r\n return Boolean(obj &&\r\n hasOwn(obj, '__ob__') &&\r\n typeof obj.__ob__ === 'object' &&\r\n !((_a = obj.__ob__) === null || _a === void 0 ? void 0 : _a[SKIPFLAG]));\r\n}\r\n/**\r\n * Proxing property access of target.\r\n * We can do unwrapping and other things here.\r\n */\r\nfunction setupAccessControl(target) {\r\n if (!isPlainObject(target) ||\r\n isRaw(target) ||\r\n isArray(target) ||\r\n isRef(target) ||\r\n isComponentInstance(target) ||\r\n accessModifiedSet.has(target))\r\n return;\r\n accessModifiedSet.set(target, true);\r\n var keys = Object.keys(target);\r\n for (var i = 0; i < keys.length; i++) {\r\n defineAccessControl(target, keys[i]);\r\n }\r\n}\r\n/**\r\n * Auto unwrapping when access property\r\n */\r\nfunction defineAccessControl(target, key, val) {\r\n if (key === '__ob__')\r\n return;\r\n if (isRaw(target[key]))\r\n return;\r\n var getter;\r\n var setter;\r\n var property = Object.getOwnPropertyDescriptor(target, key);\r\n if (property) {\r\n if (property.configurable === false) {\r\n return;\r\n }\r\n getter = property.get;\r\n setter = property.set;\r\n if ((!getter || setter) /* not only have getter */ &&\r\n arguments.length === 2) {\r\n val = target[key];\r\n }\r\n }\r\n setupAccessControl(val);\r\n proxy(target, key, {\r\n get: function getterHandler() {\r\n var value = getter ? getter.call(target) : val;\r\n // if the key is equal to RefKey, skip the unwrap logic\r\n if (key !== RefKey && isRef(value)) {\r\n return value.value;\r\n }\r\n else {\r\n return value;\r\n }\r\n },\r\n set: function setterHandler(newVal) {\r\n if (getter && !setter)\r\n return;\r\n // If the key is equal to RefKey, skip the unwrap logic\r\n // If and only if \"value\" is ref and \"newVal\" is not a ref,\r\n // the assignment should be proxied to \"value\" ref.\r\n if (key !== RefKey && isRef(val) && !isRef(newVal)) {\r\n val.value = newVal;\r\n }\r\n else if (setter) {\r\n setter.call(target, newVal);\r\n val = newVal;\r\n }\r\n else {\r\n val = newVal;\r\n }\r\n setupAccessControl(newVal);\r\n },\r\n });\r\n}\r\nfunction observe(obj) {\r\n var Vue = getRegisteredVueOrDefault();\r\n var observed;\r\n if (Vue.observable) {\r\n observed = Vue.observable(obj);\r\n }\r\n else {\r\n var vm = defineComponentInstance(Vue, {\r\n data: {\r\n $$state: obj,\r\n },\r\n });\r\n observed = vm._data.$$state;\r\n }\r\n // in SSR, there is no __ob__. Mock for reactivity check\r\n if (!hasOwn(observed, '__ob__')) {\r\n mockReactivityDeep(observed);\r\n }\r\n return observed;\r\n}\r\n/**\r\n * Mock __ob__ for object recursively\r\n */\r\nfunction mockReactivityDeep(obj, seen) {\r\n var e_1, _a;\r\n if (seen === void 0) { seen = new Set(); }\r\n if (seen.has(obj) || hasOwn(obj, '__ob__') || !Object.isExtensible(obj))\r\n return;\r\n def(obj, '__ob__', mockObserver(obj));\r\n seen.add(obj);\r\n try {\r\n for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var key = _c.value;\r\n var value = obj[key];\r\n if (!(isPlainObject(value) || isArray(value)) ||\r\n isRaw(value) ||\r\n !Object.isExtensible(value)) {\r\n continue;\r\n }\r\n mockReactivityDeep(value, seen);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n}\r\nfunction mockObserver(value) {\r\n if (value === void 0) { value = {}; }\r\n return {\r\n value: value,\r\n dep: {\r\n notify: noopFn,\r\n depend: noopFn,\r\n addSub: noopFn,\r\n removeSub: noopFn,\r\n },\r\n };\r\n}\r\nfunction createObserver() {\r\n return observe({}).__ob__;\r\n}\r\nfunction shallowReactive(obj) {\r\n var e_2, _a;\r\n if (!isObject(obj)) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('\"shallowReactive()\" must be called on an object.');\r\n }\r\n return obj;\r\n }\r\n if (!(isPlainObject(obj) || isArray(obj)) ||\r\n isRaw(obj) ||\r\n !Object.isExtensible(obj)) {\r\n return obj;\r\n }\r\n var observed = observe(isArray(obj) ? [] : {});\r\n var ob = observed.__ob__;\r\n var _loop_1 = function (key) {\r\n var val = obj[key];\r\n var getter;\r\n var setter;\r\n var property = Object.getOwnPropertyDescriptor(obj, key);\r\n if (property) {\r\n if (property.configurable === false) {\r\n return \"continue\";\r\n }\r\n getter = property.get;\r\n setter = property.set;\r\n }\r\n proxy(observed, key, {\r\n get: function getterHandler() {\r\n var _a;\r\n (_a = ob.dep) === null || _a === void 0 ? void 0 : _a.depend();\r\n return val;\r\n },\r\n set: function setterHandler(newVal) {\r\n var _a;\r\n if (getter && !setter)\r\n return;\r\n if (!isForceTrigger() && val === newVal)\r\n return;\r\n if (setter) {\r\n setter.call(obj, newVal);\r\n }\r\n else {\r\n val = newVal;\r\n }\r\n (_a = ob.dep) === null || _a === void 0 ? void 0 : _a.notify();\r\n },\r\n });\r\n };\r\n try {\r\n for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var key = _c.value;\r\n _loop_1(key);\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n return observed;\r\n}\r\n/**\r\n * Make obj reactivity\r\n */\r\nfunction reactive(obj) {\r\n if (!isObject(obj)) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('\"reactive()\" must be called on an object.');\r\n }\r\n return obj;\r\n }\r\n if (!(isPlainObject(obj) || isArray(obj)) ||\r\n isRaw(obj) ||\r\n !Object.isExtensible(obj)) {\r\n return obj;\r\n }\r\n var observed = observe(obj);\r\n setupAccessControl(observed);\r\n return observed;\r\n}\r\n/**\r\n * Make sure obj can't be a reactive\r\n */\r\nfunction markRaw(obj) {\r\n if (!(isPlainObject(obj) || isArray(obj)) || !Object.isExtensible(obj)) {\r\n return obj;\r\n }\r\n // set the vue observable flag at obj\r\n var ob = createObserver();\r\n ob[SKIPFLAG] = true;\r\n def(obj, '__ob__', ob);\r\n // mark as Raw\r\n rawSet.set(obj, true);\r\n return obj;\r\n}\r\nfunction toRaw(observed) {\r\n var _a, _b;\r\n if (isRaw(observed) || !Object.isExtensible(observed)) {\r\n return observed;\r\n }\r\n return ((_b = (_a = observed) === null || _a === void 0 ? void 0 : _a.__ob__) === null || _b === void 0 ? void 0 : _b.value) || observed;\r\n}\n\nfunction isReadonly(obj) {\r\n return readonlySet.has(obj);\r\n}\r\n/**\r\n * **In @vue/composition-api, `reactive` only provides type-level readonly check**\r\n *\r\n * Creates a readonly copy of the original object. Note the returned copy is not\r\n * made reactive, but `readonly` can be called on an already reactive object.\r\n */\r\nfunction readonly(target) {\r\n if ((process.env.NODE_ENV !== 'production') && !isObject(target)) {\r\n warn(\"value cannot be made reactive: \".concat(String(target)));\r\n }\r\n else {\r\n readonlySet.set(target, true);\r\n }\r\n return target;\r\n}\r\nfunction shallowReadonly(obj) {\r\n var e_1, _a;\r\n if (!isObject(obj)) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(\"value cannot be made reactive: \".concat(String(obj)));\r\n }\r\n return obj;\r\n }\r\n if (!(isPlainObject(obj) || isArray(obj)) ||\r\n (!Object.isExtensible(obj) && !isRef(obj))) {\r\n return obj;\r\n }\r\n var readonlyObj = isRef(obj)\r\n ? new RefImpl({})\r\n : isReactive(obj)\r\n ? observe({})\r\n : {};\r\n var source = reactive({});\r\n var ob = source.__ob__;\r\n var _loop_1 = function (key) {\r\n var val = obj[key];\r\n var getter;\r\n var property = Object.getOwnPropertyDescriptor(obj, key);\r\n if (property) {\r\n if (property.configurable === false && !isRef(obj)) {\r\n return \"continue\";\r\n }\r\n getter = property.get;\r\n }\r\n proxy(readonlyObj, key, {\r\n get: function getterHandler() {\r\n var value = getter ? getter.call(obj) : val;\r\n ob.dep.depend();\r\n return value;\r\n },\r\n set: function (v) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\r\n }\r\n },\r\n });\r\n };\r\n try {\r\n for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var key = _c.value;\r\n _loop_1(key);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n readonlySet.set(readonlyObj, true);\r\n return readonlyObj;\r\n}\n\n/**\r\n * Delete a property and trigger change if necessary.\r\n */\r\nfunction del(target, key) {\r\n var Vue = getVueConstructor();\r\n var warn = Vue.util.warn;\r\n if ((process.env.NODE_ENV !== 'production') && (isUndef(target) || isPrimitive(target))) {\r\n warn(\"Cannot delete reactive property on undefined, null, or primitive value: \".concat(target));\r\n }\r\n if (isArray(target) && isValidArrayIndex(key)) {\r\n target.splice(key, 1);\r\n return;\r\n }\r\n var ob = target.__ob__;\r\n if (target._isVue || (ob && ob.vmCount)) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('Avoid deleting properties on a Vue instance or its root $data ' +\r\n '- just set it to null.');\r\n return;\r\n }\r\n if (!hasOwn(target, key)) {\r\n return;\r\n }\r\n delete target[key];\r\n if (!ob) {\r\n return;\r\n }\r\n ob.dep.notify();\r\n}\n\nvar genName = function (name) { return \"on\".concat(name[0].toUpperCase() + name.slice(1)); };\r\nfunction createLifeCycle(lifeCyclehook) {\r\n return function (callback, target) {\r\n var instance = getCurrentInstanceForFn(genName(lifeCyclehook), target);\r\n return (instance &&\r\n injectHookOption(getVueConstructor(), instance, lifeCyclehook, callback));\r\n };\r\n}\r\nfunction injectHookOption(Vue, instance, hook, val) {\r\n var options = instance.proxy.$options;\r\n var mergeFn = Vue.config.optionMergeStrategies[hook];\r\n var wrappedHook = wrapHookCall(instance, val);\r\n options[hook] = mergeFn(options[hook], wrappedHook);\r\n return wrappedHook;\r\n}\r\nfunction wrapHookCall(instance, fn) {\r\n return function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var prev = getCurrentInstance();\r\n setCurrentInstance(instance);\r\n try {\r\n return fn.apply(void 0, __spreadArray([], __read(args), false));\r\n }\r\n finally {\r\n setCurrentInstance(prev);\r\n }\r\n };\r\n}\r\nvar onBeforeMount = createLifeCycle('beforeMount');\r\nvar onMounted = createLifeCycle('mounted');\r\nvar onBeforeUpdate = createLifeCycle('beforeUpdate');\r\nvar onUpdated = createLifeCycle('updated');\r\nvar onBeforeUnmount = createLifeCycle('beforeDestroy');\r\nvar onUnmounted = createLifeCycle('destroyed');\r\nvar onErrorCaptured = createLifeCycle('errorCaptured');\r\nvar onActivated = createLifeCycle('activated');\r\nvar onDeactivated = createLifeCycle('deactivated');\r\nvar onServerPrefetch = createLifeCycle('serverPrefetch');\n\nvar fallbackVM;\r\nfunction flushPreQueue() {\r\n flushQueue(this, WatcherPreFlushQueueKey);\r\n}\r\nfunction flushPostQueue() {\r\n flushQueue(this, WatcherPostFlushQueueKey);\r\n}\r\nfunction hasWatchEnv(vm) {\r\n return vm[WatcherPreFlushQueueKey] !== undefined;\r\n}\r\nfunction installWatchEnv(vm) {\r\n vm[WatcherPreFlushQueueKey] = [];\r\n vm[WatcherPostFlushQueueKey] = [];\r\n vm.$on('hook:beforeUpdate', flushPreQueue);\r\n vm.$on('hook:updated', flushPostQueue);\r\n}\r\nfunction getWatcherOption(options) {\r\n return __assign({\r\n immediate: false,\r\n deep: false,\r\n flush: 'pre',\r\n }, options);\r\n}\r\nfunction getWatchEffectOption(options) {\r\n return __assign({\r\n flush: 'pre',\r\n }, options);\r\n}\r\nfunction getWatcherVM() {\r\n var vm = getCurrentScopeVM();\r\n if (!vm) {\r\n if (!fallbackVM) {\r\n fallbackVM = defineComponentInstance(getVueConstructor());\r\n }\r\n vm = fallbackVM;\r\n }\r\n else if (!hasWatchEnv(vm)) {\r\n installWatchEnv(vm);\r\n }\r\n return vm;\r\n}\r\nfunction flushQueue(vm, key) {\r\n var queue = vm[key];\r\n for (var index = 0; index < queue.length; index++) {\r\n queue[index]();\r\n }\r\n queue.length = 0;\r\n}\r\nfunction queueFlushJob(vm, fn, mode) {\r\n // flush all when beforeUpdate and updated are not fired\r\n var fallbackFlush = function () {\r\n vm.$nextTick(function () {\r\n if (vm[WatcherPreFlushQueueKey].length) {\r\n flushQueue(vm, WatcherPreFlushQueueKey);\r\n }\r\n if (vm[WatcherPostFlushQueueKey].length) {\r\n flushQueue(vm, WatcherPostFlushQueueKey);\r\n }\r\n });\r\n };\r\n switch (mode) {\r\n case 'pre':\r\n fallbackFlush();\r\n vm[WatcherPreFlushQueueKey].push(fn);\r\n break;\r\n case 'post':\r\n fallbackFlush();\r\n vm[WatcherPostFlushQueueKey].push(fn);\r\n break;\r\n default:\r\n assert(false, \"flush must be one of [\\\"post\\\", \\\"pre\\\", \\\"sync\\\"], but got \".concat(mode));\r\n break;\r\n }\r\n}\r\nfunction createVueWatcher(vm, getter, callback, options) {\r\n var index = vm._watchers.length;\r\n // @ts-ignore: use undocumented options\r\n vm.$watch(getter, callback, {\r\n immediate: options.immediateInvokeCallback,\r\n deep: options.deep,\r\n lazy: options.noRun,\r\n sync: options.sync,\r\n before: options.before,\r\n });\r\n return vm._watchers[index];\r\n}\r\n// We have to monkeypatch the teardown function so Vue will run\r\n// runCleanup() when it tears down the watcher on unmounted.\r\nfunction patchWatcherTeardown(watcher, runCleanup) {\r\n var _teardown = watcher.teardown;\r\n watcher.teardown = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n _teardown.apply(watcher, args);\r\n runCleanup();\r\n };\r\n}\r\nfunction createWatcher(vm, source, cb, options) {\r\n var _a;\r\n if ((process.env.NODE_ENV !== 'production') && !cb) {\r\n if (options.immediate !== undefined) {\r\n warn(\"watch() \\\"immediate\\\" option is only respected when using the \" +\r\n \"watch(source, callback, options?) signature.\");\r\n }\r\n if (options.deep !== undefined) {\r\n warn(\"watch() \\\"deep\\\" option is only respected when using the \" +\r\n \"watch(source, callback, options?) signature.\");\r\n }\r\n }\r\n var flushMode = options.flush;\r\n var isSync = flushMode === 'sync';\r\n var cleanup;\r\n var registerCleanup = function (fn) {\r\n cleanup = function () {\r\n try {\r\n fn();\r\n }\r\n catch (\r\n // FIXME: remove any\r\n error) {\r\n logError(error, vm, 'onCleanup()');\r\n }\r\n };\r\n };\r\n // cleanup before running getter again\r\n var runCleanup = function () {\r\n if (cleanup) {\r\n cleanup();\r\n cleanup = null;\r\n }\r\n };\r\n var createScheduler = function (fn) {\r\n if (isSync ||\r\n /* without a current active instance, ignore pre|post mode */ vm ===\r\n fallbackVM) {\r\n return fn;\r\n }\r\n return (function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return queueFlushJob(vm, function () {\r\n fn.apply(void 0, __spreadArray([], __read(args), false));\r\n }, flushMode);\r\n });\r\n };\r\n // effect watch\r\n if (cb === null) {\r\n var running_1 = false;\r\n var getter_1 = function () {\r\n // preventing the watch callback being call in the same execution\r\n if (running_1) {\r\n return;\r\n }\r\n try {\r\n running_1 = true;\r\n source(registerCleanup);\r\n }\r\n finally {\r\n running_1 = false;\r\n }\r\n };\r\n var watcher_1 = createVueWatcher(vm, getter_1, noopFn, {\r\n deep: options.deep || false,\r\n sync: isSync,\r\n before: runCleanup,\r\n });\r\n patchWatcherTeardown(watcher_1, runCleanup);\r\n // enable the watcher update\r\n watcher_1.lazy = false;\r\n var originGet = watcher_1.get.bind(watcher_1);\r\n // always run watchEffect\r\n watcher_1.get = createScheduler(originGet);\r\n return function () {\r\n watcher_1.teardown();\r\n };\r\n }\r\n var deep = options.deep;\r\n var isMultiSource = false;\r\n var getter;\r\n if (isRef(source)) {\r\n getter = function () { return source.value; };\r\n }\r\n else if (isReactive(source)) {\r\n getter = function () { return source; };\r\n deep = true;\r\n }\r\n else if (isArray(source)) {\r\n isMultiSource = true;\r\n getter = function () {\r\n return source.map(function (s) {\r\n if (isRef(s)) {\r\n return s.value;\r\n }\r\n else if (isReactive(s)) {\r\n return traverse(s);\r\n }\r\n else if (isFunction(s)) {\r\n return s();\r\n }\r\n else {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(\"Invalid watch source: \".concat(JSON.stringify(s), \".\\n A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.\"), vm);\r\n return noopFn;\r\n }\r\n });\r\n };\r\n }\r\n else if (isFunction(source)) {\r\n getter = source;\r\n }\r\n else {\r\n getter = noopFn;\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(\"Invalid watch source: \".concat(JSON.stringify(source), \".\\n A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.\"), vm);\r\n }\r\n if (deep) {\r\n var baseGetter_1 = getter;\r\n getter = function () { return traverse(baseGetter_1()); };\r\n }\r\n var applyCb = function (n, o) {\r\n if (!deep &&\r\n isMultiSource &&\r\n n.every(function (v, i) { return isSame(v, o[i]); }))\r\n return;\r\n // cleanup before running cb again\r\n runCleanup();\r\n return cb(n, o, registerCleanup);\r\n };\r\n var callback = createScheduler(applyCb);\r\n if (options.immediate) {\r\n var originalCallback_1 = callback;\r\n // `shiftCallback` is used to handle the first sync effect run.\r\n // The subsequent callbacks will redirect to `callback`.\r\n var shiftCallback_1 = function (n, o) {\r\n shiftCallback_1 = originalCallback_1;\r\n // o is undefined on the first call\r\n return applyCb(n, isArray(n) ? [] : o);\r\n };\r\n callback = function (n, o) {\r\n return shiftCallback_1(n, o);\r\n };\r\n }\r\n // @ts-ignore: use undocumented option \"sync\"\r\n var stop = vm.$watch(getter, callback, {\r\n immediate: options.immediate,\r\n deep: deep,\r\n sync: isSync,\r\n });\r\n // Once again, we have to hack the watcher for proper teardown\r\n var watcher = vm._watchers[vm._watchers.length - 1];\r\n // if the return value is reactive and deep:true\r\n // watch for changes, this might happen when new key is added\r\n if (isReactive(watcher.value) && ((_a = watcher.value.__ob__) === null || _a === void 0 ? void 0 : _a.dep) && deep) {\r\n watcher.value.__ob__.dep.addSub({\r\n update: function () {\r\n // this will force the source to be revaluated and the callback\r\n // executed if needed\r\n watcher.run();\r\n },\r\n });\r\n }\r\n patchWatcherTeardown(watcher, runCleanup);\r\n return function () {\r\n stop();\r\n };\r\n}\r\nfunction watchEffect(effect, options) {\r\n var opts = getWatchEffectOption(options);\r\n var vm = getWatcherVM();\r\n return createWatcher(vm, effect, null, opts);\r\n}\r\nfunction watchPostEffect(effect) {\r\n return watchEffect(effect, { flush: 'post' });\r\n}\r\nfunction watchSyncEffect(effect) {\r\n return watchEffect(effect, { flush: 'sync' });\r\n}\r\n// implementation\r\nfunction watch(source, cb, options) {\r\n var callback = null;\r\n if (isFunction(cb)) {\r\n // source watch\r\n callback = cb;\r\n }\r\n else {\r\n // effect watch\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(\"`watch(fn, options?)` signature has been moved to a separate API. \" +\r\n \"Use `watchEffect(fn, options?)` instead. `watch` now only \" +\r\n \"supports `watch(source, cb, options?) signature.\");\r\n }\r\n options = cb;\r\n callback = null;\r\n }\r\n var opts = getWatcherOption(options);\r\n var vm = getWatcherVM();\r\n return createWatcher(vm, source, callback, opts);\r\n}\r\nfunction traverse(value, seen) {\r\n if (seen === void 0) { seen = new Set(); }\r\n if (!isObject(value) || seen.has(value) || rawSet.has(value)) {\r\n return value;\r\n }\r\n seen.add(value);\r\n if (isRef(value)) {\r\n traverse(value.value, seen);\r\n }\r\n else if (isArray(value)) {\r\n for (var i = 0; i < value.length; i++) {\r\n traverse(value[i], seen);\r\n }\r\n }\r\n else if (isSet(value) || isMap(value)) {\r\n value.forEach(function (v) {\r\n traverse(v, seen);\r\n });\r\n }\r\n else if (isPlainObject(value)) {\r\n for (var key in value) {\r\n traverse(value[key], seen);\r\n }\r\n }\r\n return value;\r\n}\n\n// implement\r\nfunction computed(getterOrOptions) {\r\n var vm = getCurrentScopeVM();\r\n var getter;\r\n var setter;\r\n if (isFunction(getterOrOptions)) {\r\n getter = getterOrOptions;\r\n }\r\n else {\r\n getter = getterOrOptions.get;\r\n setter = getterOrOptions.set;\r\n }\r\n var computedSetter;\r\n var computedGetter;\r\n if (vm && !vm.$isServer) {\r\n var _a = getVueInternalClasses(), Watcher_1 = _a.Watcher, Dep_1 = _a.Dep;\r\n var watcher_1;\r\n computedGetter = function () {\r\n if (!watcher_1) {\r\n watcher_1 = new Watcher_1(vm, getter, noopFn, { lazy: true });\r\n }\r\n if (watcher_1.dirty) {\r\n watcher_1.evaluate();\r\n }\r\n if (Dep_1.target) {\r\n watcher_1.depend();\r\n }\r\n return watcher_1.value;\r\n };\r\n computedSetter = function (v) {\r\n if ((process.env.NODE_ENV !== 'production') && !setter) {\r\n warn('Write operation failed: computed value is readonly.', vm);\r\n return;\r\n }\r\n if (setter) {\r\n setter(v);\r\n }\r\n };\r\n }\r\n else {\r\n // fallback\r\n var computedHost_1 = defineComponentInstance(getVueConstructor(), {\r\n computed: {\r\n $$state: {\r\n get: getter,\r\n set: setter,\r\n },\r\n },\r\n });\r\n vm && vm.$on('hook:destroyed', function () { return computedHost_1.$destroy(); });\r\n computedGetter = function () { return computedHost_1.$$state; };\r\n computedSetter = function (v) {\r\n if ((process.env.NODE_ENV !== 'production') && !setter) {\r\n warn('Write operation failed: computed value is readonly.', vm);\r\n return;\r\n }\r\n computedHost_1.$$state = v;\r\n };\r\n }\r\n return createRef({\r\n get: computedGetter,\r\n set: computedSetter,\r\n }, !setter, true);\r\n}\n\nvar NOT_FOUND = {};\r\nfunction resolveInject(provideKey, vm) {\r\n var source = vm;\r\n while (source) {\r\n // @ts-ignore\r\n if (source._provided && hasOwn(source._provided, provideKey)) {\r\n //@ts-ignore\r\n return source._provided[provideKey];\r\n }\r\n source = source.$parent;\r\n }\r\n return NOT_FOUND;\r\n}\r\nfunction provide(key, value) {\r\n var _a;\r\n var vm = (_a = getCurrentInstanceForFn('provide')) === null || _a === void 0 ? void 0 : _a.proxy;\r\n if (!vm)\r\n return;\r\n if (!vm._provided) {\r\n var provideCache_1 = {};\r\n proxy(vm, '_provided', {\r\n get: function () { return provideCache_1; },\r\n set: function (v) { return Object.assign(provideCache_1, v); },\r\n });\r\n }\r\n vm._provided[key] = value;\r\n}\r\nfunction inject(key, defaultValue, treatDefaultAsFactory) {\r\n var _a;\r\n if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }\r\n var vm = (_a = getCurrentInstance()) === null || _a === void 0 ? void 0 : _a.proxy;\r\n if (!vm) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(\"inject() can only be used inside setup() or functional components.\");\r\n return;\r\n }\r\n if (!key) {\r\n (process.env.NODE_ENV !== 'production') && warn(\"injection \\\"\".concat(String(key), \"\\\" not found.\"), vm);\r\n return defaultValue;\r\n }\r\n var val = resolveInject(key, vm);\r\n if (val !== NOT_FOUND) {\r\n return val;\r\n }\r\n if (defaultValue === undefined && (process.env.NODE_ENV !== 'production')) {\r\n warn(\"Injection \\\"\".concat(String(key), \"\\\" not found\"), vm);\r\n }\r\n return treatDefaultAsFactory && isFunction(defaultValue)\r\n ? defaultValue()\r\n : defaultValue;\r\n}\n\nvar EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\r\n ? Object.freeze({})\r\n : {};\r\nvar useCssModule = function (name) {\r\n var _a;\r\n if (name === void 0) { name = '$style'; }\r\n var instance = getCurrentInstance();\r\n if (!instance) {\r\n (process.env.NODE_ENV !== 'production') && warn(\"useCssModule must be called inside setup()\");\r\n return EMPTY_OBJ;\r\n }\r\n var mod = (_a = instance.proxy) === null || _a === void 0 ? void 0 : _a[name];\r\n if (!mod) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(\"Current instance does not have CSS module named \\\"\".concat(name, \"\\\".\"));\r\n return EMPTY_OBJ;\r\n }\r\n return mod;\r\n};\r\n/**\r\n * @deprecated use `useCssModule` instead.\r\n */\r\nvar useCSSModule = useCssModule;\n\nfunction createApp(rootComponent, rootProps) {\r\n if (rootProps === void 0) { rootProps = undefined; }\r\n var V = getVueConstructor();\r\n var mountedVM = undefined;\r\n var app = {\r\n config: V.config,\r\n use: V.use.bind(V),\r\n mixin: V.mixin.bind(V),\r\n component: V.component.bind(V),\r\n directive: function (name, dir) {\r\n if (dir) {\r\n V.directive(name, dir);\r\n return app;\r\n }\r\n else {\r\n return V.directive(name);\r\n }\r\n },\r\n mount: function (el, hydrating) {\r\n if (!mountedVM) {\r\n mountedVM = new V(__assign({ propsData: rootProps }, rootComponent));\r\n mountedVM.$mount(el, hydrating);\r\n return mountedVM;\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(\"App has already been mounted.\\n\" +\r\n \"If you want to remount the same app, move your app creation logic \" +\r\n \"into a factory function and create fresh app instances for each \" +\r\n \"mount - e.g. `const createMyApp = () => createApp(App)`\");\r\n }\r\n return mountedVM;\r\n }\r\n },\r\n unmount: function () {\r\n if (mountedVM) {\r\n mountedVM.$destroy();\r\n mountedVM = undefined;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(\"Cannot unmount an app that is not mounted.\");\r\n }\r\n },\r\n };\r\n return app;\r\n}\n\nvar nextTick = function nextTick() {\r\n var _a;\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return (_a = getVueConstructor()) === null || _a === void 0 ? void 0 : _a.nextTick.apply(this, args);\r\n};\n\nvar fallbackCreateElement;\r\nvar createElement = function createElement() {\r\n var _a;\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var instance = (this === null || this === void 0 ? void 0 : this.proxy) || ((_a = getCurrentInstance()) === null || _a === void 0 ? void 0 : _a.proxy);\r\n if (!instance) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('`createElement()` has been called outside of render function.');\r\n if (!fallbackCreateElement) {\r\n fallbackCreateElement = defineComponentInstance(getVueConstructor()).$createElement;\r\n }\r\n return fallbackCreateElement.apply(fallbackCreateElement, args);\r\n }\r\n return instance.$createElement.apply(instance, args);\r\n};\n\nfunction useSlots() {\r\n return getContext().slots;\r\n}\r\nfunction useAttrs() {\r\n return getContext().attrs;\r\n}\r\nfunction getContext() {\r\n var i = getCurrentInstance();\r\n if ((process.env.NODE_ENV !== 'production') && !i) {\r\n warn(\"useContext() called without active instance.\");\r\n }\r\n return i.setupContext;\r\n}\n\nfunction set(vm, key, value) {\r\n var state = (vm.__composition_api_state__ =\r\n vm.__composition_api_state__ || {});\r\n state[key] = value;\r\n}\r\nfunction get(vm, key) {\r\n return (vm.__composition_api_state__ || {})[key];\r\n}\r\nvar vmStateManager = {\r\n set: set,\r\n get: get,\r\n};\n\nfunction asVmProperty(vm, propName, propValue) {\r\n var props = vm.$options.props;\r\n if (!(propName in vm) && !(props && hasOwn(props, propName))) {\r\n if (isRef(propValue)) {\r\n proxy(vm, propName, {\r\n get: function () { return propValue.value; },\r\n set: function (val) {\r\n propValue.value = val;\r\n },\r\n });\r\n }\r\n else {\r\n proxy(vm, propName, {\r\n get: function () {\r\n if (isReactive(propValue)) {\r\n propValue.__ob__.dep.depend();\r\n }\r\n return propValue;\r\n },\r\n set: function (val) {\r\n propValue = val;\r\n },\r\n });\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n // expose binding to Vue Devtool as a data property\r\n // delay this until state has been resolved to prevent repeated works\r\n vm.$nextTick(function () {\r\n if (Object.keys(vm._data).indexOf(propName) !== -1) {\r\n return;\r\n }\r\n if (isRef(propValue)) {\r\n proxy(vm._data, propName, {\r\n get: function () { return propValue.value; },\r\n set: function (val) {\r\n propValue.value = val;\r\n },\r\n });\r\n }\r\n else {\r\n proxy(vm._data, propName, {\r\n get: function () { return propValue; },\r\n set: function (val) {\r\n propValue = val;\r\n },\r\n });\r\n }\r\n });\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n if (props && hasOwn(props, propName)) {\r\n warn(\"The setup binding property \\\"\".concat(propName, \"\\\" is already declared as a prop.\"), vm);\r\n }\r\n else {\r\n warn(\"The setup binding property \\\"\".concat(propName, \"\\\" is already declared.\"), vm);\r\n }\r\n }\r\n}\r\nfunction updateTemplateRef(vm) {\r\n var rawBindings = vmStateManager.get(vm, 'rawBindings') || {};\r\n if (!rawBindings || !Object.keys(rawBindings).length)\r\n return;\r\n var refs = vm.$refs;\r\n var oldRefKeys = vmStateManager.get(vm, 'refs') || [];\r\n for (var index = 0; index < oldRefKeys.length; index++) {\r\n var key = oldRefKeys[index];\r\n var setupValue = rawBindings[key];\r\n if (!refs[key] && setupValue && isRef(setupValue)) {\r\n setupValue.value = null;\r\n }\r\n }\r\n var newKeys = Object.keys(refs);\r\n var validNewKeys = [];\r\n for (var index = 0; index < newKeys.length; index++) {\r\n var key = newKeys[index];\r\n var setupValue = rawBindings[key];\r\n if (refs[key] && setupValue && isRef(setupValue)) {\r\n setupValue.value = refs[key];\r\n validNewKeys.push(key);\r\n }\r\n }\r\n vmStateManager.set(vm, 'refs', validNewKeys);\r\n}\r\nfunction afterRender(vm) {\r\n var stack = [vm._vnode];\r\n while (stack.length) {\r\n var vnode = stack.pop();\r\n if (vnode.context)\r\n updateTemplateRef(vnode.context);\r\n if (vnode.children) {\r\n for (var i = 0; i < vnode.children.length; ++i) {\r\n stack.push(vnode.children[i]);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateVmAttrs(vm, ctx) {\r\n var e_1, _a;\r\n if (!vm) {\r\n return;\r\n }\r\n var attrBindings = vmStateManager.get(vm, 'attrBindings');\r\n if (!attrBindings && !ctx) {\r\n // fix 840\r\n return;\r\n }\r\n if (!attrBindings) {\r\n var observedData = reactive({});\r\n attrBindings = { ctx: ctx, data: observedData };\r\n vmStateManager.set(vm, 'attrBindings', attrBindings);\r\n proxy(ctx, 'attrs', {\r\n get: function () {\r\n return attrBindings === null || attrBindings === void 0 ? void 0 : attrBindings.data;\r\n },\r\n set: function () {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(\"Cannot assign to '$attrs' because it is a read-only property\", vm);\r\n },\r\n });\r\n }\r\n var source = vm.$attrs;\r\n var _loop_1 = function (attr) {\r\n if (!hasOwn(attrBindings.data, attr)) {\r\n proxy(attrBindings.data, attr, {\r\n get: function () {\r\n // to ensure it always return the latest value\r\n return vm.$attrs[attr];\r\n },\r\n });\r\n }\r\n };\r\n try {\r\n for (var _b = __values(Object.keys(source)), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var attr = _c.value;\r\n _loop_1(attr);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n}\r\nfunction resolveScopedSlots(vm, slotsProxy) {\r\n var parentVNode = vm.$options._parentVnode;\r\n if (!parentVNode)\r\n return;\r\n var prevSlots = vmStateManager.get(vm, 'slots') || [];\r\n var curSlots = resolveSlots(parentVNode.data.scopedSlots, vm.$slots);\r\n // remove staled slots\r\n for (var index = 0; index < prevSlots.length; index++) {\r\n var key = prevSlots[index];\r\n if (!curSlots[key]) {\r\n delete slotsProxy[key];\r\n }\r\n }\r\n // proxy fresh slots\r\n var slotNames = Object.keys(curSlots);\r\n for (var index = 0; index < slotNames.length; index++) {\r\n var key = slotNames[index];\r\n if (!slotsProxy[key]) {\r\n slotsProxy[key] = createSlotProxy(vm, key);\r\n }\r\n }\r\n vmStateManager.set(vm, 'slots', slotNames);\r\n}\r\nfunction activateCurrentInstance(instance, fn, onError) {\r\n var preVm = getCurrentInstance();\r\n setCurrentInstance(instance);\r\n try {\r\n return fn(instance);\r\n }\r\n catch (\r\n // FIXME: remove any\r\n err) {\r\n if (onError) {\r\n onError(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n finally {\r\n setCurrentInstance(preVm);\r\n }\r\n}\n\nfunction mixin(Vue) {\r\n Vue.mixin({\r\n beforeCreate: functionApiInit,\r\n mounted: function () {\r\n afterRender(this);\r\n },\r\n beforeUpdate: function () {\r\n updateVmAttrs(this);\r\n },\r\n updated: function () {\r\n afterRender(this);\r\n },\r\n });\r\n /**\r\n * Vuex init hook, injected into each instances init hooks list.\r\n */\r\n function functionApiInit() {\r\n var vm = this;\r\n var $options = vm.$options;\r\n var setup = $options.setup, render = $options.render;\r\n if (render) {\r\n // keep currentInstance accessible for createElement\r\n $options.render = function () {\r\n var _this = this;\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return activateCurrentInstance(toVue3ComponentInstance(vm), function () {\r\n return render.apply(_this, args);\r\n });\r\n };\r\n }\r\n if (!setup) {\r\n return;\r\n }\r\n if (!isFunction(setup)) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('The \"setup\" option should be a function that returns a object in component definitions.', vm);\r\n }\r\n return;\r\n }\r\n var data = $options.data;\r\n // wrapper the data option, so we can invoke setup before data get resolved\r\n $options.data = function wrappedData() {\r\n initSetup(vm, vm.$props);\r\n return isFunction(data)\r\n ? data.call(vm, vm)\r\n : data || {};\r\n };\r\n }\r\n function initSetup(vm, props) {\r\n if (props === void 0) { props = {}; }\r\n var setup = vm.$options.setup;\r\n var ctx = createSetupContext(vm);\r\n var instance = toVue3ComponentInstance(vm);\r\n instance.setupContext = ctx;\r\n // fake reactive for `toRefs(props)`\r\n def(props, '__ob__', createObserver());\r\n // resolve scopedSlots and slots to functions\r\n resolveScopedSlots(vm, ctx.slots);\r\n var binding;\r\n activateCurrentInstance(instance, function () {\r\n // make props to be fake reactive, this is for `toRefs(props)`\r\n binding = setup(props, ctx);\r\n });\r\n if (!binding)\r\n return;\r\n if (isFunction(binding)) {\r\n // keep typescript happy with the binding type.\r\n var bindingFunc_1 = binding;\r\n // keep currentInstance accessible for createElement\r\n vm.$options.render = function () {\r\n resolveScopedSlots(vm, ctx.slots);\r\n return activateCurrentInstance(instance, function () { return bindingFunc_1(); });\r\n };\r\n return;\r\n }\r\n else if (isObject(binding)) {\r\n if (isReactive(binding)) {\r\n binding = toRefs(binding);\r\n }\r\n vmStateManager.set(vm, 'rawBindings', binding);\r\n var bindingObj_1 = binding;\r\n Object.keys(bindingObj_1).forEach(function (name) {\r\n var bindingValue = bindingObj_1[name];\r\n if (!isRef(bindingValue)) {\r\n if (!isReactive(bindingValue)) {\r\n if (isFunction(bindingValue)) {\r\n var copy_1 = bindingValue;\r\n bindingValue = bindingValue.bind(vm);\r\n Object.keys(copy_1).forEach(function (ele) {\r\n bindingValue[ele] = copy_1[ele];\r\n });\r\n }\r\n else if (!isObject(bindingValue)) {\r\n bindingValue = ref(bindingValue);\r\n }\r\n else if (hasReactiveArrayChild(bindingValue)) {\r\n // creates a custom reactive properties without make the object explicitly reactive\r\n // NOTE we should try to avoid this, better implementation needed\r\n customReactive(bindingValue);\r\n }\r\n }\r\n else if (isArray(bindingValue)) {\r\n bindingValue = ref(bindingValue);\r\n }\r\n }\r\n asVmProperty(vm, name, bindingValue);\r\n });\r\n return;\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n assert(false, \"\\\"setup\\\" must return a \\\"Object\\\" or a \\\"Function\\\", got \\\"\".concat(Object.prototype.toString\r\n .call(binding)\r\n .slice(8, -1), \"\\\"\"));\r\n }\r\n }\r\n function customReactive(target, seen) {\r\n if (seen === void 0) { seen = new Set(); }\r\n if (seen.has(target))\r\n return;\r\n if (!isPlainObject(target) ||\r\n isRef(target) ||\r\n isReactive(target) ||\r\n isRaw(target))\r\n return;\r\n var Vue = getVueConstructor();\r\n // @ts-expect-error https://github.com/vuejs/vue/pull/12132\r\n var defineReactive = Vue.util.defineReactive;\r\n Object.keys(target).forEach(function (k) {\r\n var val = target[k];\r\n defineReactive(target, k, val);\r\n if (val) {\r\n seen.add(val);\r\n customReactive(val, seen);\r\n }\r\n return;\r\n });\r\n }\r\n function hasReactiveArrayChild(target, visited) {\r\n if (visited === void 0) { visited = new Map(); }\r\n if (visited.has(target)) {\r\n return visited.get(target);\r\n }\r\n visited.set(target, false);\r\n if (isArray(target) && isReactive(target)) {\r\n visited.set(target, true);\r\n return true;\r\n }\r\n if (!isPlainObject(target) || isRaw(target) || isRef(target)) {\r\n return false;\r\n }\r\n return Object.keys(target).some(function (x) {\r\n return hasReactiveArrayChild(target[x], visited);\r\n });\r\n }\r\n function createSetupContext(vm) {\r\n var ctx = { slots: {} };\r\n var propsPlain = [\r\n 'root',\r\n 'parent',\r\n 'refs',\r\n 'listeners',\r\n 'isServer',\r\n 'ssrContext',\r\n ];\r\n var methodReturnVoid = ['emit'];\r\n propsPlain.forEach(function (key) {\r\n var srcKey = \"$\".concat(key);\r\n proxy(ctx, key, {\r\n get: function () { return vm[srcKey]; },\r\n set: function () {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(\"Cannot assign to '\".concat(key, \"' because it is a read-only property\"), vm);\r\n },\r\n });\r\n });\r\n updateVmAttrs(vm, ctx);\r\n methodReturnVoid.forEach(function (key) {\r\n var srcKey = \"$\".concat(key);\r\n proxy(ctx, key, {\r\n get: function () {\r\n return function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var fn = vm[srcKey];\r\n fn.apply(vm, args);\r\n };\r\n },\r\n });\r\n });\r\n if (process.env.NODE_ENV === 'test') {\r\n ctx._vm = vm;\r\n }\r\n return ctx;\r\n }\r\n}\n\n/**\r\n * Helper that recursively merges two data objects together.\r\n */\r\nfunction mergeData(from, to) {\r\n if (!from)\r\n return to;\r\n if (!to)\r\n return from;\r\n var key;\r\n var toVal;\r\n var fromVal;\r\n var keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from);\r\n for (var i = 0; i < keys.length; i++) {\r\n key = keys[i];\r\n // in case the object is already observed...\r\n if (key === '__ob__')\r\n continue;\r\n toVal = to[key];\r\n fromVal = from[key];\r\n if (!hasOwn(to, key)) {\r\n to[key] = fromVal;\r\n }\r\n else if (toVal !== fromVal &&\r\n isPlainObject(toVal) &&\r\n !isRef(toVal) &&\r\n isPlainObject(fromVal) &&\r\n !isRef(fromVal)) {\r\n mergeData(fromVal, toVal);\r\n }\r\n }\r\n return to;\r\n}\r\nfunction install(Vue) {\r\n if (isVueRegistered(Vue)) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('[vue-composition-api] already installed. Vue.use(VueCompositionAPI) should be called only once.');\r\n }\r\n return;\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (Vue.version) {\r\n if (Vue.version[0] !== '2' || Vue.version[1] !== '.') {\r\n warn(\"[vue-composition-api] only works with Vue 2, v\".concat(Vue.version, \" found.\"));\r\n }\r\n }\r\n else {\r\n warn('[vue-composition-api] no Vue version found');\r\n }\r\n }\r\n Vue.config.optionMergeStrategies.setup = function (parent, child) {\r\n return function mergedSetupFn(props, context) {\r\n return mergeData(isFunction(parent) ? parent(props, context) || {} : undefined, isFunction(child) ? child(props, context) || {} : undefined);\r\n };\r\n };\r\n setVueConstructor(Vue);\r\n mixin(Vue);\r\n}\r\nvar Plugin = {\r\n install: function (Vue) { return install(Vue); },\r\n};\n\n// implementation, close to no-op\r\nfunction defineComponent(options) {\r\n return options;\r\n}\n\nfunction defineAsyncComponent(source) {\r\n if (isFunction(source)) {\r\n source = { loader: source };\r\n }\r\n var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out\r\n _b = source.suspensible, // undefined = never times out\r\n suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true\r\n userOnError = source.onError;\r\n if ((process.env.NODE_ENV !== 'production') && suspensible) {\r\n warn(\"The suspensiblbe option for async components is not supported in Vue2. It is ignored.\");\r\n }\r\n var pendingRequest = null;\r\n var retries = 0;\r\n var retry = function () {\r\n retries++;\r\n pendingRequest = null;\r\n return load();\r\n };\r\n var load = function () {\r\n var thisRequest;\r\n return (pendingRequest ||\r\n (thisRequest = pendingRequest =\r\n loader()\r\n .catch(function (err) {\r\n err = err instanceof Error ? err : new Error(String(err));\r\n if (userOnError) {\r\n return new Promise(function (resolve, reject) {\r\n var userRetry = function () { return resolve(retry()); };\r\n var userFail = function () { return reject(err); };\r\n userOnError(err, userRetry, userFail, retries + 1);\r\n });\r\n }\r\n else {\r\n throw err;\r\n }\r\n })\r\n .then(function (comp) {\r\n if (thisRequest !== pendingRequest && pendingRequest) {\r\n return pendingRequest;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && !comp) {\r\n warn(\"Async component loader resolved to undefined. \" +\r\n \"If you are using retry(), make sure to return its return value.\");\r\n }\r\n // interop module default\r\n if (comp &&\r\n (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\r\n comp = comp.default;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && comp && !isObject(comp) && !isFunction(comp)) {\r\n throw new Error(\"Invalid async component load result: \".concat(comp));\r\n }\r\n return comp;\r\n })));\r\n };\r\n return function () {\r\n var component = load();\r\n return {\r\n component: component,\r\n delay: delay,\r\n timeout: timeout,\r\n error: errorComponent,\r\n loading: loadingComponent,\r\n };\r\n };\r\n}\n\nvar version = \"1.5.0\";\r\n// auto install when using CDN\r\nif (typeof window !== 'undefined' && window.Vue) {\r\n window.Vue.use(Plugin);\r\n}\n\nexport { EffectScope, computed, createApp, createRef, customRef, Plugin as default, defineAsyncComponent, defineComponent, del, effectScope, getCurrentInstance, getCurrentScope, createElement as h, inject, isRaw, isReactive, isReadonly, isRef, markRaw, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, provide, proxyRefs, reactive, readonly, ref, set$1 as set, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, useAttrs, useCSSModule, useCssModule, useSlots, version, warn$1 as warn, watch, watchEffect, watchPostEffect, watchSyncEffect };\n","import Vue from 'vue'\nimport VueCompositionAPI from '@vue/composition-api/dist/vue-composition-api.esm.js'\n\nfunction install(_vue) {\n _vue = _vue || Vue\n if (_vue && !_vue['__composition_api_installed__'])\n Vue.use(VueCompositionAPI)\n}\n\ninstall(Vue)\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar version = Vue.version\n\n/**VCA-EXPORTS**/\nexport { EffectScope, computed, createApp, createRef, customRef, defineAsyncComponent, defineComponent, del, effectScope, getCurrentInstance, getCurrentScope, h, inject, isRaw, isReactive, isReadonly, isRef, markRaw, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, provide, proxyRefs, reactive, readonly, ref, set, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, useAttrs, useCSSModule, useCssModule, useSlots, warn, watch, watchEffect, watchPostEffect, watchSyncEffect } from '@vue/composition-api/dist/vue-composition-api.esm.js'\n/**VCA-EXPORTS**/\n\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n version,\n install,\n}\n","import { isVue2, h as h$1, Vue2, defineComponent } from 'vue-demi';\nimport Picker from 'emoji-picker-element/picker';\nimport Database from 'emoji-picker-element/database';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nconst adaptOnsV3 = (ons) => {\r\n if (!ons)\r\n return null;\r\n return Object.entries(ons).reduce((ret, [key, handler]) => {\r\n key = key.charAt(0).toUpperCase() + key.slice(1);\r\n key = `on${key}`;\r\n return Object.assign(Object.assign({}, ret), { [key]: handler });\r\n }, {});\r\n};\r\nconst h = (type, options = {}, chidren) => {\r\n if (isVue2)\r\n return h$1(type, options, chidren);\r\n const { props, domProps, on } = options, extraOptions = __rest(options, [\"props\", \"domProps\", \"on\"]);\r\n let ons = adaptOnsV3(on);\r\n const params = Object.assign(Object.assign(Object.assign(Object.assign({}, extraOptions), props), domProps), ons);\r\n return h$1(type, params, chidren);\r\n};\n\nfunction isDarkMode() {\r\n return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n}\n\nfunction toDashes(key) {\r\n return key.replace(/[A-Z]/g, m => \"-\" + m.toLowerCase());\r\n}\n\nif (Vue2) {\r\n Vue2.config.ignoredElements.push('emoji-picker');\r\n}\r\nvar VuemojiPicker = defineComponent({\r\n props: {\r\n isDark: {\r\n type: Boolean,\r\n required: false,\r\n default: isDarkMode()\r\n },\r\n skinToneEmoji: String,\r\n customEmoji: Array,\r\n dataSource: String,\r\n locale: String,\r\n customCategorySorting: Function,\r\n i18n: Object,\r\n pickerStyle: Object\r\n },\r\n emits: ['emojiClick', 'skinToneChange'],\r\n data: () => ({\r\n picker: new Picker()\r\n }),\r\n methods: {\r\n handleClick(event) {\r\n this.$emit('emojiClick', event.detail);\r\n },\r\n handleSkinToneChange(event) {\r\n this.$emit('skinToneChange', event.detail);\r\n },\r\n updatePickerProps() {\r\n const { skinToneEmoji, dataSource, locale, customEmoji, i18n, customCategorySorting, isDark } = this.$props;\r\n if (skinToneEmoji) {\r\n this.picker.skinToneEmoji = skinToneEmoji;\r\n }\r\n if (dataSource) {\r\n this.picker.dataSource = dataSource;\r\n }\r\n if (locale) {\r\n this.picker.locale = locale;\r\n }\r\n if (customEmoji) {\r\n this.picker.customEmoji = customEmoji;\r\n }\r\n if (i18n) {\r\n this.picker.i18n = i18n;\r\n }\r\n if (customCategorySorting) {\r\n this.picker.customCategorySorting = customCategorySorting;\r\n }\r\n this.picker.classList.toggle('dark', isDark);\r\n this.picker.classList.toggle('light', !isDark);\r\n this.updatePickerStyle();\r\n },\r\n updatePickerStyle() {\r\n if (this.pickerStyle && typeof this.pickerStyle === 'object') {\r\n Object.keys(this.pickerStyle).forEach((key) => {\r\n var _a, _b;\r\n if (key === 'height' && ((_a = this.pickerStyle) === null || _a === void 0 ? void 0 : _a.height)) {\r\n this.picker.style.setProperty('height', this.pickerStyle.height);\r\n }\r\n else if (key === 'width' && ((_b = this.pickerStyle) === null || _b === void 0 ? void 0 : _b.width)) {\r\n this.picker.style.setProperty('width', this.pickerStyle.width);\r\n }\r\n else {\r\n this.picker.style.setProperty(`--${toDashes(key)}`, this.pickerStyle[key]);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n mounted() {\r\n const root = this.$refs.root;\r\n this.updatePickerProps();\r\n root.appendChild(this.picker);\r\n this.picker.addEventListener('emoji-click', this.handleClick);\r\n this.picker.addEventListener('skin-tone-change', this.handleSkinToneChange);\r\n },\r\n beforeUnmount() {\r\n this.picker.removeEventListener('emoji-click', this.handleClick);\r\n this.picker.removeEventListener('skin-tone-change', this.handleSkinToneChange);\r\n },\r\n watch: {\r\n $props: {\r\n handler() {\r\n this.updatePickerProps();\r\n },\r\n deep: true\r\n }\r\n },\r\n render() {\r\n return h('div', {\r\n ref: 'root'\r\n });\r\n }\r\n});\n\nfunction useDatabase() {\r\n return new Database();\r\n}\n\nexport { VuemojiPicker, useDatabase };\n//# sourceMappingURL=vuemoji-picker.esm.js.map\n","var moment = require(\"moment\");\nimport firebase from \"@/services/firebase\";\nimport {\n MEMBER_STATUS\n} from \"@/constants/discussion\";\nimport {\n FIREBASE_ROOT_REF,\n ROOM_TYPE,\n CHAT_MSG_STATUS\n} from \"../../../constants/discussion\";\nimport {\n mapActions,\n mapGetters\n} from \"vuex\";\nimport _ from \"lodash\";\nimport {\n VuemojiPicker,\n useDatabase\n} from 'vuemoji-picker'\nimport chatService from \"../../../services/chat\";\nimport agencyService from \"../../../services/agency\";\nimport chat from '@/mixins/chat';\nimport uploadFile from \"../../../mixins/uploadFile\";\nimport { FILE_ERROR, IMAGE_MIME_TYPES } from \"../../../constants/variables\";\nimport Utils from \"@/mixins/Utils\";\n\n// This reference of firebase should be passed from message.js\nlet rootRef = FIREBASE_ROOT_REF;\nlet refMessage = `${rootRef}/Messages`;\nimport vClickOutside from 'v-click-outside'\nimport { LOG_ACTIVITY_TYPE } from \"../../../constants/chat\";\n\nexport default {\n props: ['info', 'isDisconnected', 'userStatus', 'participantIds','isOpenRoomChat','loadingChatDetail'],\n mixins: [chat, uploadFile, Utils],\n directives: {vClickOutside},\n data() {\n return {\n isFocusSendMessageInput:false,\n message: \"\",\n indexUnreadMessage: undefined,\n arrayUnreadMessageIndex: [],\n numberUnreadMessage: 0,\n isUserStayThanDurationTime: false,\n alert: {\n message: '',\n },\n showEmojiBox: false,\n isShowReactBox: false,\n isShowMarkUnreadBox: false,\n isFirstNewMessage: false,\n showOptionIndex: null,\n currentMsg: null,\n currentMsgIndex: null,\n confirmPopup: {\n message: '',\n closeBtn: '',\n submitBtn: ''\n },\n currentReactMsgHover: null,\n currentMarkUnreadKey: null,\n currentAction: null,\n previewImgs: [],\n reactArr: [\n \"red_heart\",\n \"laughing\",\n \"face_with_open_mouth\",\n \"crying_face\",\n \"angry\",\n \"thumbsup\",\n \"thumbsdown\",\n ],\n isShowAgencyBanner: false,\n agencyPhone: null,\n lastMessageKey: null\n }\n },\n components: {\n VuemojiPicker\n },\n watch: {\n info: {\n // the callback will be called immediately after the start of the observation\n immediate: true, \n handler (val, oldVal) {\n if (val) {\n if(!val.detail.isFirstOpenRoomchat) {\n this.previewImgs = [];\n this.scrollToBottom(\"chatBox\");\n this.isFirstNewMessage = true;\n this.$emit('updateFirstSelectRoom', true);\n \n \n }\n \n\n if(!val.detail.content){\n this.$set(val.detail, 'content', [])\n }\n this.updateUnreadMessage();\n if(this.info && this.info.detail.unreadConversation && this.info.unreadMessageArray.length> 0 && this.info.isScrollTop===false && this.info.isChangeMessage==false && val.detail.isFirstOpenRoomchat) {\n const currentUnreadMessageKey = this.info.unreadMessageArray[0].key;\n const unreadMessageIndex = this.info.detail.content.findIndex(content => content.key === currentUnreadMessageKey);\n this.scrollToElement(`index-${unreadMessageIndex >2 ? (unreadMessageIndex-2) :(unreadMessageIndex>1?unreadMessageIndex:0)}`);\n }\n\n if(this.isUserStayThanDurationTime && val && val.detail.isSelectedRoomchat && this.currentMarkUnreadKey ==null && this.isOpenRoomChat) {\n setTimeout(()=> {\n this.onReadMessage();\n },1500)\n \n }\n \n \n }\n }\n },\n\n isOpenRoomChat: {\n immediate: true, \n handler(val){\n if(val===true) {\n this.isFirstNewMessage = false;\n this.isUserStayThanDurationTime = false;\n this.currentMarkUnreadKey = null;\n this.updateUnreadMessage();\n this.isUserStayThanDurationTime = false;\n const numberInterval = this.chatSettings && this.chatSettings.durationUnread ? this.chatSettings.durationUnread *1000+10 : 10000;\n setTimeout(()=> {\n \n if(this.info && this.info.detail.isSelectedRoomchat && this.currentMarkUnreadKey ==null) {\n this.onReadMessage();\n this.isUserStayThanDurationTime = true;\n \n }\n },numberInterval)\n if (\n this.info &&\n this.info.detail &&\n this.info.detail.inputMessage\n ) {\n this.message =\n this.info.detail.inputMessage !== null\n ? this.info.detail.inputMessage\n : \"\";\n } else {\n this.message = \"\";\n }\n }\n }\n } ,\n chatContent:{\n handler(val){\n if(this.info && this.info.detail.unreadConversation && this.info.unreadMessageArray.length> 0 && this.info.isScrollTop===false && this.info.isChangeMessage==false) {\n this.currentMarkUnreadKey = this.info.unreadMessageArray[0].key;\n const unreadMessageIndex = this.info.detail.content.findIndex(content => content.key === this.currentMarkUnreadKey);\n this.scrollToElement(`index-${unreadMessageIndex >2 ? (unreadMessageIndex-2) :(unreadMessageIndex>1?unreadMessageIndex:0)}`);\n }\n if(!this.info.isScrollTop || this.info.detail.unreadConversation || this.info.isChangeMessage){\n return;\n }\n \n if((val.length%20==0) && val.length>20) {\n this.scrollToElement(`index-18`);\n } else if((val.length%20) !==0) {\n this.scrollToElement(`index-${val.length%20}`);\n\n }\n }\n }\n },\n\n mounted() {\n this.updateUnreadMessage();\n this.getMyAgency();\n\n },\n\n destroyed() {\n this.isFirstNewMessage = false;\n this.isUserStayThanDurationTime = false; },\n computed: {\n ...mapGetters('chat', ['pendingMsgs', 'chatSettings']),\n isAgency() {\n return this.info.detail.type == ROOM_TYPE.AGENCY\n },\n chatBoxHeight() {\n const defaultHeight = 430;\n return this.previewImgs.length ? defaultHeight + 140 : defaultHeight\n },\n roomTitle() {\n const title = this.info.detail.description;\n const mainName = this.info.detail.type == ROOM_TYPE.AGENCY ? this.info.detail.agencyName : this.info.detail.name;\n return mainName + (title ? '-' + title : '');\n },\n participants() {\n return this.info.detail.members.filter(member => member.status == 1);\n },\n \n\n chatContent() {\n const firebasePath = `${refMessage}/${this.info.detail.idFirebase}`\n const infoContent = this.info.detail.content\n\n if(!infoContent) {\n return []\n }\n\n if (this.pendingMsgs[firebasePath]) {\n const userInfo = this.info.detail.members.find(member => member.idFirebase === this.userIdFirebase);\n this.pendingMsgs[firebasePath].forEach(mess => {\n const msgIndex = _.findIndex(infoContent, (content) => content.sentAt === mess.sentAt);\n if (msgIndex === -1) {\n infoContent.push({\n userInfo: userInfo,\n isMine: true,\n ...mess\n })\n }\n });\n }\n\n infoContent.forEach(content => {\n const reactions = content.reactions;\n if (reactions) {\n Object.keys(content.reactions).forEach(emoji => {\n reactions[emoji] = Object.keys(reactions[emoji]).map(key => {\n return {\n ...reactions[emoji][key],\n key: key\n }\n })\n })\n }\n })\n\n return infoContent;\n },\n roomId() {\n return this.info.detail.idFirebase;\n },\n userId() {\n return JSON.parse(localStorage.getItem(\"user\")).pkAdv;\n },\n userCrfId() {\n return JSON.parse(localStorage.getItem(\"user\")).pkCrf;\n },\n userInfo() {\n return JSON.parse(localStorage.getItem(\"user\"))\n },\n userIdFirebase() {\n return `usr-${this.userCrfId}`;\n },\n chatMsgStatus() {\n return CHAT_MSG_STATUS;\n },\n reactEmojis() {\n const database = new useDatabase();\n const emojiArr = [];\n this.reactArr.forEach(item => {\n database.getEmojiByShortcode(item).then(res => {\n emojiArr.push(res);\n })\n })\n return emojiArr;\n }\n },\n created() {\n this.getChatSettings();\n },\n methods: {\n handleScroll() {\n this.$emit('loadMoreMessage', false);\n const element = this.$refs.messagesBar;\n const scrollTop = element.scrollTop;\n if (\n scrollTop==0)\n {\n this.$emit('loadMoreMessage', true);\n }\n },\n getMyAgency() {\n agencyService\n .getAgence()\n .then((res) => {\n if(res && res.data.agency) {\n this.agency = res.data.agency || {};\n const d = new Date();\n const day = d.getUTCDay();\n const timeOpenAgency = this.agency.horairesAgence || [];\n this.agencyPhone = this.agency.tel;\n this.isShowAgencyBanner = false;\n switch(day) {\n case 0: {\n if(timeOpenAgency['dimanche']) {\n this.checkDisplayAgencyBanner(timeOpenAgency['dimanche'].start,timeOpenAgency['dimanche'].end)\n }\n break;\n }\n\n case 1: {\n if(timeOpenAgency['lundi']) {\n this.checkDisplayAgencyBanner(timeOpenAgency['lundi'].start,timeOpenAgency['lundi'].end)\n }\n break;\n }\n\n case 2: {\n if(timeOpenAgency['mardi']) {\n this.checkDisplayAgencyBanner(timeOpenAgency['mardi'].start,timeOpenAgency['mardi'].end)\n }\n break;\n }\n\n case 3: {\n if(timeOpenAgency['mercredi']) {\n this.checkDisplayAgencyBanner(timeOpenAgency['mercredi'].start,timeOpenAgency['mercredi'].end)\n }\n break;\n }\n\n case 4: {\n if(timeOpenAgency['jeudi']) {\n this.checkDisplayAgencyBanner(timeOpenAgency['jeudi'].start,timeOpenAgency['jeudi'].end)\n }\n break;\n }\n\n case 5: {\n if(timeOpenAgency['vendredi']) {\n this.checkDisplayAgencyBanner(timeOpenAgency['vendredi'].start,timeOpenAgency['vendredi'].end)\n }\n break;\n }\n\n case 6: {\n if(timeOpenAgency['samedi']) {\n this.checkDisplayAgencyBanner(timeOpenAgency['samedi'].start,timeOpenAgency['samedi'].end)\n }\n break;\n }\n }\n }\n\n })\n .catch((err) => {\n // Handler error\n });\n },\n checkDisplayAgencyBanner(start,end) {\n if(start == end) {\n this.isShowAgencyBanner = true\n } else {\n \n const d = new Date();\n const hour = d.getHours() ;\n const minute = d.getMinutes();\n const currentDate = (hour < 10 ? ('0'+hour) : hour) + ':' + (minute < 10 ? ('0'+minute) : minute)\n if(currentDate> end || currentDate (Math.round(screenWidth / 2) + 50)) {\n offsetX = 160;\n }\n }\n this.$refs['mark-unread-box'].style.transform = `translate(${position.x - offsetX}px, ${position.y+30}px)`;\n\n setTimeout(() => {\n this.isShowMarkUnreadBox = true\n });\n },\n onMarkUnread() {\n const currentUnreadIndex = this.info.detail.content.findIndex((item)=>item.key ===this.currentMarkUnreadKey);\n if(this.chatContent.length > 0 & currentUnreadIndex!==null && this.chatContent[currentUnreadIndex].sentAt) {\n const logReactBody = {\n idConversation: this.info.detail.id.toString(),\n idUser: this.userCrfId,\n typeAction: LOG_ACTIVITY_TYPE.UNREAD_MESSAGE,\n dtCreateMessage: this.chatContent[currentUnreadIndex].sentAt\n }\n this.isShowMarkUnreadBox = false;\n chatService.logChatActivity(logReactBody).then((res) => {\n this.$emit('click');\n this.updateUnreadMessage()\n if(res && !res.success) {\n this.displayLogChatErrorMessage(res.error)\n }\n \n }).catch((err)=> this.displayLogChatErrorMessage(err.code ||err));\n }\n \n },\n displayLogChatErrorMessage(err) {\n let message = '';\n switch (err){\n case 'err_logs_activity_chat_not_found': {\n message = this.$t('err_logs_activity_chat_not_found');\n break;\n }\n\n case 'err_invalid_date_time_create_message': {\n message = this.$t('err_invalid_date_time_create_message');\n break;\n }\n }\n this.callToaster(message);\n },\n onchangeMessage(event) {\n this.$emit(\"changeMessage\", event);\n },\n onClickOutside() {\n this.isFocusSendMessageInput = false;\n },\n onFocusSendMessageInput() {\n this.isFocusSendMessageInput = true ;\n },\n\n formatPersonName(value) {\n let name = value.firstName + \" \" + value.lastName;\n this.$store.dispatch('SET_LOADING', false)\n switch (value.type) {\n case '1': {\n if (!name.includes(` (${this.$t('adv-role-title')})`)) {\n name = name + ` (${this.$t('adv-role-title')})`;\n return name;\n }\n break;\n }\n\n case '2': {\n if (!name.includes(` (${this.$t('adv-referer-title')})`)) {\n name = name + ` (${this.$t('adv-referer-title')})`;\n return name;\n }\n break;\n }\n\n case '3': {\n if (!name.includes(` (${this.$t('client-participant-title')})`)) {\n name = name + ` (${this.$t('client-participant-title')})`;\n return name;\n }\n break;\n }\n\n case '4': {\n if (!name.includes(` (${this.$t('client-referer-participant-title')})`)) {\n name = name + ` (${this.$t('client-referer-participant-title')})`;\n return name;\n }\n }\n case '5': {\n if (!name.includes(` (${this.$t('agency-participant-title')})`)) {\n name = name + ` (${this.$t('agency-participant-title')})`;\n return name;\n }\n break;\n\n }\n case '6': {\n if (!name.includes(` (${this.$t('agency-referer-title')})`)) {\n name = name + ` (${this.$t('agency-referer-title')})`;\n return name;\n }\n break;\n }\n\n case '7': {\n if (!name.includes(` (${this.$t('agency-lead-title')})`)) {\n name = name + ` (${this.$t('agency-lead-title')})`;\n return name;\n }\n break;\n }\n }\n },\n updateUnreadMessage() {\n this.indexUnreadMessage = undefined;\n this.arrayUnreadMessageIndex = [];\n this.numberUnreadMessage = 0;\n let contentReadAt = this.info.detail.members.find((item) => item.idFirebase == this.userIdFirebase).contentReadAt;\n contentReadAt = moment(contentReadAt).valueOf()\n if (this.info.detail.content && this.info.detail.content.length > 0) {\n this.indexUnreadMessage = this.info.detail.content.findIndex((message, index) =>\n message && (Number(message.sentAt) - Number(contentReadAt)) > 0 && !message.isMine)\n const currentUnreadIndex = this.info.detail.content.findIndex((item)=>item.key ===this.currentMarkUnreadKey);\n if(currentUnreadIndex>=0) {\n this.numberUnreadMessage = this.chatContent.length - currentUnreadIndex;\n this.indexUnreadMessage = currentUnreadIndex;\n this.info.detail.content.map((item, index) => {\n \n if ((Number(item.sentAt) - Number(contentReadAt)) > 0 && !item.isMine && this.arrayUnreadMessageIndex && !this.arrayUnreadMessageIndex.includes(index)) {\n if(index < currentUnreadIndex || index > (currentUnreadIndex + this.numberUnreadMessage)) {\n this.numberUnreadMessage = this.numberUnreadMessage + 1;\n this.arrayUnreadMessageIndex.push(index)\n }\n \n }\n })\n } else {\n if(this.info && this.info.detail && this.info.detail.unreadConversation) {\n this.info.detail.content.map((item, index) => {\n \n if ((Number(item.sentAt) - Number(contentReadAt)) >= 0 && this.arrayUnreadMessageIndex && !this.arrayUnreadMessageIndex.includes(index)) {\n \n this.numberUnreadMessage = this.numberUnreadMessage + 1;\n this.arrayUnreadMessageIndex.push(index)\n }\n })\n this.indexUnreadMessage = this.numberUnreadMessage>0 ? this.info.detail.content.length - this.numberUnreadMessage : null;\n \n }\n\n }\n \n \n \n }\n if(this.isFocusSendMessageInput && this.numberUnreadMessage > 0) {\n setTimeout(() => {\n this.onReadMessage();\n\n }, 1000);\n }\n },\n ...mapActions('chat', [\n 'removePendingMsg', \n 'addPendingMsg', \n 'sendPendingMsgs', \n 'setCurrentConversation', \n 'getChatSettings'\n ]),\n scrollToBottom(id) {\n setTimeout(() => {\n const el = document.getElementById(id);\n if (el) {\n el.scrollTop = el.scrollHeight;\n el.animate({\n scrollTop: el.scrollHeight\n });\n }\n });\n },\n scrollToElement(id) {\n setTimeout(() => {\n const el = document.getElementById(id);\n if (el) {\n el.scrollIntoView()\n }\n });\n },\n onReadMessage() {\n if(this.numberUnreadMessage >0) {\n this.numberUnreadMessage = 0;\n this.currentMarkUnreadKey =null;\n this.indexUnreadMessage = undefined;\n this.arrayUnreadMessageIndex = [];\n const logReactBody = {\n idConversation: this.info.detail.id.toString(),\n idUser: this.userCrfId,\n typeAction: LOG_ACTIVITY_TYPE.READ_MESSAGE\n }\n chatService.logChatActivity(logReactBody).then((res) => {\n this.$emit('click');\n if(res && !res.success) {\n this.displayLogChatErrorMessage(res.error)\n }\n \n }).catch((err)=> this.displayLogChatErrorMessage(err.code ||err));\n this.currentMarkUnreadKey = null;\n }\n \n },\n urlify(text) {\n var urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n return text.replace(urlRegex, function (url) {\n return '' + url + '';\n })\n },\n _uploadFile(event) {\n const files = event.target.files;\n [...files].forEach(file => {\n const {\n name,\n size,\n type\n } = file\n this.uploadFile(file, IMAGE_MIME_TYPES, this.chatSettings.totalMaxImages).then(reader => {\n reader.onload = (e) => {\n this.previewImgs.push({\n file: file,\n name,\n size,\n type,\n preview: e.target.result\n });\n };\n reader.readAsDataURL(file);\n }).catch(err => {\n this.$refs['uploadFile'].value = null;\n if (err === FILE_ERROR.MAX_SIZE) {\n this.callToaster(this.$t('upload-file-max-size-alert').replace('[fileSize]', this.chatSettings.totalMaxImages));\n }\n if (err === FILE_ERROR.INVALID_MIME) {\n this.callToaster(this.$t('apply-candidate-cv-invalid-file'));\n }\n });\n })\n this.$refs['uploadFile'].value = null;\n },\n removePreviewImg(index) {\n this.previewImgs.splice(index, 1);\n },\n selectMessage(message) {\n this.currentMsg = message;\n },\n showConfirmPopup(message, action) {\n this.currentMsg = message;\n this.currentAction = action;\n if (action === 'remove') {\n this.confirmPopup = {\n message: this.$t('remove-message-confirm'),\n closeBtn: this.$t('cancel-btn'),\n submitBtn: this.$t('nagora-yes-btn')\n }\n }\n this.$bvModal.show('confirmModal');\n },\n onConfirmPopup() {\n if (this.currentAction === 'remove') {\n this.removeAMessage();\n }\n this.hideModal();\n },\n removeAMessage() {\n firebase\n .database()\n .ref(`${refMessage}/${this.roomId}/${this.currentMsg.key}/deleted`)\n .set(true);\n const logDeleteBody = {\n idConversation: this.info.detail.id.toString(),\n idUser: this.userCrfId,\n typeAction: LOG_ACTIVITY_TYPE.DELETE_MESSAGE\n }\n this.onchangeMessage(true)\n chatService.logChatActivity(logDeleteBody).then((res)=> {\n if(res && !res.success) {\n this.displayLogChatErrorMessage(res.error)\n }\n \n }).catch((err)=> this.displayLogChatErrorMessage(err));\n },\n hideModal() {\n this.confirmPopup = {\n message: '',\n closeBtn: '',\n submitBtn: ''\n };\n this.$bvModal.hide('confirmModal');\n },\n selectEmoji(emoji) {\n this.message += emoji.emoji.unicode;\n },\n openEmojiBox() {\n setTimeout(() => {\n this.showEmojiBox = !this.showEmojiBox\n });\n },\n checkIsPending(item) {\n const firebasePath = `${refMessage}/${this.roomId}`;\n return this.pendingMsgs[firebasePath] && this.pendingMsgs[firebasePath].filter(mess => mess.sentAt === item.sentAt).length\n },\n displayTime(index) {\n const date = new Date(\n this.chatContent[index].sentAt\n ).setHours(0, 0, 0, 0);\n if (index === 0) {\n return this.getDisplayTime(date);\n } else {\n const dateBefore = new Date(\n this.chatContent[index - 1].sentAt\n ).setHours(0, 0, 0, 0);\n if (dateBefore < date) {\n return this.getDisplayTime(date);\n }\n }\n },\n \n getDisplayTime(time) {\n if (time >= this.getDateBefore(1).getTime()) {\n return this.$t(\"chat-today-label\");\n } else if (time >= this.getDateBefore(2).getTime()) {\n return this.$t(\"chat-yesterday-label\");\n } else {\n return moment(time).local().format(\"DD/MM/YYYY\");\n }\n },\n getSentTime(date) {\n return moment(date).format(\"LT\");\n },\n sendMsg(e) {\n e.preventDefault();\n if (this.userStatus == MEMBER_STATUS.BLOCKED) {\n this.alert.message = this.$t('discussion-block-alert-text');\n this.$refs['alertPopup'].show();\n } else {\n const memberInfo = this.info.detail.members.find(member => member.idFirebase === this.userIdFirebase);\n const text = this.isScriptTag(this.message.trim()) ? this.message.trim() : this.urlify(this.message.trim());\n const rawText = this.message.replace(//g, \">\").trim();\n const pendingMsgs = {\n sentAt: new Date().getTime(),\n sentBy: `usr-${this.userCrfId}`,\n text: text || '',\n rawText: rawText || '',\n files: this.previewImgs,\n reactions: null,\n replyMessage: null,\n seen: false,\n memberId: memberInfo.id,\n conversationId: this.info.detail.id\n };\n\n if (this.message.trim() || this.previewImgs.length) {\n this.info.detail.content.push({\n ...pendingMsgs,\n userInfo: this.userInfo,\n isMine: true\n });\n this.addPendingMsg({\n msg: pendingMsgs,\n path: `${refMessage}/${this.roomId}`\n });\n if (!this.isDisconnected) {\n this.sendPendingMsgs({path:`${refMessage}/${this.roomId}`, conversationId:this.info.detail.id});\n }\n this.message = \"\";\n this.$emit(\"changeMessage\", this.message);\n this.previewImgs = [];\n this.scrollToBottom(\"chatBox\");\n }\n }\n },\n sendMsgToFirebase(msg) {\n let newData = firebase\n .database()\n .ref(`${refMessage}/` + this.roomId)\n .push();\n newData.set(msg);\n },\n formatTime(time) {\n if (time >= this.getDateBefore(7).getTime()) {\n return moment(time).format(\"dddd\");\n } else {\n return moment(time).format(\"LL\");\n }\n },\n getDateBefore(dayNumber) {\n const currDate = new Date();\n return new Date(currDate.getTime() - dayNumber * 24 * 60 * 60 * 1000);\n },\n getDefaultImg() {\n return require('@/assets/avatar-male.png');\n },\n handleEnter(e) {\n const isEnter = e.which === 13;\n const isShiftEnter = (e.which === 13) && e.shiftKey;\n\n if (isShiftEnter) {\n return;\n }\n if (isEnter) {\n this.sendMsg(e);\n }\n },\n showReactBox(index) {\n const position = this.$refs[`reactBtn-${index}`][0].getBoundingClientRect();\n const screenWidth = window.innerWidth;\n let offsetX = 120;\n // Responsive\n if (screenWidth <= 768) {\n if (position.x < (Math.round(screenWidth / 2) - 50)) {\n offsetX = 50;\n }\n if (position.x > (Math.round(screenWidth / 2) + 50)) {\n offsetX = 160;\n }\n }\n this.$refs['react-emoji-box'].style.transform = `translate(${position.x - offsetX}px, ${position.y - 55}px)`;\n \n setTimeout(() => {\n this.isShowReactBox = true\n });\n this.currentMsgIndex = index;\n this.currentMsg = this.chatContent[index];\n },\n reactMsg(code) {\n const reactObj = {\n id: this.userIdFirebase,\n name: this.$options.filters.personName(this.userInfo)\n };\n const reactEmojis = this.chatContent[this.currentMsgIndex].reactions;\n let currentReact = null;\n let formatEmoji = null;\n if (reactEmojis) {\n formatEmoji = Object.keys(reactEmojis).find(emoji => emoji.codePointAt(0) === code.codePointAt(0))\n }\n if (reactEmojis) {\n Object.keys(reactEmojis).forEach(emoji => {\n const deleteIndex = reactEmojis[emoji].findIndex(react => react.id === this.userIdFirebase)\n if (deleteIndex !== -1) {\n currentReact = emoji.codePointAt(0);\n firebase\n .database()\n .ref(`${refMessage}/${this.roomId}/${this.currentMsg.key}/reactions/${emoji}/${reactEmojis[emoji][deleteIndex].key}`)\n .set(null);\n }\n })\n }\n if (currentReact !== code.codePointAt(0)) {\n if (formatEmoji) {\n firebase\n .database()\n .ref(`${refMessage}/${this.roomId}/${this.currentMsg.key}/reactions/${formatEmoji}`)\n .push(reactObj);\n } else {\n firebase\n .database()\n .ref(`${refMessage}/${this.roomId}/${this.currentMsg.key}/reactions/${code}`)\n .push(reactObj);\n }\n\n\n\n const logReactBody = {\n idConversation: this.info.detail.id.toString(),\n idUser: this.userCrfId,\n nbMessages: 0,\n nbReacts: 1,\n typeAction: LOG_ACTIVITY_TYPE.REACT\n }\n this.onchangeMessage(true)\n chatService.logChatActivity(logReactBody).then((res)=> {\n if(res && !res.success) {\n this.displayLogChatErrorMessage(res.error)\n }\n \n }).catch((err)=> this.displayLogChatErrorMessage(err.code ||err));\n }\n this.isShowReactBox = false;\n },\n showReactList(content, emoji) {\n this.currentReactMsgHover = content.reactions[emoji];\n const position = this.$refs[`emoji-${content.sentAt}${emoji}`][0].getBoundingClientRect();\n const screenWidth = window.innerWidth;\n let offsetX = 50;\n // Responsive\n if (screenWidth <= 768) {\n if (position.x < (Math.round(screenWidth / 2) - 50)) {\n offsetX = 50;\n }\n if (position.x > (Math.round(screenWidth / 2) + 50)) {\n offsetX = 100;\n }\n }\n this.$refs['react-msg-box'].style.transform = `translate(${position.x - offsetX}px, ${position.y + 30}px)`;\n },\n resetModal(e) {\n this.isShowReactBox = false;\n this.currentReactMsgHover = null;\n this.handleScroll()\n }\n }\n}","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/eslint-loader/index.js??ref--13-0!./room.js?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/eslint-loader/index.js??ref--13-0!./room.js?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Room.vue?vue&type=template&id=fc79d66a&scoped=true&\"\nimport script from \"./room.js?vue&type=script&lang=js&\"\nexport * from \"./room.js?vue&type=script&lang=js&\"\nimport style0 from \"./Room.vue?vue&type=style&index=0&id=fc79d66a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fc79d66a\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/people-group-white.a1aa40aa.png\";","!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(e||self)[\"v-click-outside\"]=n()}(this,function(){var e=\"__v-click-outside\",n=\"undefined\"!=typeof window,t=\"undefined\"!=typeof navigator,r=n&&(\"ontouchstart\"in window||t&&navigator.msMaxTouchPoints>0)?[\"touchstart\"]:[\"click\"];function i(e){var n=e.event,t=e.handler;(0,e.middleware)(n)&&t(n)}function a(n,t){var a=function(e){var n=\"function\"==typeof e;if(!n&&\"object\"!=typeof e)throw new Error(\"v-click-outside: Binding value must be a function or an object\");return{handler:n?e:e.handler,middleware:e.middleware||function(e){return e},events:e.events||r,isActive:!(!1===e.isActive),detectIframe:!(!1===e.detectIframe),capture:!!e.capture}}(t.value),d=a.handler,o=a.middleware,c=a.detectIframe,u=a.capture;if(a.isActive){if(n[e]=a.events.map(function(e){return{event:e,srcTarget:document.documentElement,handler:function(e){return function(e){var n=e.el,t=e.event,r=e.handler,a=e.middleware,d=t.composedPath&&t.composedPath()||t.path;(d?d.indexOf(n)<0:!n.contains(t.target))&&i({event:t,handler:r,middleware:a})}({el:n,event:e,handler:d,middleware:o})},capture:u}}),c){var l={event:\"blur\",srcTarget:window,handler:function(e){return function(e){var n=e.el,t=e.event,r=e.handler,a=e.middleware;setTimeout(function(){var e=document.activeElement;e&&\"IFRAME\"===e.tagName&&!n.contains(e)&&i({event:t,handler:r,middleware:a})},0)}({el:n,event:e,handler:d,middleware:o})},capture:u};n[e]=[].concat(n[e],[l])}n[e].forEach(function(t){var r=t.event,i=t.srcTarget,a=t.handler;return setTimeout(function(){n[e]&&i.addEventListener(r,a,u)},0)})}}function d(n){(n[e]||[]).forEach(function(e){return e.srcTarget.removeEventListener(e.event,e.handler,e.capture)}),delete n[e]}var o=n?{bind:a,update:function(e,n){var t=n.value,r=n.oldValue;JSON.stringify(t)!==JSON.stringify(r)&&(d(e),a(e,{value:t}))},unbind:d}:{};return{install:function(e){e.directive(\"click-outside\",o)},directive:o}});\n//# sourceMappingURL=v-click-outside.umd.js.map\n","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 openReqs = {};\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 openReqs[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 = openReqs[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 openReqs[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\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\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 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/**\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 default Database;\n","module.exports = __webpack_public_path__ + \"img/house-heart-white.c22e23d8.png\";"],"sourceRoot":""}